Google I/O 2022 で発表された Firebase の最新情報をご覧ください。詳細

FlutterアプリでFirebaseDynamicLinksを受信する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

作成した Firebase Dynamic Links を受け取るには、Dynamic Links SDK をアプリに組み込み、アプリの読み込み時にFirebaseDynamicLinks.getDynamicLink()メソッドを呼び出して、Dynamic Link で渡されたデータを取得する必要があります。

  1. Flutter 用の Firebase SDK をまだインストールしていない場合は、インストールして初期化します

  2. Flutter プロジェクトのルート ディレクトリから次のコマンドを実行して、Dynamic Links プラグインをインストールします。

    flutter pub add firebase_dynamic_links
    
  3. 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>

ユーザーが、指定したスキームとホストへのディープ リンクを含むダイナミック リンクを開くと、アプリはこのインテント フィルターを使用してアクティビティを開始し、リンクを処理します。

Apple プラットフォーム

  1. まだ持っていない場合は、Apple 開発者アカウントを作成します

  2. Firebase コンソールの [プロジェクト設定] ページで、iOS アプリが App Store ID とチーム ID で正しく構成されていることを確認します。

  3. Apple Developer サイトで、Associated Domain 機能を有効にしてアプリのプロビジョニング プロファイルを作成します。

  4. Xcode で、次の操作を行います。

    1. TARGETSヘッダーの下でアプリを開きます。

    2. [Signing & Capabilities] ページで、チームが登録され、プロビジョニング プロファイルが設定されていることを確認します。

    3. [署名と機能] ページで、関連付けられたドメインを有効にし、関連付けられたドメイン リストに以下を追加します。

      applinks:example.page.link
      
    4. 情報ページで、URL タイプをプロジェクトに追加します。 URL スキーム フィールドをアプリのバンドル ID に設定します。 (識別子は、 Bundle IDまたは任意のものにすることができます。)

    5. 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>
      
    6. オプション: 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 でダイナミック リンクをテストするには、実際のデバイスを使用する必要があります。また、終了した (つまり、アプリがスワイプして閉じられた) アプリの状態からダイナミック リンクをテストする場合は、アプリをリリース モード (つまりflutter run --release ) で実行する必要があります。