DymnamicLinks が来年廃止されるのに備えて、Flutterアプリで、Android AppLinks と iOS UniversalLinks に対応したので、その一連の手順についてまとめたいと思います。
開発環境
- Flutter 3.19.6
- こちら のように、Dart-define-from-fileを使用して開発環境と本番環境を分けています。
- Xcode 16.0
1. Flutter で使用するライブラリの選定
今回は、app_links を使用しました。
以下のコマンドでインストールします。
flutter pub add app_links
2. 使用するURLの決定
サーバーサイドのエンジニアとアプリ起動に使用するURLを決めます。
3. アプリ側の改修
app_links のドキュメントに従って、設定を行います。
scheme、host、pathPrefix については手順2で決めたものを設定します。
※ Dart-define-from-file を使用している場合、環境毎の変数を定義したファイル内でアプリを起動させるURLのドメインを指定している場合は、そのドメイン名を修正します。
次に、公式 の通り、/lib/main.dart 内に以下のコードを追加します。
final appLinks = AppLinks(); // AppLinks is singleton
// Subscribe to all events (initial link and further)
final sub = appLinks.uriLinkStream.listen((uri) {
// Do something (navigation, ...)
});
※ DynamicLinks を使用していた場合は、以下の部分が上記に置き換わるイメージです。
final sub = FirebaseDynamicLinks.instance.onLink.listen((uri) {
// Do something
});
4. サーバーサイドの対応
アプリ起動に使用するドメインの /.well-known/ 配下に、apple-app-site-association(iOS用)と assetlinks.json(Android用)を設置します。
詳細についてはここでは記載しませんが、以下をご覧ください。
5. テストする
指定のURLを押下した時にアプリが起動するかテストします。
問題なければ対応完了です!
トラブルシューティング
Android
- app_links のドキュメント の下の方にも書いてありますが、本番環境以外では、Android端末側で「リンクの追加」の設定を行う必要があります。
iOS
- apple-app-site-association を設置してから反映されるまで、最大2時間程度かかるようなので、気長に待つ必要があります。
- すぐに動作確認したい場合は、Xcode(Dart-define-from-file を使用している場合、環境毎の変数を定義したファイル内)のURLのドメイン名の後ろに
?mode=developer
を付与すると反映を待たなくても良くなります。
ただしこの場合は、iOS端末の設定アプリから デベロッパ > 「ユニバーサルリンク」セクションの「関連ドメインの開発」をONにする必要があります。
参考:Associated Domains Entitlement (Apple公式)
- すぐに動作確認したい場合は、Xcode(Dart-define-from-file を使用している場合、環境毎の変数を定義したファイル内)のURLのドメイン名の後ろに