Enlaces profundos diferidos de iOS con iOS Private Relay
Con el lanzamiento de iOS 15, Apple ofrece a los usuarios de iCloud+ una función llamada Private Relay, que les da la opción de cifrar su tráfico de navegación por la web y ocultar su ubicación exacta, dirección IP y el contenido de su tráfico de navegación. Si los usuarios optan por usar Private Relay, esto podría interferir con la atribución y el deferred deep linking. Es decir, una vez que un nuevo usuario sin la aplicación va a la App Store e instala e inicia la aplicación, Private Relay podría evitar que se le envíe a una página específica de la aplicación.
Para asegurarte de que el Deferred Deep Linking (DDL) siga funcionando como se esperaba, debes implementar una de las siguientes soluciones de AppsFlyer:
- [Recomendado] Solución basada en App Clip: crea un App Clip que te brinde datos de atribución de los usuarios, y dirige a los usuarios a una experiencia de App Clip personalizada similar a la que deseas que logre el DDL. El clip de aplicación también puede incluir un flujo para dirigir a los usuarios desde tu App Clip a tu aplicación completa.
- Solución basada en el portapapeles: crea una página de aterrizaje que copie los datos de Deferred Deep Linking de la URL y redirija correctamente al usuario a la aplicación. Nota: Esta solución no ayuda con la atribución.
Solución basada en App Clip
Requisitos previos: AppsFlyer SDK V6.4.0+
Para configurar la solución DDL basada en App Clip:
- Sigue las instrucciones de Apple y desarrolla un App Clip que proporcione la trayectoria del usuario deseada.
- Integra el SDK de AppsFlyer para App Clips, incluida la atribución de App Clip a aplicación completa.
- En el App Clip
sceneDelegate
:- Reemplaza
scene
continue userActivity
con la siguiente función:
- Reemplaza
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)
}
⇲ Enlaces de Github: Swift
- Agrega el siguiente método:
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")
}
⇲ Enlaces de Github: Swift
- En la aplicación completa:
- In
appDelegate
, agrega el siguiente método:
- 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")
}
⇲ Enlaces de Github: Swift
- Al final del método
application didFinishLaunchingWithOptions launchOptions
, llama adeepLinkFromAppClip
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// ...
deepLinkFromAppClip()
return true
}
⇲ Enlaces de Github: Swift
Solución basada en el portapapeles
Para configurar la solución basada en portapapeles:
- Introduce el siguiente código en
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))
}
- Implemente un código que pegue los datos del enlace profundo diferido en la URL del portapapeles. Esto no forma parte del SDK de AppsFlyer.
Actualizado hace 12 meses