作成した Firebase Dynamic Links を受信するには、Dynamic Links SDK をアプリに組み込み、アプリが読み込まれるときに FirebaseDynamicLinks.getDynamicLink()
メソッドを呼び出して、ダイナミック リンクで渡されたデータを取得する必要があります。
Firebase と Dynamic Links SDK を設定する
Flutter 用の Firebase SDK をインストールして初期化します(まだ行っていない場合)。
Flutter プロジェクトのルート ディレクトリから、次のコマンドを実行して、Dynamic Links プラグインをインストールします。
flutter pub add firebase_dynamic_links
Android アプリをビルドする場合は、Firebase コンソールの [プロジェクトの設定] ページを開き、SHA-1 署名鍵を指定していることを確認します。アプリリンクを使用する場合は SHA-256 の鍵も指定します。
プラットフォームの統合
アプリを作成するプラットフォームに対して、次のプラットフォーム統合手順を行います。
Android
Android の場合、アプリがインストールされると、ダイナミック リンクがドメインにリダイレクトされるため、新しいインテント フィルタをドメインのディープリンクに追加する必要があります。これは、アプリが Play ストアからインストールまたは更新され、[続行] ボタンがタップされた後にダイナミック リンクデータを受け取るために必要です。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>
指定したスキームとホストへのディープリンクを持つダイナミック リンクをユーザーが開くと、アプリはこのインテント フィルタを使用してリンクを処理するアクティビティを開始します。
次のステップでは、アプリの Firebase コンソールに署名証明書の SHA-256 フィンガープリントが登録されていることを確認します。SHA-256 フィンガープリントを取得する方法の詳細については、クライアントの認証ページをご覧ください。
Apple プラットフォーム
Apple デベロッパー アカウントを作成します(まだ作成していない場合)。
Firebase コンソールの [プロジェクトの設定] ページで、iOS アプリが App Store ID とチーム ID で正しく構成されていることを確認します。
Apple Developer サイトで、関連するドメインの機能を有効にして、アプリのプロビジョニング プロファイルを作成します。
Xcode で次の操作を行います。
TARGETS ヘッダーの下にあるアプリを開きます。
[Signing & Capabilities] ページで、チームが登録され、プロビジョニング プロファイルが設定されていることを確認します。
[Signing & Capabilities] ページで [Associated Domains] を有効にし、次のものを [Associated Domains] リストに追加します(「example」はお使いのドメインに置き換えてください)。
applinks:example.page.link
[Info] ページで、URL タイプをプロジェクトに追加します。[URL Schemes] フィールドに、アプリのバンドル ID を設定します(ID は
Bundle ID
など自由に設定できます)。Firebase プロジェクトにカスタム ドメインを設定している場合は、
FirebaseDynamicLinksCustomDomains
キーを使用して iOS アプリのInfo.plist
ファイルにダイナミック リンクの URL プレフィックスを追加します。<?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 はペーストボードを使用して、インストール後のディープリンクの信頼性を向上させます。ペーストボードを使用するのは、ユーザーがダイナミック リンクを開く前にアプリをインストールする必要がある場合でも、インストール後に初めてアプリを開いたときに元のリンク先コンテンツがすぐ表示されるようにするためです。
ただし、iOS 14 以降では、ペーストボードを使用すると通知がトリガーされるというデメリットがあります。つまり、ユーザーが最初にアプリを開いたときに、ペーストボードにダイナミック リンク URL の情報があると、アプリがペーストボードにアクセスしたという通知が表示されます。これはユーザーの混乱を招く可能性があります。
この動作を無効にするには、Xcode プロジェクトの
Info.plist
ファイルを編集し、FirebaseDeepLinkPasteboardRetrievalEnabled
キーをNO
に設定します。
ディープリンクを処理する
アプリでダイナミック リンクを処理するには、2 つのシナリオを実装する必要があります。
終了状態
以下のメソッドを設定します。
FirebaseDynamicLinks.getInitialLink
-Future<PendingDynamicLinkData?>
を返すFirebaseDynamicLinks.onLink
-PendingDynamicLinkData?
を含むStream
を返すイベント ハンドラ
Android は常に終了状態の FirebaseDynamicLinks.getInitialLink
を介してリンクを受け取りますが、iOS ではこの処理は保証されません。そのため、アプリがリンクを確実に受け取るようにするには、両方のメソッドを次の順序で設定することをおすすめします。
Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp(options: DefaultFirebaseConfig.platformOptions);
// Check if you received the link via `getInitialLink` first
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getInitialLink();
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);
}
FirebaseDynamicLinks.instance.onLink.listen(
(pendingDynamicLinkData) {
// Set up the `onLink` event listener next as it may be received here
if (pendingDynamicLinkData != null) {
final Uri deepLink = pendingDynamicLinkData.link;
// Example of using the dynamic link to push the user to a different screen
Navigator.pushNamed(context, deepLink.path);
}
},
);
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);
}
バックグラウンド / フォアグラウンドの状態
アプリが開いている間、またはバックグラウンドで実行されている間は、FirebaseDynamicLinks.onLink
ゲッターを使用します。
FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
// Handle errors
});
または、アプリを開くために正確なダイナミック リンクが使用されたかどうかを確認するには、getDynamicLink
メソッドにリンクを渡します。
String link = 'https://dynamic-link-domain/ke2Qa';
final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));
iOS プラットフォームでのダイナミック リンクのテスト
iOS でダイナミック リンクをテストするには、実際のデバイスを使用する必要があります。また、終了した(アプリをスワイプして閉じた)状態からダイナミック リンクをテストする場合は、アプリをリリースモード(flutter run --release
)で実行する必要があります。