Liên kết sâu bị trì hoãn iOS với iOS Private Relay
Với sự ra mắt của iOS 15, Apple cung cấp cho người dùng iCloud+ một tính năng gọi là Private Relay, cung cấp cho họ tùy chọn mã hóa lưu lượng duyệt web và ẩn vị trí chính xác, địa chỉ IP và nội dung lưu lượng duyệt web của họ. Nếu người dùng chọn tham gia Private Relay, điều này có thể ảnh hưởng đến hoạt động phân bổ và deferred deep linking. Điều này có nghĩa là, khi một người dùng mới không có ứng dụng đi đến App Store, cài đặt và khởi chạy ứng dụng, thì Private Relay có thể ngăn việc đưa họ đến một trang cụ thể trong ứng dụng.
Để đảm bảo deferred deep linking (DDL) tiếp tục hoạt động như dự kiến, bạn cần phải triển khai một trong các giải pháp AppsFlyer sau đây:
- [Đề xuất] Giải pháp dựa trên Clip Ứng dụng: Tạo một Clip Ứng dụng cung cấp cho bạn dữ liệu phân bổ người dùng và hướng người dùng đến một trải nghiệm Clip Ứng dụng tùy chỉnh tương tự với trải nghiệm bạn muốn DDL đạt được. Clip ứng dụng cũng có thể bao gồm quy trình để hướng người dùng từ Clip Ứng dụng của bạn đến ứng dụng đầy đủ của bạn.
- Giải pháp dựa trên bảng nhớ tạm: Tạo một trang đích sao chép dữ liệu deferred deep linking từ URL và chuyển hướng người dùng chính xác đến ứng dụng. Lưu ý: Giải pháp này không hỗ trợ việc phân bổ.
Giải pháp dựa trên Clip Ứng dụng
Điều kiện tiên quyết: SDK AppsFlyer V6.4.0+
Để thiết lập giải pháp DDL dựa trên Clip Ứng dụng:
- Làm theo hướng dẫn của Apple và phát triển Clip Ứng dụng cung cấp hành trình mong muốn của người dùng.
- Tích hợp SDK AppsFlyer cho các Clip Ứng dụng, bao gồm phân bổ từ Clip Ứng dụng đến ứng dụng đầy đủ.
- Trong Clip Ứng dụng
sceneDelegate
:- Thay thế
scene
continue userActivity
bằng hàm sau:
- Thay thế
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
// Must for AppsFlyer attrib
AppsFlyerLib.shared().continue(userActivity, restorationHandler: nil)
//Get the invocation URL from the userActivity in order to add it to the shared user default
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let invocationURL = userActivity.webpageURL else {
return
}
addDlUrlToSharedUserDefaults(invocationURL)
}
⇲ Liên kết Github: Swift
- Thêm phương thức sau:
func addDlUrlToSharedUserDefaults(_ url: URL){
guard let sharedUserDefaults = UserDefaults(suiteName: "group.<your_app>.appClipToFullApp") else {
return
}
//Add invocation URL to the app group
sharedUserDefaults.set(url, forKey: "dl_url")
//Enable sending events
sharedUserDefaults.set(true, forKey: "AppsFlyerReadyToSendEvents")
}
⇲ Liên kết Github: Swift
- Trong ứng dụng đầy đủ:
- In
appDelegate
, và thêm phương thức sau:
- In
func deepLinkFromAppClip() {
guard let sharedUserDefaults = UserDefaults(suiteName: "group.<your_app>.appClipToFullApp"),
let dlUrl = sharedUserDefaults.url(forKey: "dl_url")
else {
NSLog("Could not find the App Group or the deep link URL from the app clip")
return
}
AppsFlyerLib.shared().performOnAppAttribution(with: dlUrl)
sharedUserDefaults.removeObject(forKey: "dl_url")
}
⇲ Liên kết Github: Swift
- Ở cuối của
application didFinishLaunchingWithOptions launchOptions
, gọi radeepLinkFromAppClip
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// ...
deepLinkFromAppClip()
return true
}
⇲ Liên kết Github: Swift
Giải pháp dựa trên bảng nhớ tạm
Để thiết lập giải pháp dựa trên bảng nhớ tạm:
- Nhập mã sau vào
appDelegate
.
NSString *pasteboardUrl = [[UIPasteboard generalPasteboard] string];
NSString *checkParameter = @"cp_url=true";
if ([pasteboardUrl containsString:checkParameter]) {
[[AppsFlyerLib shared] performOnAppAttributionWithURL:[NSURL URLWithString:pasteboardUrl]];
}
var pasteboardUrl = UIPasteboard.general.string ?? ""
let checkParameter = "cp_url=true"
if pasteboardUrl.contains(checkParameter) {
AppsFlyerLib.shared().performOnAppAttribution(with: URL(string: pasteboardUrl))
}
- Triển khai mã dán dữ liệu liên kết sâu gián tiếp trong URL từ bảng nhớ tạm. Đây không phải là một phần của SDK AppsFlyer.
Đã cập nhật 5 tháng trước