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:

  1. Siga as instruções da Apple e desenvolva um Clipe de App que forneça a jornada do usuário desejada.
  2. Integre o SDK da AppsFlyer para Clipe de Apps, incluindo a atribuição de App Clip-to-full app.
  3. No Clipe de App sceneDelegate:
    • Substitua scene continue userActivity com a seguinte função:
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

  1. No aplicativo completo:
    • In appDelegate, adicione o seguinte método:
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 , chame deepLinkFromAppClip:
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:

  1. 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))
}
  1. 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.