Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Firebase Dynamic Link が非推奨になったのでふりかえる

offich
November 05, 2023
290

Firebase Dynamic Link が非推奨になったのでふりかえる

offich

November 05, 2023
Tweet

Transcript

  1. 自己紹介 梅木綾佑(うめきりょうすけ) • WEB フロント x モバイル(iOS / Android) エ

    ンジニア ◦ Nuxt と Flutter 関連の技術がすごく好 きです。 • 他にもアコースティックギター / スノボ / 東海オンエアが好きです
  2. ものすごく残念な気持ち... • 次のサービスは今年の下半期に発表されるみたい? • 発表されたあとでも発行した dynamic link 自体はまだまだ動いてる。 • Flutter

    エンジニアとして働いてから、初めて担当した機能なので、個人的にはとても思いがある 次はどのようなサービスが出てくるかわからないので、こ れを期にふりかえってみた せっかくだから振り返ってみよう!
  3. iOS で言うと Universal Link、Android で言うと AppLinks の仕組みを楽に提供してくれる Firebase のサービス。 一言でいうと、iOS

    / Android アプリへ直接誘導してくれるリンク。 アプリがインストールされていたら、アプリが起動し、 逆にインストールされていなかったら、 App Store と Google Play のアプリが起動し、該当アプリの詳 細が開かれます。 これによりインストールまでのプロセスでは ただリンクを踏むだけと簡単なものになっています。 その前に Dynamic Link ってなんだっけ?
  4. 使うメリット Universal Link や AppLinks を導入するときの WEB サーバーを提供してくれます。 これがとても便利! 概要のときに話したように、Dynamic

    Link の中身は Universal Link と AppLinks になるので、それ ぞれ設定が必要になります。 つまりは Universal Link だったら apple-app-site-association で Store ID や Bundle IDが返ってく る、AppLinks や .well-known/assetlinks.json で Application Id が返ってくる URL を自前で用意し なければなりません。
  5. 使うメリット2 アプリのサービスは展開しているんだけど、 WEB サービスはない。自前で WEB サーバーを持たない と...、なんてめんどくさいことをする必要はありません。 Firebase Dynamic Link

    を使えば、Firebase のコンソールをいじるだけでサブドメインと上の 2つの URL を用意してくれます。 https://subdomain.page.link/apple-app-site-association https://subdomain.page.link/.well-known/assetlinks.json
  6. ローカルでの動作確認ってどうやっているの? 2 Flutter に書くコードはこちら。 初回起動時に発火するのが getInitialLink のメソッ ド。 バックグラウンドからの復帰時に実行されるのが onLink.listen

    の中のコールバック処理。 ここにリダイレクト先にあるリンクから情報を取得する などして、特定のスクリーンに遷移させる、ログを残 す、ユーザー属性に値を付与するなどなど、好きな処 理を書くことができる。
  7. アプリ内で生成してリンクをシェア 社内の Admin から生成された Dynamic Link を一般ユー ザーが読み込むのが多いですが、アプリ内で Dynamic Link

    を発行できます。 Flutter の Dynamic Link の SDK にはしっかりショートリンクを 生成する API があるので、それを使いたい招待機能などのリ ンクをシェアするのに使っています。
  8. ショートリンクの Analytics は気をつけて Firebase のコンソールで作成した ショートリンクの Analytics は 確認することができるが、 ショートリンク

    API で作成したリンク の Analytics は別途 API 叩かないと 見ることができない。 そもそもプロジェクトの Dynamic Link のリンク一覧に表示されない。 ↑クリック数 / リダイレクト数 / インストール数などなど
  9. Android だけ起動時にコールバックが発火しない なぜかはわからないですが、 Android だけ Google Play からインストールしたあと でコールバックが発火しないことが起こっていた。 振り返ると、初回起動時とバックグランドから復帰時の

    処理がしっかり initialLink を取るようにしましょう。 このとき iOS はコールバックと2重でリンクを受け取っ た後の処理で実行されるので、そこはハンドリングをき れいに追加しましょう
  10. ショートリンクからクエリパラメーターを取る これが一番詰まったことであり、 要件として Dynamic Link を外部の会社に生成してもらう必要があるが、 何に詰まっていたかと言うと、 Dynamic Link のショートリンクに付与されたパラメーターをアプリの

    中で取得することができない。 起動されたことにフックして発火するコールバックの引数にショートリンクに付与されているパラメー ターを取得する API やプロパティが生えていない。 https://dynamic-short.page.link/abcdef?hoge=fuga この hoge=fugaを取れない
  11. Dynamic Link に link というクエリパラメーターをつけると、動作などについては今までと基本同じ。 これはドキュメントなどに明記されていなかったが、 Dynamic Link のショートリンクはこの長い URL

    のエイリアスだったことがわかった。 https://dynamic-short.page.link/abcdef?hoge=fuga ↓ https://subdomain.page.link/?link=https://example.com&hoge=fuga&apn=${Android Package Name}&isi={iOS Store Id}&ibi=${iOS BundleId} ショートリンクからクエリパラメーターを取る その3
  12. コールバックの引数の link には link のクエリパラメーターの値がそのまま入っている。 ここの APN / ISI /

    IBI のクエリパラメーターがものすごく大事 です。そうでないと、アプリへの遷移が 動かなかった。 APN = Android Package Name ISI = iOS Store Id IBI = iOS Bundle Id ショートリンクからクエリパラメーターを取る その4