1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

AndroidのFirebase Dynamic Linksをお試し

Last updated at Posted at 2022-03-29

Android12からhttpsでのディープリンクができなくなったという記事を見たこともあり、今後はhttpsでのアプリ起動する場合、FirebaseのDyanamic LinksもしくはAppLinksが必要そうだったので調査しました。

その記事はこちら

まずはFirebaseのDynamic Linksについて調べてみたのでまとめです。

1.Firebase Dynamic Linksとは?

Android,iOSの両方の端末でURLをクリックした際に、アプリを起動できます。その際にアプリがインストールされていない場合、GooglePlayStore、AppStoreの該当ページに遷移したり設定したページへの遷移なんかができたりします。 URLSchemeと違って、起動時に複数のアプリが存在する場合にはアプリ選択画面が出てくることなく、該当のアプリを直接起動できます。

2.Firebaseプロジェクトの設定

Dynamic Linksを利用するにはまず、Firebaseのプロジェクト作成が必要になります。

該当のアプリを選択して、プロジェクトの設定を行います。

スクリーンショット 2022-02-27 13.43.44.png

プロジェクトの全般 -> アプリ追加からAndroidのアプリを追加

スクリーンショット 2022-02-27 13.49.50.png

手順に従って、jsonファイルを該当のプロジェクトに配置します。
SHA-1の登録がありますが一旦スキップしてしまってOKです。

スクリーンショット 2022-02-27 13.50.55.png

プロジェクトにgoogle-services.jsonを設置
スクリーンショット 2022-02-27 13.52.18.png

アプリで署名して使うkeystoreのSha1とSha256の情報をプロジェクトに追加します。

下記のコマンドで取得できます。

keytool -list -v -keystore [keystoreのパス]

スクリーンショット 2022-02-27 14.13.32.png

取得したSha1とSha256を登録します。(画像の赤枠部分です)

Firebaseの設定は完了です。あとはDynamic Links側の設定をします。

3.Dynamic Linksの設定

独自のURLを発行し、アプリがなかった時などの設定を行います。

FirebaseのメニューのDynamic Linksを選択します。
スクリーンショット 2022-02-27 14.00.06.png

ドメインを作成します。こちらは利用されていないものにする必要があるので、xxxx.page.linkのxxxxの部分を独自の文字列にすればOKです。

スクリーンショット 2022-03-22 15.45.25.png

ドメインに問題がなければ下記のように作成されます。

スクリーンショット 2022-02-27 14.01.34.png

そのあと、「新しいダイナミック リンク」からURLを作成します。

スクリーンショット 2022-02-27 14.21.46.png

押下すると下記の画面が表示されるので、各々設定していきます。

スクリーンショット 2022-02-27 14.01.50.png

ダイナミック リンクの設定です。今回はテストで入れているのですが、実際はアプリの紹介ページなどになります。
アプリがインストールされていない場合(設定による)やPCで該当のURLを開いた場合にはこちらが開くようになります。

スクリーンショット 2022-03-15 15.44.21.png

Android用のリンク動作を定義できて、アプリ内でディープリンクをハンドリングするかやインストールされていなかった場合にGooglePlayのページを開くなどの設定が可能です。
「dynamictest」となっていますが、こちらは今回実際にアプリを起動させる対象になるので最初の流れで作成したFirebaseプロジェクトの値を設定しておきます。

スクリーンショット 2022-02-27 14.02.50.png

ここまで設定できたら、Dynamic Links側の設定も完了です。

4.アプリ側の設定

アプリ側の設定についてですが、AndroidStudioを使っていると比較的簡単に設定してくれます。

AndroidStudioのTools -> App Links Assistantを選択

スクリーンショット 2022-02-27 14.28.24.png

メニューが表示されるので、「Open URL Mapping Editor」を押下します。
スクリーンショット 2022-02-27 14.28.37.png

Hostに先ほど作成した、URLを入れます。Activityには起動したいActivityを入れておきます。

スクリーンショット 2022-02-27 14.29.16.png

こちらでOKを押すと、AndroidManifest.xmlに追加されます。

Webサイトに設置されているものと一致しているかの確認ができるのですが、こちらdebugだとうまくいきますが選択したkeystoreだとうまくいきませんでした。。。
そのため、別途下記のサイトでチェックしました。
https://developers.google.com/digital-asset-links/tools/generator

各項目を入れて「Test statement」を実施して、Successになれば大丈夫です。
スクリーンショット 2022-02-27 14.45.05.png

下記の「Generate Digital Asset Links file」とありますが、今回はFirebaseのDynamic Links側で自動で生成してくれるので不要なため、そのまま閉じてしまってOKです。

スクリーンショット 2022-02-27 14.36.02.png

これで全て準備が終わったので、端末にアプリを入れて起動してみます。
テスト1

テスト2 テスト3

ブラウザでURLを入力すると、一瞬プログレスダイアログが表示された後でアプリが起動します。

アプリ側でハンドリングしたい場合

アプリの起動までは出来たのですが、案件によってはURLによって起動する画面を選びたいみたいなことが発生すると思います。 その場合にはアプリ側で処理をハンドリングできるようにアプリ側に設定が必要です。 公式ページが分かりやすく記載あるので、下記を参考にするといいと思います。

公式ページ

まずはFirebaseの設定を有効にするために、アプリのprojectのgradleにpathを追加

スクリーンショット 2022-02-27 15.33.50.png

アプリのモジュール側のgradleのpluginsに追加
スクリーンショット 2022-02-27 15.33.56.png

同様にアプリのモジュール側のgradleにDynamic Linksで利用するライブラリ追加
スクリーンショット 2022-02-27 15.05.00.png

firebase-bomというのを使うとFirebase関連のライブラリの関係を解決してくれるようなので、一つ一つ設定する必要がなくて良きです。
利用しない場合は、bomを外して各々のfirebase-dynamic-linksとfirebase-analyticsにバージョン指定すればOKです。

起動する先に指定したActivityでDynamic Linksのデータを受け取れるように記述します。

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        getDynamicLinks(intent)
    }

    private fun getDynamicLinks(intent: android.content.Intent) {
        FirebaseDynamicLinks.getInstance()
            .getDynamicLink(intent)
            .addOnSuccessListener(this) { pendingDynamicData ->
                if (pendingDynamicData != null) {
                    Toast.makeText(
                        applicationContext,
                        " dynamic links url ${pendingDynamicData.link}",
                        Toast.LENGTH_LONG
                    ).show()
                }
            }
    }
}

これでURLが取得できるようになりました。テストでToastを表示するようにしてます。

テスト4

Dynamic Linksの設定されているディープリンクのURLが取得できます。
こちらのURLにクエリをつけるなどすればそちらをパースすることでアプリ側で出し分けなどは可能です。

5.まとめ

Firebase Dynamic Linksについて調べてみました。導入から実行まで比較的簡単に試せるのが分かっていただけたのでは?と思います。 AppLinksと比べるとホストの設定等の手間がなく、気楽にURLでの起動が試せるのが良かったです。

「インストールされていなかったら、ストアに飛ばしたい」や「あるWebページに飛ばしたい」となるとWebページ側で対応が必要だったりしますし、セキュアな情報をやりとりしようとした際にはURLSchemeだと別のアプリでも起動できる可能性があったりと安全ではない部分があります。
Firebase Dynamic Linksを利用すれば、そういったところが簡単に実装できるので広告で利用したり、LPページにダウンロードリンクを付けたりするときに便利ですし、外部の決済サービスとの連携を行ったりする場合にも利用できるのではないかと思います。

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?