Отложенный диплинкинг на устройствах iOS с функцией «Частный узел» (Private Relay)
Начиная с iOS 15, Apple предоставляет пользователям iCloud+ функцию «Частный узел» (Private Relay). Она дает возможность шифровать веб-трафик и скрывать точное местоположение, IP-адрес и контент просматриваемого трафика. Применение пользователями Private Relay может мешать работе атрибуции и отложенного диплинкинга. Когда новый пользователь без приложения переходит в App Store, устанавливает и запускает приложение, Private Relay может препятствовать его переходу на определенную страницу в приложении.
Чтобы отложенный диплинкинг (DDL) работал должным образом, необходимо реализовать одно из следующих решений AppsFlyer.
- [Рекомендуется] Решение на основе App Clips («блиц-приложений»): создайте мини-приложение, которое предоставит вам данные атрибуции и будет направлять пользователей на указанный интерфейс, аналогично отложенному диплинкингу. Мини-приложение также может содержать сценарий для перенаправления пользователей в полную версию вашего приложения.
- Решение на основе буфера обмена: создайте лендинг, который копирует данные для отложенного диплинкинга из URL-адреса и корректно перенаправляет пользователя в приложение. Примечание. Это решение не помогает с атрибуцией.
Решение на основе App Clips
Необходимые условия: SDK AppsFlyer V6.4.0+
Для настройки отложенного диплинкинга на основе App Clips:
- Следуя инструкциям Apple, разработайте мини-приложение, обеспечивающее желаемый путь пользователя.
- Интегрируйте SDK AppsFlyer для App Clips с поддержкой атрибуции перехода из мини-приложения в полную версию приложения.
- В мини-приложении
sceneDelegate
:- Замените
scene
continue userActivity
следующей функцией:
- Замените
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)
}
⇲ Ссылки на Github: Swift
- Добавьте следующий метод:
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")
}
⇲ Ссылки на Github: Swift
- В полной версии приложения:
- In
appDelegate
добавьте следующий метод:
- 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")
}
⇲ Ссылки на Github: Swift
- В конце метода
application didFinishLaunchingWithOptions launchOptions
вызовитеdeepLinkFromAppClip
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// ...
deepLinkFromAppClip()
return true
}
⇲ Ссылки на Github: Swift
Решение на основе буфера обмена
Для настройки решения на основе буфера обмена:
- Введите следующий код в
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))
}
- Реализовать код, который вставляет данные для отложенного диплинкинга в URL-адрес из буфера обмена. Это не входит в функционал SDK AppsFlyer.
Изменения сохранены 12 месяцев назад