DMM.comの、一番深くておもしろいトコロ。

Dynamic Links導入時につまづいたこと

Dynamic Links導入時につまづいたこと

  • このエントリーをはてなブックマークに追加

この記事は、DMMグループAdvent Calendar 2022 7日目の記事になります。

初めに

7日目は電子書籍事業部iOSチームの長谷川が担当します。

iOSチームではDMMブックスを日々保守運用しています。

apps.apple.com

DMMブックスは電子書籍リーダーなので購入機能はありませんが、ストアで購入後にアプリを起動するリンクを設置しています。 このディープリンクは元々Custome URL Schemeで実装していたため、アプリがインストールされていない時はエラーが表示されるだけで機能しません。 アプリがインストールされていないときはAppStoreへ遷移すると嬉しいよねってことでFirebase Dynamic Links(以下、FDL)を導入することになりました。 初めて扱うFDLとUniversal Linkに戸惑いつつも無事に実装できたので、ささやかですがつまづいたことの対処法をまとめてみました。

トラブル1.実機で動作しない

シミュレータでは問題なく動作するのに、実機ではアプリ起動すらしないという事象に陥ってないでしょうか。

そんな時は最初に設定の見直しをおすすめします。

App ID プレフィックスとFirebaseプロジェクトのTeam IDは一致しているか

プロビジョニングファイルを見てみるとApp IDは<Prefix>.<Bundle ID>という要素で成り立っています。

FDLのドキュメントにあるApp ID プレフィックスとはこの<Prefix>の部分を指しています。

App ID: DMMBOOKS.BOOKS

↑この場合はDMMBOOKSがApp ID プレフィックスとなります。

大抵はこのプレフィックスにチームIDの値が割り当てられていますが、全てのアプリがそうではありません。

DMMブックスもApp IDプレフィックスとチームIDが一致していなかったため、それに気づくまで実機で動きませんでした。

FDLでは自動でapple-app-site-associationファイルを作ってくれて便利ですが、プロジェクトのTeam IDをApp IDプレフィックに使います。

そのため、apple-app-site-associationファイルを自前で用意しない限り、FirebaseプロジェクトのTeam IDにはプロビジョニングファイルのApp IDプレフィックスを設定する必要があるわけですね。 プロジェクトのTeam IDを変更して翌日には反映されていたので、URL接頭辞を登録後でも修正可能です。

確認方法

App IDプレフィックスの一致に関しては設定を目視で確認するよりも、FDLに用意されているiOS自己診断ツールを使えば一発で分かります。

firebase.google.com

コンソール出力例

---- Firebase Dynamic Links diagnostic output start ----
Firebase Dynamic Links framework version 2.1.0
System information: OS iOS, OS version 11.0, model iPhone
Current date 2017-08-14 22:52:56 +0000
AutomaticRetrievalEnabled: YES
ERROR: Specified custom URL scheme is com.your.app but Info.plist do not contain such scheme in CFBundleURLTypes key.
AppID Prefix: DMMBOOKS, Team ID: DMMTV, AppId Prefix equal to Team ID: NO
performDiagnostic detected 1 ERRORS.
---- Firebase Dynamic Links diagnostic output end ----

Custome URL Schemeについてエラーが発生していますが、今回は使わないので特に問題ありません。

エラーとして表示されないから見過ごしてしまいがちですが、ちゃんとApp IDプレフィックスがTeam IDと一致しているか伝えてくれていますね。

トラブル2.ブレークポイントが壊れた

FDLと直接関係ありませんが、デバッグ時に直面して困ってしまったので書いておきます。

ディープリンクをタップでアプリ起動させてデバッグしたいというケースがよくあると思います。 そういう時にSchemeのLaunchをWait for executable to be launchedオプションに設定しますよね。

ですがコード変更後は一度AutomaticallyでRunしないと変更が反映されまれません。

普段使わないオプションなだけに知らなかったのですが、アプリが流し込まれないのか、ブレークポイントの位置が大幅にずれたり止まらなかったり。 実装が上手くいってないのか困惑する羽目になるのでLaunchのオプション変更には注意です。

最後に

FDLの導入でつまづいたことを書いてみました。

  • FirebaseプロジェクトのTeam ID == App ID プレフィックスの一致確認
  • コード変更後はAutomaticallyでRun

基本的に設定さえ間違えなければ、FDLは無料で使えてドキュメントや導入記事など揃っていることもあり導入しやすいです。 実装もコード量は少なく済むので大きな変更にはなりませんでした。

リマインダーやメモに作成したテスト用のダイナミックリンクを入力しておくとデバッグが楽なのでおすすめです。

この記事のような設定ミスはあまり遭遇しないと思いますが、困ってる方の参考になれば幸いです。