要接收您創建的Firebase 動態鏈接,您必須在應用中包含動態鏈接 SDK,並在應用加載時調用FirebaseDynamicLinks.getDynamicLink()
方法以獲取動態鏈接中傳遞的數據。
設置 Firebase 和動態鏈接 SDK
如果您尚未安裝並初始化適用於 Flutter 的 Firebase SDK,請執行此操作。
從 Flutter 項目的根目錄中,運行以下命令來安裝 Dynamic Links 插件:
flutter pub add firebase_dynamic_links
如果您正在構建 Android 應用,請打開 Firebase 控制台的項目設置頁面,並確保您已指定 SHA-1 簽名密鑰。如果您使用應用程序鏈接,還請指定您的 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>
當用戶打開包含指向您指定的方案和主機的深層鏈接的動態鏈接時,您的應用程序將使用此意圖過濾器啟動活動來處理該鏈接。
下一步是確保簽名證書的 SHA-256 指紋已在應用的 Firebase 控制台中註冊。您可以在驗證您的客戶端頁面上找到有關如何檢索 SHA-256 指紋的更多詳細信息。
蘋果平台
如果您還沒有Apple 開發者帳戶,請創建一個。
在 Firebase 控制台的項目設置頁面上,確保您的 iOS 應用已使用您的 App Store ID 和團隊 ID 正確配置。
在 Apple 開發人員網站上,為您的應用程序創建一個啟用關聯域功能的配置文件。
在 Xcode 中,執行以下操作:
在TARGETS標題下打開您的應用程序。
在“簽名和功能”頁面上,確保您的團隊已註冊,並且您的配置文件已設置。
在“簽名和功能”頁面上,啟用關聯域並將以下內容添加到關聯域列表中(將示例替換為您的域):
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 粘貼板的使用。
默認情況下,動態鏈接 SDK 使用粘貼板來提高安裝後深層鏈接的可靠性。通過使用粘貼板,動態鏈接可以確保當用戶打開動態鏈接但需要先安裝您的應用程序時,用戶在安裝後第一次打開應用程序時可以立即轉到原始鏈接內容。
這樣做的缺點是使用粘貼板會在 iOS 14 及更高版本上觸發通知。因此,用戶第一次打開您的應用程序時,如果粘貼板包含動態鏈接 URL,他們將看到您的應用程序訪問粘貼板的通知,這可能會導致混亂。
要禁用此行為,請編輯 Xcode 項目的
Info.plist
文件並將FirebaseDeepLinkPasteboardRetrievalEnabled
鍵設置為NO
。
處理深層鏈接
要在應用程序中處理動態鏈接,需要實現兩個場景。
終止狀態
設置以下方法:
-
FirebaseDynamicLinks.getInitialLink
- 返回Future<PendingDynamicLinkData?>
-
FirebaseDynamicLinks.onLink
- 返回包含 PendingDynamicLinkData 的Stream
的事件處理程序PendingDynamicLinkData?
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 平台上測試動態鏈接
要在 iOS 上測試動態鏈接,需要使用實際設備。如果從終止(即應用程序已關閉)應用程序狀態測試動態鏈接,您還需要在發布模式下運行應用程序(即flutter run --release
。)。