作成した Firebase Dynamic Links を受け取るには、Dynamic Links SDK をアプリに組み込み、アプリの読み込み時にFirebaseDynamicLinks.getDynamicLink()
メソッドを呼び出して、Dynamic Link で渡されたデータを取得する必要があります。
Firebase と Dynamic Links SDK を設定する
Flutter プロジェクトのルート ディレクトリから次のコマンドを実行して、Dynamic Links プラグインをインストールします。
flutter pub add firebase_dynamic_links
Android アプリを構築している場合は、Firebase コンソールの [プロジェクト設定] ページを開き、SHA-1 署名キーを指定していることを確認してください。アプリ リンクを使用する場合は、SHA-256 キーも指定します。
プラットフォーム統合
アプリを構築するプラットフォームについて、次のプラットフォーム統合手順を完了します。
アンドロイド
Android では、アプリがインストールされている場合にダイナミック リンクがドメインにリダイレクトされるため、ドメインの新しいインテント フィルター キャッチ ディープ リンクを追加する必要があります。これは、アプリが Play ストアからインストール/更新され、[続行] ボタンがタップされた後に、アプリが Dynamic Link データを受信するために必要です。 AndroidManifest.xml
:
<intent-filter>
<action android:name="android.intent.action.VIEW"/>
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
<data
android:host="example.com"
android:scheme="https"/>
</intent-filter>
ユーザーが、指定したスキームとホストへのディープ リンクを含むダイナミック リンクを開くと、アプリはこのインテント フィルターを使用してアクティビティを開始し、リンクを処理します。
次のステップは、署名証明書の SHA-256 フィンガープリントがアプリの Firebase コンソールに登録されていることを確認することです。 SHA-256 フィンガープリントを取得する方法の詳細については、クライアントの認証ページを参照してください。
Apple プラットフォーム
まだ持っていない場合は、Apple 開発者アカウントを作成します。
Firebase コンソールの [プロジェクト設定] ページで、iOS アプリが App Store ID とチーム ID で正しく構成されていることを確認します。
Apple Developer サイトで、Associated Domain 機能を有効にしてアプリのプロビジョニング プロファイルを作成します。
Xcode で、次の操作を行います。
TARGETSヘッダーの下でアプリを開きます。
[Signing & Capabilities] ページで、チームが登録され、プロビジョニング プロファイルが設定されていることを確認します。
[Signing & Capabilities] ページで、[ Associated Domains]を有効にして、[Associated Domains] リストに以下を追加します (例を自分のドメインに置き換えてください)。
applinks:example.page.link
情報ページで、URL タイプをプロジェクトに追加します。 URL スキーム フィールドをアプリのバンドル ID に設定します。 (識別子は、
Bundle ID
または任意のものにすることができます。)Firebase プロジェクトのカスタム ドメインを設定した場合は、
FirebaseDynamicLinksCustomDomains
キーを使用して、ダイナミック リンク URL プレフィックスを iOS プロジェクトのInfo.plist
ファイルに追加します。<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>FirebaseDynamicLinksCustomDomains</key> <array> <string>https://custom.domain.io/path1</string> <string>https://custom.domain.io/path2</string> </array> ...other settings </dict> </plist>
オプション: Dynamic Links SDK による iOS ペーストボードの使用を無効にします。
デフォルトでは、Dynamic Links SDK はペーストボードを使用して、インストール後のディープ リンクの信頼性を向上させます。ペーストボードを使用することで、Dynamic Links は、ユーザーが Dynamic Links を開いたときに最初にアプリをインストールする必要がある場合、ユーザーがインストール後に初めてアプリを開いたときに、元のリンクされたコンテンツにすぐに移動できるようにします。
これの欠点は、iOS 14 以降でペーストボードを使用すると通知がトリガーされることです。そのため、ユーザーがアプリを初めて開いたときに、ペーストボードにダイナミック リンク URL が含まれていると、アプリがペーストボードにアクセスしたという通知が表示され、混乱を招く可能性があります。
この動作を無効にするには、Xcode プロジェクトの
Info.plist
ファイルを編集し、FirebaseDeepLinkPasteboardRetrievalEnabled
キーをNO
に設定します。
ディープ リンクの処理
アプリケーションでダイナミック リンクを処理するには、2 つのシナリオを実装する必要があります。
終了状態
アプリケーションが終了した場合、 FirebaseDynamicLinks.getInitialLink
メソッドを使用すると、アプリケーションを開いたダイナミック リンクを取得できます。
これは非同期リクエストであるため、ナビゲーターなどのアプリケーション ロジックをレンダリングする前にリンクを処理することは理にかなっています。たとえば、 main
関数でこれを処理できます。
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);
// Get any initial links
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();
runApp(MyApp(initialLink));
}
次に、アプリケーション ロジック内で、リンクが処理されたかどうかを確認し、次のようなアクションを実行できます。
if (initialLink != null) {
final Uri deepLink = initialLink.link;
// Example of using the dynamic link to push the user to a different screen
Navigator.pushNamed(context, deepLink.path);
}
または、アプリケーションを開くために正確な Dynamic Link が使用されたかどうかを確認したい場合は、代わりにそれをgetDynamicLink
メソッドに渡します。
String link = 'https://dynamic-link-domain/ke2Qa';
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));
バックグラウンド/フォアグラウンド状態
アプリケーションが開いている間、またはバックグラウンドで、ストリーム ハンドラーを使用して Dynamic Links イベントをリッスンできます。 FirebaseDynamicLinks.onLink
ゲッターは、 PendingDynamicLinkData
を含むStream
を返します。
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
// Handle errors
});
iOS プラットフォームでのダイナミック リンクのテスト
iOS でダイナミック リンクをテストするには、実際のデバイスを使用する必要があります。また、終了した (つまり、アプリがスワイプして閉じられた) アプリの状態からダイナミック リンクをテストする場合は、アプリをリリース モード (つまりflutter run --release
) で実行する必要があります。