FDL(Firebase Dynamic Links)実装依頼が来た
なぁにFDLって。ふむふむ…リンクを踏んだらアプリのリンク先のコンテンツに直接移動させるし、デスクトップではウェブサイト上の同じコンテンツに移動させてくれると…そしてアプリがインストールされていない場合、ストア側に自動的に飛ばしてくれる。
めっちゃええやん!
実装してみたが…
じゃさっそく実装してみようか!
Firebase用のアカウント作って、プロジェクトを作って、アプリを登録して、コンソールでFDLを作ってみよう。
Dynamic Linkは dynamichoge.page.link として…
Deep Linkは hogehoge.com/top としよう。(https://とwwwは省略)
次はAndroidでIntent-filter設定が必要だな。
って、どう書けばいいのか…ぐぐってみようか。おっと出た。
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="dynamichoge.page.link"
android:scheme="https"/>
</intent-filter>
これでオッケーと。
で受信するActivityでリスナー付けて終了だ。
よおし、テストしてみるぞ
リンクを踏むとブラウザで開くか、アプリで開くか選択が出るな。
で、アプリを方を開くと?よし起動と画面遷移成功だ
ブラウザを開いたら…うん?ぐるぐるが出た後、アプリが起動して画面遷移したぞ?
うん…次はQRコードを試してみよう。あれ、起動はするけど画面遷移しないぞ?
どういうこった…
Documentをちゃんと読もう
話はここまで。で、何が問題だったのかを先に言うとタイトル通り、intent-filterの宣言を間違ったのです。
先にFDLの動きをざっくり書くと
FDLを踏む -> ブラウザがこれをFDLと認識し、Firebaseに投げる -> FirebaseはFDLに設定していたディープリンクにリダイレクトさせる -> アプリをインストールするなり、起動するなりする。
そして公式のDocumentの一部を見てみましょう。
そうです。上記のコードはリダイレクトURL(ディープリンク)のhogehoge.com/topではなく、ダイナミックリンクであるdynamichoge.page.linkをintent-filterに入れたのです。なんてこった。
正しく書くとこうなります。
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="hogehoge.com"
android:pathPrefix="/top"
android:scheme="https"/>
</intent-filter>
公式Documentをまともに読まなかったのを反省します…