在 Flutter 應用程式中接收 Firebase 動態連結

如要接收建立的 Firebase Dynamic Links,請按照下列步驟操作: 您必須在應用程式中加入 Dynamic Links SDK,並呼叫 FirebaseDynamicLinks.getDynamicLink() 方法就會觸發 取得動態連結傳送的資料

  1. 安裝並初始化 Flutter 專用的 Firebase SDK (如有) 。

  2. 在 Flutter 專案的根目錄中執行下列指令 指令安裝 Dynamic Links 外掛程式:

    flutter pub add firebase_dynamic_links
    
  3. 如果您要建構 Android 應用程式,請開啟專案設定 並確認您已指定 SHA-1 架構中的 SHA-1 簽署金鑰。如果您使用應用程式連結,請一併指定 SHA-256 金鑰。

平台整合

請根據您的平台完成下列整合步驟 並打造適合自己的應用程式

Android

在 Android 中,您必須新增意圖篩選器擷取您網域的深層連結。 如已安裝應用程式,Dynamic Link 將重新導向至你的網域。這樣您的應用程式才能 從 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 平台

  1. 建立 Apple 開發人員帳戶 (如果還沒有的話)。

  2. 在「專案設定」中 頁面,確認您的 iOS 應用程式正確無誤 使用您的 App Store ID 和團隊 ID 進行設定

  3. 在 Apple Developer 網站上,為應用程式建立佈建設定檔 關聯網域功能。

  4. 在 Xcode 中執行以下操作:

    1. 在「TARGETS」標頭下方開啟應用程式。

    2. 在《簽署與協議》中能力頁面,確認您的團隊已登記完成,且 您的佈建設定檔已設定完成。

    3. 在《簽署與協議》中和「Capabilities」(功能) 頁面,啟用「Associated Domains」(關聯網域),以及 將以下內容新增至關聯網域清單 (請將範例替換為您的網域):

      applinks:example.page.link
      
    4. 在「資訊」頁面中,為專案新增網址類型。設定網址配置 欄位加入應用程式的軟體包 ID 中。(ID 可以是 Bundle ID 或 來拍攝。

    5. 如果您已為 Firebase 專案設定自訂網域,請將 iOS 專案的 Info.plist 檔案中動態連結網址前置字串 使用 FirebaseDynamicLinksCustomDomains金鑰。

      <?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 會使用貼上板改善 安裝後深層連結的可靠性說到剪貼簿 連結可確保使用者開啟動態連結時,需要 使用者安裝應用程式後,就可以立即存取 安裝。

      不過,使用貼上板會觸發 通知功能。這樣使用者首次開啟 應用程式,如果貼上板含有動態連結網址,使用者就會看到 通知應用程式存取貼上板的通知, 混淆不清

      如要停用這項行為,請編輯 Xcode 專案的 Info.plist 檔案 並將 FirebaseDeepLinkPasteboardRetrievalEnabled 鍵設為 NO

如要處理應用程式中的動態連結,有兩種情況需要實作。

已終止狀態

設定下列方法:

  1. FirebaseDynamicLinks.getInitialLink - 傳回 Future<PendingDynamicLinkData?>
  2. 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 getter:

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 上測試動態連結,您必須使用實體裝置。您還必須在發布模式 (例如 flutter run --release) 中執行應用程式。 從已終止 (例如應用程式遭到滑動關閉) 的應用程式狀態測試動態連結。