Deferred deep linking do iOS com retransmissão privada do iOS
Com o lançamento do iOS 15, a Apple passou a oferecer aos usuários do iCloud+ um recurso chamado Retransmissão Privada, que oferece a opção de criptografar o tráfego de navegação na web e ocultar sua localização exata, endereço de IP e o conteúdo do seu tráfego de navegação. Se os usuários optam por utilizar a Retransmissão Privada, isso poderá interferir na atribuição e no deferred deep linking. Ou seja, quando um novo usuário acessa a App Store, instala e inicia o aplicativo, a Retransmissão Privada pode impedir que ele seja enviado para uma página específica no aplicativo.
Para garantir que o deferred deep linking (DDL) continue funcionando como esperado, você precisa implementar uma das seguintes soluções AppsFlyer:
- [Recomendado] Solução baseada em Clipes de App: crie um Clipe de App que fornece dados de atribuição do usuário e direcione os usuários para uma experiência personalizada do Clipe de App, semelhante à que você deseja que o DDL alcance. Clipe de App também pode incluir um fluxo para direcionar os usuários do seu Clipe de App para o aplicativo completo.
- Solução baseada na área de transferência: crie uma landing page na web que copie os dados de deferred deep linking da URL e redirecione corretamente o usuário para o aplicativo. Observação: essa solução não melhora a atribuição.
Solução baseada em App Clips
Pré-requisitos: SDK V6.4.0+ da AppsFlyer
Para configurar a solução DDL baseada no App Clip:
- Siga as instruções da Apple e desenvolva um Clipe de App que forneça a jornada do usuário desejada.
- Integre o SDK da AppsFlyer para Clipe de Apps, incluindo a atribuição de App Clip-to-full app.
- No Clipe de App
sceneDelegate
:- Substitua
scene
continue userActivity
com a seguinte função:
- Substitua
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)
}
⇲ Links do Github: Swift
- Adicione o seguinte 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")
}
⇲ Links do Github: Swift
- No aplicativo completo:
- In
appDelegate
, adicione o seguinte 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")
}
⇲ Links do Github: Swift
- No final de
application didFinishLaunchingWithOptions launchOptions
, chamedeepLinkFromAppClip
:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// ...
deepLinkFromAppClip()
return true
}
⇲ Links do Github: Swift
Solução baseada em área de transferência
Para configurar a solução baseada na área de transferência:
- Insira o seguinte código em
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))
}
- Implementar o código que cola o deferred deep link na URL da área de transferência. Isso não faz parte do SDK da AppsFlyer.
Atualizado 12 meses atrás