如要接收建立的 Firebase Dynamic Links,請按照下列步驟操作:
您必須在應用程式中加入 Dynamic Links SDK,並呼叫
FirebaseDynamicLinks.getDynamicLink()
方法就會觸發
取得動態連結傳送的資料
設定 Firebase 和 Dynamic Links SDK
在 Flutter 專案的根目錄中執行下列指令 指令安裝 Dynamic Links 外掛程式:
flutter pub add firebase_dynamic_links
如果您要建構 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 平台
建立 Apple 開發人員帳戶 (如果還沒有的話)。
在 Apple Developer 網站上,為應用程式建立佈建設定檔 關聯網域功能。
在 Xcode 中執行以下操作:
在「TARGETS」標頭下方開啟應用程式。
在《簽署與協議》中能力頁面,確認您的團隊已登記完成,且 您的佈建設定檔已設定完成。
在《簽署與協議》中和「Capabilities」(功能) 頁面,啟用「Associated Domains」(關聯網域),以及 將以下內容新增至關聯網域清單 (請將範例替換為您的網域):
applinks:example.page.link
在「資訊」頁面中,為專案新增網址類型。設定網址配置 欄位加入應用程式的軟體包 ID 中。(ID 可以是
Bundle ID
或 來拍攝。如果您已為 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>
選用:禁止 Dynamic Links SDK 使用 iOS 貼上板。
根據預設,Dynamic Links SDK 會使用貼上板改善 安裝後深層連結的可靠性說到剪貼簿 連結可確保使用者開啟動態連結時,需要 使用者安裝應用程式後,就可以立即存取 安裝。
不過,使用貼上板會觸發 通知功能。這樣使用者首次開啟 應用程式,如果貼上板含有動態連結網址,使用者就會看到 通知應用程式存取貼上板的通知, 混淆不清
如要停用這項行為,請編輯 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
) 中執行應用程式。
從已終止 (例如應用程式遭到滑動關閉) 的應用程式狀態測試動態連結。