だいぶ前にiPhone用のFirebaseアプリにLINEログイン機能を追加することに挑戦していたのですが、LINEログイン側がバージョンアップしたことにより、独自サーバーに設置したnode.jsのコードが
Authentication error: Cannot verify access token.
を出すようになってしまい、結果的にLINEログインできなくなっていました。LINE開発者になるところからXcodeに組み込むまでの流れは過去のMEMOをご参考に。
サンプルとして提供されていたコードは、v1対応のままでしたので、v2.1に合わせて、書き直してこちらのGitHubにForkして書いておきました。
上記のコードのうち、verifyLineToken部分が肝です。ここでエラーが起こると、シンタックスエラーがあった場合でも、全てエラーメッセージが’Authentication error: Cannot verify access token.’となる感じで書かれています。
LINEログインv1の提供終了
こちらの発表に記載がありましたが、
2018年6月30日に提供終了
検証エンドポイント:https://api.line.me/v1/oauth/verify
Lineから取得したTokenを検証するエンドポイントが2018年6月30日に終了していました。(だいぶ前。。。)
仕様に大きな変更がなければ、エンドポイントのuriを変更するだけでも良さそうだったのですが、肝心な部分として MID っつーものがレスポンスからなくなったため、Firebase側でユニークなIDを作成できなくなりました。
midの代わりにuserIdを使ってFirebaseUidを作成
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
東京造形大学卒業後、マクロメディア(現アドビ)に入社。QAやテクニカルサポートマネージャーとしてFlash、DreamweaverなどのWeb製品を担当。独立後、2007年に虫カゴデザインスタジオ株式会社を設立。2021年東京三鷹を拠点に。最近は、Unity, Unity Netcode for GameObjects, CakePHP, Laravel, ZBrush, Modo, Adobe Substance 3D, Adobe Firefly, Xcode, Apple Vision Pro, Firebaseにフォーカスしています。モバイルアプリ開発情報を主としたブログ「MUSHIKAGO APPS MEMO」の中の人。