35
26

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 3 years have passed since last update.

Flutter で Dynamic Links を解釈する

Last updated at Posted at 2020-09-06

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 をデバッグする方法

手順は以下です。

  1. Dynamic Links を動的に生成(ちょっと工夫が必要)
  2. リンクをクリックしストアを開く
  3. 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 は設定していない例です

スクリーンショット 2020-09-06 14.11.38.png

これをスマホ上でクリックすると、指定したアプリのページが開きます。
その状態で自分のアプリをビルド & インストールしてあげると擬似的にストアからインストールした状態を再現することができ、
dynamicLinksHandlerNonInstall 内でディープリンクなどの情報を取得できました。

35
26
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
35
26

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?