Liên kết Sâu Hợp nhất iOS
Khái quát: Liên kết sâu hợp nhất (UDL) cho phép bạn đưa người dùng mới và người dùng hiện có đến một hoạt động trong ứng dụng cụ thể (ví dụ: một trang cụ thể trong ứng dụng) ngay sau khi ứng dụng được mở.
Bảo vệ quyền riêng tư UDL
For new users, the UDL method only returns parameters relevant to deferred deep linking:
deep_link_value
anddeep_link_sub1-10
. If you try to get any other parameters (media_source
,campaign
,af_sub1-5
, v.v.), chúng sẽ trả về giá trị rỗng.
Quy trình
Quy trình này hoạt động như sau:
- Người dùng nhấp vào liên kết OneLink.
- Nếu người dùng đã cài đặt ứng dụng, Liên kết Chung hoặc lược đồ URI sẽ mở ứng dụng.
- Nếu người dùng chưa cài đặt ứng dụng thì họ sẽ được chuyển hướng đến cửa hàng ứng dụng và sau khi tải xuống, người dùng sẽ mở ứng dụng.
- Ứng dụng mở ra sẽ kích hoạt SDK AppsFlyer.
- SDK AppsFlyer sẽ chạy API UDL.
- API UDL truy xuất dữ liệu OneLink từ máy chủ AppsFlyer.
- The UDL API calls back the
didResolveDeepLink()
in theDeepLinkDelegate
. - The
didResolveDeepLink()
method gets aDeepLinkResult
object. - The
DeepLinkResult
object includes:- Trạng thái (Đã tìm thấy/Không tìm thấy/Lỗi)
- A
DeepLink
object that carries thedeep_link_value
anddeep_link_sub1-10
parameters that the developer uses to route the user to a specific in-app activity, which is the main goal of OneLink.
Lập kế hoạch
- UDL yêu cầu AppsFlyer iOS SDK V6.1 trở lên.
Khi thiết lập OneLink, nhà tiếp thị sử dụng các thông số để tạo liên kết và nhà phát triển tùy chỉnh hành vi của ứng dụng dựa trên các giá trị nhận được. Nhà phát triển có trách nhiệm đảm bảo các thông số được xử lý chính xác trong ứng dụng, cho cả định tuyến trong ứng dụng và cá nhân hóa dữ liệu trong liên kết.
Để lập kế hoạch OneLink:
- Nhận từ nhà tiếp thị hành vi mong đợi và trải nghiệm cá nhân mà người dùng có được khi họ nhấp vào URL.
- Based on the desired behavior, plan the
deep_link_value
and other parameters that are needed to give the user the desired personal experience.- The
deep_link_value
is set by the marketer in the URL and used by the developer to redirect the user to a specific place inside the app. For example, if you have a fruit store and want to direct users to apples, the value ofdeep_link_value
can beapples
. - The
deep_link_sub1-10
parameters can also be added to the URL to help personalize the user experience. For example, to give a 10% discount, the value ofdeep_link_sub1
can be10
.
- The
Thực hiện
Let's save you some time >>
Set Deep Linking with our SDK integration wizard
Thực hiện logic API UDL dựa trên các thông số và giá trị đã chọn.
- Assign the
AppDelegate
usingself
toAppsFlyerLib.shared().deepLinkDelegate
. - Triển khai chức năng ứng dụng để cho phép:
- Hỗ trợ Liên kết Chung với
continue
. - Hỗ trợ lược đồ URI với
handleOpen
.
- Hỗ trợ Liên kết Chung với
- Create
DeepLinkDelegate
as an extension ofAppDelegate
. - Add
application
functions to support Universal Links and URI schemes. - In
DeepLinkDelegate
, make sure you override the callback function,didResolveDeepLink()
.
didResolveDeepLink()
accepts aDeepLinkResult
object as an argument. - Use
DeepLinkResult.status
to query whether the deep linking match is found. - For when the status is an error, call
DeepLinkResult.error
and run your error flow. - For when the status is found, use
DeepLinkResult.deepLink
to retrieve theDeepLink
object.
TheDeepLink
object contains the deep linking information arranged in public variables to retrieve the values from well-known OneLink keys, for example,DeepLink.deeplinkValue
fordeep_link_value
. - Use
deepLinkObj.clickEvent["deep_link_sub1"]
to retrievedeep_link_sub1
. Do the same fordeep_link_sub2-10
parameters, changing the string value as required. - Once
deep_link_value
anddeep_link_sub1-10
are retrieved, pass them to an in-app router and use them to personalize the user experience.
Supporting legacy OneLink links
Liên kết OneLink cũ là các liên kết không chứa các thông số được đề xuất cho Liên kết Sâu Hợp nhất: deep_link_value
and deep_link_sub1-10
.
Thông thường, đây là những liên kết đã tồn tại trong trường và đang được sử dụng khi di chuyển từ các phương thức cũ sang UDL.
Người dùng tin tức sử dụng các liên kết cũ được xử lý bởi onConversionDataSuccess
trong ngữ cảnh Liên kết sâu bị trì hoãn mở rộng.
UDL xử lý liên kết sâu cho người dùng hiện có. Bạn nên thêm hỗ trợ trong lệnh gọi lại UDL didResolveDeepLink
cho các thông số cũ.
Ví dụ mã Swift
Code example
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Replace 'appleAppID' and 'appsFlyerDevKey' with your Apple App ID (eg 69999999, without id prefix) and DevKey
// The App ID and the DevKey must be set prior to the calling of the deepLinkDelegate
AppsFlyerLib.shared().appleAppID = appleAppID
AppsFlyerLib.shared().appsFlyerDevKey = appsFlyerDevKey
...
AppsFlyerLib.shared().deepLinkDelegate = self
...
}
// For Swift version < 4.2 replace function signature with the commented out code
// func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { // this line for Swift < 4.2
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
AppsFlyerLib.shared().continue(userActivity, restorationHandler: nil)
return true
}
// Open URI-scheme for iOS 9 and above
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
AppsFlyerLib.shared().handleOpen(url, options: options)
return true
}
extension AppDelegate: DeepLinkDelegate {
func didResolveDeepLink(_ result: DeepLinkResult) {
var fruitNameStr: String?
switch result.status {
case .notFound:
NSLog("[AFSDK] Deep link not found")
return
case .failure:
print("Error %@", result.error!)
return
case .found:
NSLog("[AFSDK] Deep link found")
}
guard let deepLinkObj:DeepLink = result.deepLink else {
NSLog("[AFSDK] Could not extract deep link object")
return
}
if deepLinkObj.clickEvent.keys.contains("deep_link_sub2") {
let ReferrerId:String = deepLinkObj.clickEvent["deep_link_sub2"] as! String
NSLog("[AFSDK] AppsFlyer: Referrer ID: \(ReferrerId)")
} else {
NSLog("[AFSDK] Could not extract referrerId")
}
let deepLinkStr:String = deepLinkObj.toString()
NSLog("[AFSDK] DeepLink data is: \(deepLinkStr)")
if( deepLinkObj.isDeferred == true) {
NSLog("[AFSDK] This is a deferred deep link")
}
else {
NSLog("[AFSDK] This is a direct deep link")
}
fruitNameStr = deepLinkObj.deeplinkValue
walkToSceneWithParams(fruitName: fruitNameStr!, deepLinkData: deepLinkObj.clickEvent)
}
}
// User logic
fileprivate func walkToSceneWithParams(deepLinkObj: DeepLink) {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: true, completion: nil)
guard let fruitNameStr = deepLinkObj.clickEvent["deep_link_value"] as? String else {
print("Could not extract query params from link")
return
}
let destVC = fruitNameStr + "_vc"
if let newVC = storyBoard.instantiateVC(withIdentifier: destVC) {
print("AppsFlyer routing to section: \(destVC)")
newVC.deepLinkData = deepLinkObj
UIApplication.shared.windows.first?.rootViewController?.present(newVC, animated: true, completion: nil)
} else {
print("AppsFlyer: could not find section: \(destVC)")
}
}
⇲ Liên kết Github: Swift
Deferred Deep Linking after network consent
In some cases the application might require consent from the user in order to connect to the network, in a dialog similar to this one:
In order to support deferred deep linking once the network consent is given we recommend:
- Implement eDDL to allow UDL to handle the deferred deep linking
Thử nghiệm liên kết sâu bị trì hoãn
Prerequisites
- Hoàn thành tích hợp UDL.
- Đăng ký thiết bị thử nghiệm của bạn.
- Bật chế độ gỡ lỗi trong ứng dụng.
- Đảm bảo ứng dụng chưa được cài đặt trên thiết bị của bạn.
- Yêu cầu nhà tiếp thị của bạn cung cấp mẫu OneLink.
- Nó sẽ có dạng như thế này
https://onelink-basic-app.onelink.me/H5hv
. - Ví dụ này sử dụng tên miền phụ OneLink
onelink-basic-app.onelink.me
và ID mẫu OneLinkH5hv
.
- Nó sẽ có dạng như thế này
The test link
Bạn có thể sử dụng một liên kết OneLink hiện có hoặc yêu cầu nhà tiếp thị tạo một liên kết mới để thử nghiệm. Có thể sử dụng cả URL OneLink rút gọn và đầy đủ.
Thêm thông số đặc biệt vào một liên kết hiện có
- Chỉ sử dụng miền và mẫu OneLink của liên kết của bạn. Ví dụ:
https://onelink-basic-app.onelink.me/H5hv
. - Thêm thông số OneLink
deep_link_value
anddeep_link_sub1-10
như ứng dụng của bạn dự kiến. Các thông số nên được thêm dưới dạng thông số truy vấn.- Ví dụ:
https://onelink-basic-app.onelink.me/H5hv?pid=my_media_source&deep_link_value=apples&deep_link_sub1=23
- Ví dụ:
Perform the test
- Nhấp vào liên kết trên thiết bị của bạn.
- OneLink chuyển hướng bạn theo thiết lập liên kết, đến App Store hoặc trang web.
- Cài đặt ứng dụng.
Quan trọng
- Nếu ứng dụng vẫn đang được phát triển và chưa được tải lên cửa hàng, bạn sẽ thấy hình ảnh này:
- Cài đặt ứng dụng từ Xcode.
- Nếu ứng dụng vẫn đang được phát triển và chưa được tải lên cửa hàng, bạn sẽ thấy hình ảnh này:
- UDL phát hiện liên kết sâu bị trì hoãn, so khớp lượt cài đặt với lượt nhấp và truy xuất các thông số OneLink cho lệnh gọi lại
didResolveDeepLink
.
Expected logs results
Các nhật ký sau chỉ khả dụng khi chế độ gỡ lỗi được bật.
- Đã khởi tạo SDK:
[AppsFlyerSDK] [com.apple.main-thread] AppsFlyer SDK version 6.6.0 started build
- API UDL bắt đầu:
D/AppsFlyer_6.9.0: [DDL] start
- UDL gửi truy vấn tới AppsFlyer để truy vấn kết quả so khớp với lượt cài đặt này:
[AppsFlyerSDK] [com.appsflyer.serial] [DDL] URL: https://dlsdk.appsflyer.com/v1.0/ios/id1512793879?sdk_version=6.6&af_sig=efcecc2bc95a0862ceaa7b62fa8e98ae1e3e022XXXXXXXXXXXXXXXX
- UDL đã nhận được phản hồi và gọi lệnh gọi lại
didResolveDeepLink
vớistatus=FOUND
và dữ liệu liên kết OneLink:[AppsFlyerSDK] [com.appsflyer.serial] [DDL] Calling didResolveDeepLink with: {"af_sub4":"","click_http_referrer":"","af_sub1":"","click_event":{"af_sub4":"","click_http_referrer":"","af_sub1":"","af_sub3":"","deep_link_value":"peaches","campaign":"","match_type":"probabilistic","af_sub5":"","campaign_id":"","media_source":"","deep_link_sub1":"23","af_sub2":""},"af_sub3":"","deep_link_value":"peaches","campaign":"","match_type":"probabilistic","af_sub5":"","media_source":"","campaign_id":"","af_sub2":""}
Thử nghiệm liên kết sâu (Liên kết Chung)
Prerequisites
- Hoàn thành tích hợp UDL.
- Đăng ký thiết bị thử nghiệm của bạn.
- Bật chế độ gỡ lỗi trong ứng dụng.
- Đảm bảo ứng dụng đã được cài đặt trên thiết bị của bạn.
- Yêu cầu nhà tiếp thị của bạn cung cấp mẫu OneLink.
- Nó sẽ có dạng như thế này
https://onelink-basic-app.onelink.me/H5hv
. - Ví dụ này sử dụng tên miền phụ OneLink
onelink-basic-app.onelink.me
và ID mẫu OneLinkH5hv
- Nó sẽ có dạng như thế này
- Cấu hình Liên kết Chung.
Create the test link
Sử dụng cùng một phương thức như trong liên kết sâu bị trì hoãn.
Perform the test
- Nhấp vào liên kết trên thiết bị của bạn.
- UDL phát hiện Liên kết Chung và truy xuất các thông số OneLink để gọi lại
didResolveDeepLink
.
Expected logs results
Các nhật ký sau chỉ khả dụng khi chế độ gỡ lỗi được bật.
- Nếu liên kết là liên kết rút gọn OneLink (ví dụ: https://onelink-basic-app.onelink.me/H5hv/apples):
[AppsFlyerSDK] [com.apple.main-thread] NSUserActivity `webpageURL`: https://onelink-basic-app.onelink.me/H5hv/apples [AppsFlyerSDK] [com.appsflyer.serial] UniversalLink/Deeplink found: https://onelink-basic-app.onelink.me/H5hv/apples [AppsFlyerSDK] [com.appsflyer.serial] Shortlink found. Executing: https://onelink.appsflyer.com/shortlink-sdk/v2/H5hv?id=apples ... [AppsFlyerSDK] [com.appsflyer.serial] [Shortlink] OneLink:{ c = test1; campaign = test1; "deep_link_sub1" = 23; "deep_link_value" = peaches; "is_retargeting" = true; "media_source" = SMS; pid = SMS; }
- UDL gọi ra lệnh gọi lại
didResolveDeepLink
vớistatus=FOUND
và dữ liệu liên kết OneLink:[AppsFlyerSDK] [com.appsflyer.serial] [DDL] Calling didResolveDeepLink with: {"af_sub4":null,"click_http_referrer":null,"af_sub1":null,"click_event":{"campaign":"test1","deep_link_sub1":"23","deep_link_value":"peaches","media_source":"SMS"},"af_sub3":null,"deep_link_value":"peaches","campaign":"test1","match_type":null,"af_sub5":null,"media_source":"SMS","campaign_id":null,"af_sub2":null}
Đã cập nhật khoảng 1 tháng trước