Deferred Deep Linking avec Private Relay sous iOS

Avec le lancement de IOS 15, Apple fournit aux utilisateurs iCloud+ une fonctionnalité appelée Private Relay, qui leur permet de chiffrer leur trafic de navigation web et de masquer leur emplacement exact, leur adresse IP et le contenu de leur trafic de navigation. Si les utilisateurs acceptent Private Relay, cela peut interférer avec l'attribution et le deep linking différé. En d'autres termes, lorsqu'un nouvel utilisateur se rend dans l'App Store et installe puis lance l'app, Private Relay pourrait l'empêcher d'être envoyé vers une page spécifique de l'app.

Pour garantir le fonctionnement du deferred deep linking (DDL), vous devez mettre en œuvre l'une des solutions AppsFlyer suivantes :

  • [Recommandé] Solution basée sur les clips d'app : créez un clip d'app qui vous donne des données d'attribution d'utilisateur et dirige les utilisateurs vers une expérience de clip d'app personnalisée similaire à celle que vous souhaitez obtenir avec le deep linking différé. Le clip d'app peut également inclure un flux pour diriger les utilisateurs de votre clip vers votre app complète.
  • Solution basée sur le presse-papiers : créez une page d'accueil web qui copie les données de deep linking différé de l'URL et redirige correctement l'utilisateur vers l'app. Remarque : cette solution ne facilite pas l'attribution.

Solution basée sur App Clip

Conditions préalables : SDK AppsFlyer V6.4.0 et +

Pour configurer la solution DDL basée sur App Clip :

  1. Suivez les instructions d'Apple et mettez au point un App Clip qui offre le parcours utilisateur souhaité.
  2. Intégrez le SDK AppsFlyer pour les App Clips, ce qui inclut l'attribution des App Clips en app complète.
  3. Dans le clip de l'app sceneDelegate:
    • Remplacez scene continue userActivity par la fonction suivante :
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)        
}

⇲ Liens Github : Swift

  • Ajoutez la méthode suivante :
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")
}

⇲ Liens Github : Swift

  1. Dans l'app complète :
    • In appDelegate ajoutez la méthode suivante :
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")
}

⇲ Liens Github : Swift

  • Au bout de application didFinishLaunchingWithOptions launchOptions comme méthode, appelez deepLinkFromAppClip:
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

  // ...

  deepLinkFromAppClip()

  return true
}

⇲ Liens Github : Swift

Solution basée sur le presse-papiers

Pour configurer la solution basée sur le presse-papiers :

  1. Saisissez le code suivant dans 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. Implémenter un code qui colle les données du deferred deep link dans l'URL du presse-papiers. Cela ne fait pas partie du SDK AppsFlyer.