FirebaseアプリでLINEログインを実装する(2)

スポンサーリンク

だいぶ前にiPhone用のFirebaseアプリにLINEログイン機能を追加することに挑戦していたのですが、LINEログイン側がバージョンアップしたことにより、独自サーバーに設置したnode.jsのコードが

Authentication error: Cannot verify access token.

を出すようになってしまい、結果的にLINEログインできなくなっていました。LINE開発者になるところからXcodeに組み込むまでの流れは過去のMEMOをご参考に。

Firebase (iOS) : LINEログイン認証に挑戦
Facebookログイン、Twitterログインを使った認証は、あらかじめFirebase側に用意されたログイン方法なのでわりとシンプルに利...

サンプルとして提供されていたコードは、v1対応のままでしたので、v2.1に合わせて、書き直してこちらのGitHubにForkして書いておきました。

Samples showcasing how to sign in Firebase using additional Identity Providers - mushikago/custom-auth-samples

上記のコードのうち、verifyLineToken部分が肝です。ここでエラーが起こると、シンタックスエラーがあった場合でも、全てエラーメッセージが’Authentication error: Cannot verify access token.’となる感じで書かれています。

LINEログインv1の提供終了

注:このお知らせは、LINEログインv1をお使いの方のみを対象としています。最新バージョンのv2.1またはv2のエンドポイントをご利用の方には影響ありません。 LINEログインv1のエンドポイントの提供を、2018年3月31日より段階的に終了します。エンドポイントとアクセス方法に応じて、提供終了日が下記のようにスケジ...

こちらの発表に記載がありましたが、

2018年6月30日に提供終了

検証エンドポイント:https://api.line.me/v1/oauth/verify

Lineから取得したTokenを検証するエンドポイントが2018年6月30日に終了していました。(だいぶ前。。。)

仕様に大きな変更がなければ、エンドポイントのuriを変更するだけでも良さそうだったのですが、肝心な部分として MID っつーものがレスポンスからなくなったため、Firebase側でユニークなIDを作成できなくなりました。

midの代わりにuserIdを使ってFirebaseUidを作成

LINE Developersサイトは開発者向けのポータルサイトです。LINEのさまざまな開発者向けプロダクトを利用するための、管理ツールやドキュメントを利用できます。LINEログインやMessaging APIを活用して、アプリやサービスをもっと便利に。

MIDをユーザーIDに変換する

LINEログインv2以降では、ユーザーはMIDではなくユーザーIDで識別されます。

ここに記載があるように、ユーザーIDを改めて調べる部分を追加せねばなりません。

(70行目)
rp(getProfileOptions).then(response => {
(中略)
const firebaseUid = `line:${response.userId}`;

部分を追加し、firebase用のUidを作成しました。getFirebaseUserの第一引数はもう使わないので削除しておきました。

Firebase側がLINEログインをずっと無視しているので自作せねばなりませんが、まだこの先も同じことが起こる可能性があるので注意が必要ですね。

検証用 Xcode SwiftUI

検証用のXcode SwiftUIの ContentView.swift をGistにアップしときました。 https://gist.github.com/mushikago/03a5548d84cc168fcc213373c47c67e4

info.plist に以下のように書いておくと動作します。また、Firebaseコンソールから取得するGoogleService-info.plistもお忘れなく。

<key>LineSDKConfig</key>
<dict>
<key>ChannelID</key>
<string>XXXXXXXXXX</string>
<key>ValidationServerDomain</key>
<string>https://xxxxxx.herokuapp.com</string>
</dict>

おまけメモ

  • Herokuでnode.jsを動作させている場合、console.logをすると、「heroku logs -t –app アプリ名」で出力しながらデバグできます。
  • generateLineApiRequestForVerifyという関数を作っていますが、// -> uri + '?access_token=xxxxx%20xxxxx’ という形で検証するための request-promise のためのオプション生成関数です。
  • equest-promise -> https://github.com/request/request-promise