如要接收您建立的 Firebase Dynamic Links,您必須在應用程式中加入 Dynamic Links SDK,並在應用程式載入時呼叫 FirebaseDynamicLinks.getDynamicLink()
方法,才能透過 Dynamic Link 取得資料。
設定 Firebase 和 Dynamic Links SDK
如果您尚未安裝並初始化 Flutter 專用的 Firebase SDK,請先完成安裝。
在 Flutter 專案的根目錄中執行下列指令,安裝 Dynamic Links 外掛程式:
flutter pub add firebase_dynamic_links
如果您正在建構 Android 應用程式,請開啟 Firebase 控制台的「Project settings」(專案設定) 頁面,並確認您已指定 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 開發人員帳戶,請建立 Apple 開發人員帳戶。
在 Firebase 控制台的「Project settings」頁面中,確認您的 iOS 應用程式已正確設定 App Store ID 和團隊 ID。
在 Apple Developer 網站上,為已啟用關聯網域功能的應用程式建立佈建設定檔。
在 Xcode 中執行以下操作:
在「TARGETS」標頭下方開啟應用程式。
在「簽署與功能」頁面中,確認您的團隊已完成註冊,且佈建設定檔已設定完成。
在「Signing & Capabilities」(簽署與能力) 頁面上,啟用「Associated Domains」,並將下列內容新增至關聯網域清單 (請將此範例替換為您的網域):
applinks:example.page.link
在「資訊」頁面中,為專案新增網址類型。將「網址配置」欄位設為應用程式的軟體包 ID。(ID 可以是
Bundle ID
或任何形式)。如果您已為 Firebase 專案設定自訂網域,請使用
FirebaseDynamicLinksCustomDomains
鍵將動態連結網址前置字串新增至 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 貼上板。
根據預設,Dynamic Links SDK 會使用貼上板提高安裝後深層連結的可靠性。藉由使用貼上板,動態連結可確保當使用者開啟動態連結,但需要先安裝應用程式時,使用者可以在安裝後第一次開啟應用程式時,立即導向原始連結內容。
這樣做的缺點是,使用貼上板會在 iOS 14 以上版本中觸發通知。因此,當使用者首次開啟應用程式時,如果貼上板含有動態連結網址,系統會顯示通知,指出您的應用程式已存取剪貼簿,進而造成混淆。
如要停用這項行為,請編輯 Xcode 專案的
Info.plist
檔案,並將FirebaseDeepLinkPasteboardRetrievalEnabled
鍵設為NO
。
處理深層連結
如要處理應用程式中的動態連結,有兩種情況需要實作。
已終止狀態
設定下列方法:
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
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
) 中執行應用程式。