Join us in person and online for Firebase Summit on October 18, 2022. Learn how Firebase can help you accelerate app development, release your app with confidence, and scale with ease. Register now

在 Flutter 應用中接收 Firebase 動態鏈接

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

要接收您創建的 Firebase 動態鏈接,您必須在應用中包含動態鏈接 SDK,並在應用加載時調用FirebaseDynamicLinks.getDynamicLink()方法以獲取動態鏈接中傳遞的數據。

  1. 如果您尚未安裝並初始化 Flutter 的 Firebase SDK

  2. 在 Flutter 項目的根目錄中,運行以下命令來安裝 Dynamic Links 插件:

    flutter pub add firebase_dynamic_links
    
  3. 如果您正在構建 Android 應用,請打開 Firebase 控制台的項目設置頁面,並確保您已指定 SHA-1 簽名密鑰。如果您使用 App Links,請同時指定您的 SHA-256 密鑰。

平台整合

針對您為其構建應用程序的平台完成以下平台集成步驟。

安卓

在 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>

當用戶打開帶有指向您指定的方案和主機的深層鏈接的動態鏈接時,您的應用將使用此意圖過濾器啟動 Activity 以處理該鏈接。

蘋果平台

  1. 如果您還沒有Apple 開發者帳戶,請創建一個。

  2. 在 Firebase 控制台的項目設置頁面上,確保使用您的 App Store ID 和團隊 ID 正確配置您的 iOS 應用。

  3. 在 Apple Developer 網站上,為您的應用創建一個啟用了關聯域功能的配置文件。

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

    1. TARGETS標題下打開您的應用程序。

    2. 在 Signing & Capabilities 頁面上,確保您的 Team 已註冊,並且您的 Provisioning Profile 已設置。

    3. 在 Signing & Capabilities 頁面上,啟用Associated Domains並將以下內容添加到 Associated Domains 列表中:

      applinks:example.page.link
      
    4. 在信息頁面上,將 URL 類型添加到您的項目。將 URL Schemes 字段設置為您的應用程序的包 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. 可選:禁用動態鏈接 SDK 對 iOS 粘貼板的使用。

      默認情況下,動態鏈接 SDK 使用粘貼板來提高安裝後深層鏈接的可靠性。通過使用粘貼板,動態鏈接可以確保當用戶打開動態鏈接但需要先安裝您的應用時,用戶在安裝後第一次打開應用時可以立即轉到原始鏈接內容。

      這樣做的缺點是使用粘貼板會在 iOS 14 及更高版本上觸發通知。因此,當用戶第一次打開您的應用時,如果粘貼板包含動態鏈接 URL,他們將看到您的應用訪問粘貼板的通知,這可能會導致混淆。

      要禁用此行為,請編輯 Xcode 項目的Info.plist文件並將FirebaseDeepLinkPasteboardRetrievalEnabled鍵設置為NO

要在您的應用程序中處理動態鏈接,需要實現兩個場景。

終止狀態

如果應用程序終止, 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);
}

或者,如果您希望確定是否使用了確切的動態鏈接來打開應用程序,請將其傳遞給getDynamicLink方法:

String link = 'https://dynamic-link-domain/ke2Qa';

final PendingDynamicLinkData? initialLink = await FirebaseDynamicLinks.instance.getDynamicLink(Uri.parse(link));

背景/前景狀態

當應用程序打開或在後台時,您可以使用流處理程序監聽動態鏈接事件。 FirebaseDynamicLinks.onLink getter 返回一個包含PendingDynamicLinkDataStream

FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) {
  Navigator.pushNamed(context, dynamicLinkData.link.path);
}).onError((error) {
  // Handle errors
});