Deep linking différé étendu sous IOS

Vue d'ensemble

Le deep linking différé étendu permet le deep linking pour les nouveaux utilisateurs dans certains cas :

  • Quand le DLU renvoie NOT_FOUND even though a relevant install occurred.
    Main example for such a scenario:
    • Le délai entre le clic et l'installation dépasse la fenêtre d'attribution du DLU (15 minutes).
  • Quand le DLU renvoie FOUND mais les données de deep linking manquent de paramètres, qui ne sont pas deep_link_value and deep_link_sub1-10.
    Principaux exemples pour de tels scénarios :
    • Clicking a link in a Self Reporting Network (SRN), like Meta ads or Twitter.
    • Cliquer sur un lien qui ne contient pas deep_link_value or deep_link_sub1-10 utilisé pour le deep linking, par exemple, les anciens liens créés avant deep_link_value et qui sont toujours utilisés.
    • Le délai entre le clic et l'installation dépasse la fenêtre d'attribution du DLU (15 minutes).

Permettre le deep linking différé lorsque le DLU renvoie NOT_FOUND, onConversionDataSuccess en tant que callback doit vérifier s'il doit gérer le deep linking différé.
onConversionDataSuccess fait partie de l'API Get Conversion Data (GCD). Son objectif principal est de rassembler les données de conversion à l'intérieur de l'appareil.
Dans le cas d'utilisation décrit ici, onConversionDataSuccess tire parti du fait que tous les paramètres de deep linking différé sont transmis au callback, en plus des données de conversion.

Conditions préalables

Implémentation

  1. onConversionDataSuccess détecte les cas où le de deep linking différé n'a pas été traité par le DLU.

    Voir l'analyse détaillée du code

  2. onConversionDataSuccess doit diriger l'utilisateur vers la destination de deep linking différé en fonction des paramètres de deep linking transmis à la fonction de callback.

Exemple de code

Code dissect

  1. Implémenter le délégué de l'API Get Conversion Data AppsFlyerLibDelegate.

    Implémenter uniquement onConversionDataSuccess and onConversionDataFail.
    Les méthodes onAppOpenAttribution and onAttributionFailure sont liées et exclusives au DLU, et ne seront pas appelées.

  2. Détecter les scénarios de deep linking différé en filtrant les données utiles de conversion avec :
    • af_status == Non-organic
    • is_first_launch == true
  3. Lorsque le deep linking différé est détecté, il faut filtrer les cas qui ont déjà été traités par le DLU.
    Dans l'exemple qui suit, tous les liens contiennent deep_link_value.
    Pour le DLU, il est recommandé de signaler par un drapeau que le deep linking différé est déjà géré, et que onConversionDataSuccess devrait être ignoré.
  4. onConversionDataSuccess doit vérifier que les données de conversion contiennent des paramètres qui sont utilisés pour diriger les utilisateurs à l'intérieur de l'app. Par exemple fruit_name dans l'exemple qui suit.
  5. Acheminez l'utilisateur vers la destination de deep linking différé.

Code snippet

extension AppDelegate: AppsFlyerLibDelegate {
     
    // Handle Organic/Non-organic installation
    func onConversionDataSuccess(_ data: [AnyHashable: Any]) {
        ConversionData = data
        print("onConversionDataSuccess data:")
        for (key, value) in data {
            print(key, ":", value)
        }
        if let conversionData = data as NSDictionary? as! [String:Any]? {
        
            if let status = conversionData["af_status"] as? String {
                if (status == "Non-organic") {
                    if let sourceID = conversionData["media_source"],
                        let campaign = conversionData["campaign"] {
                        NSLog("[AFSDK] This is a Non-Organic install. Media source: \(sourceID)  Campaign: \(campaign)")
                    }
                } else {
                    NSLog("[AFSDK] This is an organic install.")
                }
                
                if let is_first_launch = conversionData["is_first_launch"] as? Bool,
                    is_first_launch {
                    NSLog("[AFSDK] First Launch")
                    if !conversionData.keys.contains("deep_link_value") && conversionData.keys.contains("fruit_name"){
                        switch conversionData["fruit_name"] {
                            case let fruitNameStr as String:
                            NSLog("This is a deferred deep link opened using conversion data")
                            walkToSceneWithParams(fruitName: fruitNameStr, deepLinkData: conversionData)
                            default:
                                NSLog("Could not extract deep_link_value or fruit_name from deep link object using conversion data")
                                return
                        }
                    }
                } else {
                    NSLog("[AFSDK] Not First Launch")
                }
            }
        }
    }
    
    func onConversionDataFail(_ error: Error) {
        NSLog("[AFSDK] \(error)")
    }
}

⇲ Liens Github : Swift

Test

📘

Important

Le scénario de test suivant illustre la gestion du deep linking différé à partir de liens qui contiennent des paramètres personnalisés, mais pas les paramètres deep_link_value and deep_link_sub1-10 .
Ce scénario de test convient également à tout deep linking différé étendu décrit précédemment.

Before you begin

The test link

Vous pouvez utiliser un lien OneLink existant ou demander à votre marketeur d'en créer un nouveau pour le tester. Des URL OneLink courtes et longues peuvent être utilisées.

Ajout des paramètres ad-hoc au lien

  • Utilisez uniquement le domaine et le template OneLink de votre lien, par exemple : https://onelink-basic-app.onelink.me/H5hv.
  • Ajoutez des paramètres personnalisés OneLink autres que deep_link_value and deep_link_sub1-10, comme votre app le requiert.
  • Les paramètres doivent être ajoutés en tant que paramètres de requête.
    • Exemple : https://onelink-basic-app.onelink.me/H5hv?deep_link_value=apples&deep_link_sub1=23

Perform the test

  • Cliquez sur le lien de votre appareil.
  • OneLink vous redirige en fonction de la configuration du lien, soit vers l'App Store, soit vers un site web.
  • Installez l'app.

    Important

    • Si l'app est encore en cours de développement et qu'elle n'a pas encore été importée dans le store, vous verrez l'image suivante s'afficher :
      drawing
    • Installez l'app à partir d'Android Studio ou de tout autre IDE.
  • Le DLU détecte le deep linking différé, fait correspondre l'installation au clic et récupère les paramètres OneLink pour didResolveDeepLink . Le DLU ne trouvera pas de paramètres pour diriger l'utilisateur et quitter.
  • onConversionDataSuccess est appelé avec les données de conversion, qui contiennent à la fois les paramètres personnalisés et les données d'attribution.
  • onConversionDataSuccess définit les paramètres personnalisés pour diriger l'utilisateur dans l'app.

Expected logs results

📘

Les journaux suivants sont disponibles uniquement lorsque [le mode débogage est activé].(https://dev.appsflyer.com/hc/docs/integrate-ios-sdk#enabling-debug-mode)

  • SDK initialisé :

    [AppsFlyerSDK] [com.apple.main-thread] AppsFlyer SDK version 6.6.0 started build 
    
  • L'API UDL démarre :

    [AppsFlyerSDK] [com.appsflyer.serial] [DDL] Start DDL
    
  • Le DLU envoie une requête à AppsFlyer pour rechercher une correspondance avec cette installation :

    [AppsFlyerSDK] [com.appsflyer.serial] [DDL] URL: https://dlsdk.appsflyer.com/v1.0/ios/id1512793879?sdk_version=6.6&af_sig=c9a1d5b34d68e584d0db2a20f4049fb7cd2e785c3383bXXXXXXXXXXXXXXXXXXXXXXXX
    
  • Le DLU a obtenu une réponse et appelle didResolveDeepLink avec status=FOUND et les données de lien OneLink :

    [AppsFlyerSDK] [com.appsflyer.serial] [DDL] Calling didResolveDeepLink with: {"af_sub4":"","click_http_referrer":"","af_sub1":"","click_event":{"af_sub4":"","click_http_referrer":"","af_sub1":"","af_sub3":"","deep_link_value":"","campaign":"","match_type":"probabilistic","af_sub5":"","campaign_id":"","media_source":"","af_sub2":""},"af_sub3":"","deep_link_value":"","campaign":"","match_type":"probabilistic","af_sub5":"","media_source":"","campaign_id":"","af_sub2":""}
    
  • Le GCD récupère les données de conversion :

[AppsFlyerSDK] [com.appsflyer.serial] [GCD-B01] GCD 4.0 URL: https://gcdsdk.appsflyer.com/install_data/v4.0/id1512793879?devkey=s*****4&device_id=1672050642148-9221195
  • onConversionDataSuccess est appelé avec les données de conversion en entrée :
[AppsFlyerSDK] [com.appsflyer.serial] [GCD-A02] -[basic_app.AppDelegate onConversionDataSuccess:]:
    {
        ...
        is_first_launch=true, 
        ...
        fruit_amount=56,
        fruit_name=apples, 
        ...
        af_status=Non-organic,
        ...
    }