Swift Dynamic Link 動態連結

Dynamic Link 是Firebase所產生的Link

裡面會自動依照 OS 進行URL Scheme or Universal link 跳轉至App

。Firebase前置作業:

建立新專案,並綁定iOS Project填入Bundle Identifier

且將GoogleService-Info.plist放進專案中,並安裝好

pod ‘Firebase/Analytics’

。Firebase 應用程式設定:

設定-專案設定

最下方可以看到該專案綁定的iOS Project,

需要檢查是否填妥

1. App Store ID (若尚未上架,可以先隨意填,但必填)2. Team ID

App Store ID 當使用者未裝載App,可指引至App Store 讓使用者下載。

。Firebase Dynamic Links建立:

左側選取dynamic links,[開始使用]進入。

-

會先詢問想要在短網址上domain,盡量接近產品品牌名稱,讓使用者更肯定此連結為該品牌相關。亦可使用google提供網域註冊。

-

建立完成後,上方會顯示剛剛註冊的domain,表示列表皆為該前置字串系列。[新增動態連結]進行添加。

-

新增動態連結

1.本次所產生的短網址樣貌,可以隨機,亦可自訂一串網址。

2.訂定該短網址解出來的原網址內容。以及在列表上辨識該網址名稱。

3.設定該短網址點擊後的行為,因為想要進入iOS App,故選取所綁定的iOS App,當用戶沒有下載該App,可選擇轉向App Store or 自家官網。

Android App設定同上。

資料追蹤收集,可自行選填,完成後[建立]。

-

建立完成後,在列表上可見短連結,複製後可以貼在欲宣傳位置。點開網址可見點擊狀況,但不會馬上被收集,需要一點時間。

如果想添加其他前置字串,亦可點擊左上,有添加選項。

。App設定:

確認已安裝Analytics SDK & Dynamic Links SDK

pod 'Firebase/Analytics'
pod 'Firebase/DynamicLinks'

-

Xcode的Target 添加 Capability - Associated Domains

applinks: 剛設定的Domain

在UIApplicationDelegate: import Firebase

並在application:didFinishLaunchingWithOptions:

執行FirebaseApp.configure()啟用Firebase。

import FirebaseDynamicLinks (需透過此SDK將接收到的短網址進行還原)

當 App 收到短網址,

- 觸發 1 號進入點:

application:continueUserActivity:restorationHandler:(iOS 9.0以上,不包含9.0)

可能來源:ex. Line open to this app .. or other app or other web

。userActivity.webpageURL

<URL> 物件
url: https://testApp.page.link/EYZz

。Firebase Method

//使用Firebase解析,解析後東西會在completion回傳
//App再進行解析及跳頁
DynamicLinks.dynamicLinks().handleUniversalLink(url: ...) { (dynamicLink, error) in //回傳<DynamicLink> 物件
}

DynamicLink 物件

<DynamicLink> 物件
FIRDynamicLink: 0x600002057400,
url: [https://test.com?page=home],
match type: unique,
minimumAppVersion: N/A,
match message: (null)

- 觸發 2 號進入點:

application:openURL:sourceApplication:annotation:(iOS 9.0+,不包含9.0)、application:openURL:options:(iOS 8.0以上 ~ iOS 9.0)

可能來源:ex. Facebook Message open to this app .. or 下載後第一次啟動App其中值得注意,第一次下載App有兩種情況:

  1. 自行從AppStore下載,啟動App時,雖然會觸發method,但所帶的dynamicLink.url 為nil。(indicating that the SDK failed to find a matching pending Dynamic Link.)
  2. 透過dynamicLink,發現尚未下載App,故導向AppStore進行下載,下載完畢後,啟動App時,觸發該method,所帶的dynamicLink 為剛剛點擊的dynamicLink內容,如果無痕模式也可能為nil。(when your app is opened for the first time after installation on any version of iOS.)

。url

<URL> 物件 (回傳為url encode,且內含原網址)Encode:url: YourAppBundleIdentifier://google/link/?match_type=weak&request_ip_version=…Decode還原:url: YourAppBundleIdentifiert://google/link/?match_type=weak&request_ip_version=xxx&utm_source=firebase&utm_campaign=YourDynamicTitle&utm_medium=dynamic_link&deep_link_id=YourRawUrl&match_message=Best (of many) pre-install links matched for this device.

。Firebase Method

//使用Firebase解析,解析成功會直接return值
//App再進行解析及跳頁
if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {}

DynamicLink 物件

<DynamicLink> 物件
FIRDynamicLink: 0x600002057400,
url: [https://test.com?page=home],
match type: unique,
minimumAppVersion: N/A,
match message: (null)
(iOS 8 and older)
(iOS 9 and up)

這樣就完成簡單的DeepLink實作。

再幫我拍拍手哦~讓我知道有人閱讀也對你有幫助~

可以幫我點個讚,或是分享一杯咖啡支持我。

--

--

奇妙仙子
彼得潘的 Swift iOS / Flutter App 開發教室

When you want something, all the universe conspires in helping you to achieve it.