Dynamic Links
Dynamic Links 便利ですよね。
簡単に説明すると 1 つの URL で最終的にいきつくリンクを条件によって決めることができるリンクのことです。
主にアプリをインストールされていなければストアに飛ばしたり、インストールされていればアプリを起動といったような分岐に使われます。
以前 Android で実装したことがあったので雰囲気はわかっていたのですが Flutter で動くか心配だったので検証した記録です。
結論
Flutter でも動きます。
ネイティブ実装も不要です。
以下のパッケージを使うとすべて Flutter で完結します。
基本的に以下のハンドラーを main.dart なりに書いておくと未インストールの場合でもどの画面にいたとしても Dynamic Links を解釈できます。
/// 未インストールの場合
/// dynamicLinksHandlerNonInstall を main() 内で実行
void dynamicLinksHandlerNonInstall() async {
final data = await FirebaseDynamicLinks.instance.getInitialLink();
final Uri deepLink = data?.link;
/// do something...
}
/// インストール済みの場合
/// main() 内に定義しておく
FirebaseDynamicLinks.instance.onLink(
onSuccess: (PendingDynamicLinkData dynamicLink) async {
final deepLink = dynamicLink?.link;
if (deepLink != null) {
/// do something...
}
}, onError: (OnLinkErrorException e) async {
print(e.message);
});
以下に検証の記録を記します。(特に未インストール時の検証が面倒だった…)
インストール済みのとき
これは上に記した FirebaseDynamicLinks.onLink
を定義しただけ。
/// do something
のところに画面遷移なり書いてあげれば良いです。
未インストールのとき
未インストール時にストアに飛ばすこともすごいのですが、
ストア経由でインストールし、アプリを立ち上げた場合でもディープリンクなどの情報が引き継ぐことができます。
引き継いだディープリンクを取り出す方法が上に記した dynamicLinksHandlerNonInstall
です。
ただ、公開していないアプリや開発段階のアプリで未インストール時の動作を確かめるのに少し手間です。
未公開のアプリで Dyanimic Links をデバッグする方法
手順は以下です。
- Dynamic Links を動的に生成(ちょっと工夫が必要)
- リンクをクリックしストアを開く
-
flutter run
でスマホにアプリをインストールする
Dynamic Links を動的に生成
Dynamic links を動的に生成する方法があります。
https://firebase.google.com/docs/dynamic-links/rest?hl=ja
以下のパラメータを POST してあげるとリンクを得ることができます。
ポイントは 公開されているアプリのストア上のページ
です。
別のアプリのものでも構いません。
{
dynamicLinkInfo: {
domainUriPrefix: 'Firebase 上で定義した Dynamic Link のドメイン',
link: 'ディープリンク',
androidInfo: {
androidPackageName: '自分のアプリのパッケージ名',
androidFallbackLink: '公開されているアプリのストア上のページ'
},
iosInfo: {
iosBundleId: '自分のアプリのバンドルID',
iosFallbackLink: '公開されているアプリのストア上のページ'
}
}
}
生成されたリンクに ?d=1
をつけてブラウザ上でアクセスし、以下のような画面が現れたら成功です。
※ iOS は設定していない例です
これをスマホ上でクリックすると、指定したアプリのページが開きます。
その状態で自分のアプリをビルド & インストールしてあげると擬似的にストアからインストールした状態を再現することができ、
dynamicLinksHandlerNonInstall
内でディープリンクなどの情報を取得できました。