Dynamic Links
[TOC]
測試方式
- 連結設定完畢後,複製至模擬器safari並點擊
- Xcode Run 專案
測試結果
尚未安裝app狀態:
- 第一次點擊連結後安裝app並開啟 -> 可以偵測 會觸發
1
2
3func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
}
第一次開啟會使用SchemeUR的方式,因此使用此函式解析(注意解析delegate位置)
1 | if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) { |
第二次開啟:
- 已點擊過連結,再次點擊連結,並引導開啟app -> 可以偵測 會觸發第二次以後開啟則會以handleUniversalLink方式,因此使用此函式解析 (注意解析delegate位置)
1
2
3func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
}
1 | let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { dynamicLinks, error in |
已安裝app狀態:
尚未點過連結,開啟app -> 無法偵測
- 第一次點擊連結後,連結引導開啟app -> 可以偵測 會觸發
1
2
3func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
} - 已點過連結,先刪除app後,重新安裝並直接開啟app -> 可以偵測 會觸發
1
2
3func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
} - 尚未點過連結,先刪除app後,點擊連結,安裝並開啟app -> 可以偵測 會觸發
1
2
3func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
} - 尚未點過連結,先刪除app後,安裝app,點擊連結,並開啟app -> 可以偵測 會觸發
1
2
3func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
}回傳物件內容
<FIRDynamicLink: 0x600001aa4b40, url [https://swaynfit/welcome], match type: default, minimumAppVersion: N/A, match message: One pre-install link matched for this device.>
結論
由於沒有上架版可以測試點擊連結,導向商店並下載開啟app,但根據模擬器測試結果推測,點擊過連結就會記住,但已安裝與未安裝觸發位置不同。
網路資源:
補充:
詳細連結
可在Firebase後台最右方點選按鈕,點擊連結詳細資料
詳細連結頁面:
參數說明
參數有以下分類:
- Deep Link Parameters
- Android Parameters
- iOS Parameters
- Other Platform Parameters
- Navigation Parameters
- Social Meta Tag Parameters
- Analytics Parameters
- Debug Parameters
Deep Link Parameters
此連結提供 App 使用或退到網頁版來,如果無法開啟商店則會開啟此連結的網頁。
亦或是在專案中勾選此設定也會導到該連結
一般來說是 App 的內容或是啟動特定 App 邏輯的 Payload;link 會是格式良好且 URL 編碼過的 URL,可以是 HTTP 或 HTTPS,且不能為另一個 Firebase Dynamic Link。
在桌面裝置的瀏覽器上開啟時,將會開啟這個連結,除非有另外指定 ofl。
Android Parameters
這部分的參數主要是提供給 Android 來使用。
- apn:用來開啟連結的 Package name,在專案中需要設定並且名稱一致。
- afl:當 Android App 尚未安裝時所開啟的連結,用來指定一些像是開啟手機版的網頁,或是 App 的促銷頁面,並非用在使用者尚未安裝 App 時,從 Play Store 安裝 App 的用途。
- amv:App 能夠開啟此連結的最低版本,如果安裝的較舊的版本時,將會導至 Play Store 來升級 App。
iOS Parameters
這部分的參數主要提供給 iOS 和 iPads 。
- ibi:用來開啟連結的 iOS App Bundle ID,該 App 應該要在 Firebase Console 的 Overview 中與專案連結在一起;對於 Dynamic Link 要開啟 iOS App 來說是必要的。
- ifl:當 iOS App 尚未安裝時所開啟的連結,用來指定一些像是開啟手機版的網頁,或是開啟 App 的促銷頁面,並非用在使用者尚未安裝 App 時,開啟 App Store 讓使用者安裝 App 的用途。
- ius:自訂的 URL Schema。
- ipfl:當 App 尚未安裝時,在 iPads 上所開啟的連結,與 ifl 的用途類似,只是專門用在 iPads 上。
- ipbi:在 iPads 上用來開啟連結的 App Bundle ID,該 App 必須要在 Firebase Console 的 Overview 頁面中與專案連結在一起。
- isi:App 的 Apple Store ID,當使用者尚未安裝 App 時用來帶使用者到 App Store。
- imv:能夠開啟連結的最低 App 版本,當 App 開啟時,這個 flag 會被傳到 App 中,App 中必須決定該如何處理。
Other Parameters
主要為除了 Android 和 iOS 平台外所使用的參數。
- ofl:除了 Android 和 iOS 平台,其他平台所開啟的連結,這在電腦版中用來指定不同的行為非常好用,像是開啟 App 內容的滿版網頁,或是其他用來安裝 App 的 Dynamic Link Payload。
Navigation Parameters
Navigation 所使用的參數。
- efr:將 efr 設為 1 開啟 Dynamic Link 時會略過 App 的預覽頁面,直接跳轉到商店或是 App;App 的預覽畫面在使用者開啟 Dynamic Link時,可以更可靠的將使用者帶到更適合的目的地
然而,如果你期望 Dynamic Link 只在 App 中被開啟,在沒有 App 的預覽畫面時會更可靠,因此也可以選擇將 efr 設為 0 來停止它。
Social Meta Tag Parameters
用在社群分享的參數。
- st:用來當作分享在社群貼文中的標題。
- sd:用來當作分享在社群貼文中的描述。
- si:跟這個連結有相關的圖片,圖片至少要 300*200px 且小於 300KB。
Analytics Parameters
用於數據分析的參數。
- Google Play Analytics Parameters
- utm_source
- utm_medium
- utm_campaign
- utm_term
- utm_content
- gclid
- iTunes Connect Analytics Parameters
- at
- ct
- mt
- pt
Debug Parameters
用於偵錯的參數。
- d :透過將 d 設為 1 進入偵錯模式,將會產生 Dynamic Link 的行為流程圖,而不是載入 Dynamic Link,可以用來預覽 Dynamic Link 在不同平台和配置的行為。
資料來源:https://medium.com/swag/firebase-dynamic-link-%E7%B0%A1%E5%96%AE%E4%BB%8B%E7%B4%B9-fd8259974eec
後台設定
在Firebase後台點擊Dynamic Links
點擊開始使用
設定網址
點擊新增動態連結
設定短網址
設定短網址 = 使用者看見的網址
- 設定動態連結
動態連結 = App內能拿到的訊息
- 設定未安裝導向商店功能
選擇要導向的APP
需要在專案中先設定團隊ID與APP商店ID
- Android部分同上
- 設定行銷用文案與GA分析名詞
以下皆參照提示文字設定
以上文案會出現於連結,如果發布至Line則顯示:
點擊後會開啟Safari
iOS專案設定
- Pod 加入 pod ‘Firebase/DynamicLinks’終端機:
1
pod ‘Firebase/DynamicLinks’
1
pod install
如果出現警告 None of your spec sources contain a spec satisfying the dependencies: Firebase
1 | pod install --repo-update |
- Project -> Info →新增 URL Types ,在Identifier 欄位輸入Bundle ID,URL Schemes輸入APP 套件名稱
- 在Signing & Capabilities 新增 Associated Domains
- 輸入applinks: 與後台設定的domain
(ex:applinks:swaynfit.page.link)
- AppDelegate
1
import Firebase
- 在 didFinishLaunchingWithOptions 加入:
1
FirebaseApp.configure()
- 加入下列function即可取得連接資訊
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return application(app, open: url, sourceApplication: options[.sourceApplication] as? String, annotation: "")
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
print("dynamicLink",dynamicLink)
guard let link = dynamicLink.url else {
return true
}
print("deep link: \(link)")
return true
}
return false
}1
2
3
4
5
6
7
8func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { dynamicLinks, error in
print("userActivity dynamicLinks",dynamicLinks)
print("error",error)
}
return handled
}自定義網址
如果不使用firebase提供的page.link則需要再專案plist中新增:
FirebaseDynamicLinksCustomDomains
將網址的domain填入
後台除錯
預覽連結
點擊後會出現此頁面: