Deep linking différé étendu sous Android

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.

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émentez le port d'écoute de l'API Get Conversion Data. AppsFlyerConversionListener.

    Toutes les méthodes du port d'écoute doivent être implémentées, même si 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 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

    AppsFlyerConversionListener conversionListener =  new AppsFlyerConversionListener() {
        @Override
        public void onConversionDataSuccess(Map<String, Object> conversionDataMap) {
            String status = Objects.requireNonNull(conversionDataMap.get("af_status")).toString();
            if(status.equals("Non-organic")){
                if( Objects.requireNonNull(conversionDataMap.get("is_first_launch")).toString().equals("true")){
                    Log.d(LOG_TAG,"Conversion: First Launch");
                    //Deferred deep link in case of a legacy link
                    if(conversionDataMap.containsKey("fruit_name")){
                        if (conversionDataMap.containsKey("deep_link_value")) { //Not legacy link
                            Log.d(LOG_TAG,"onConversionDataSuccess: Link contains deep_link_value, deep linking with UDL");
                        }
                        else{ //Legacy link
                            conversionDataMap.put("deep_link_value", conversionDataMap.get("fruit_name"));
                            String fruitNameStr = (String) conversionDataMap.get("fruit_name");
                            DeepLink deepLinkData = mapToDeepLinkObject(conversionDataMap);
                            goToFruit(fruitNameStr, deepLinkData);
                        }
                    }
                } else {
                    Log.d(LOG_TAG,"Conversion: Not First Launch");
                }
            } else {
                Log.d(LOG_TAG, "Conversion: This is an organic install.");
            }
        }

        @Override
        public void onConversionDataFail(String errorMessage) {
            Log.d(LOG_TAG, "error getting conversion data: " + errorMessage);
        }

        @Override
        public void onAppOpenAttribution(Map<String, String> attributionData) {
            Log.d(LOG_TAG, "onAppOpenAttribution: This is fake call.");
        }

        @Override
        public void onAttributionFailure(String errorMessage) {
            Log.d(LOG_TAG, "error onAttributionFailure : " + errorMessage);
        }
    };

⇲ Liens Github : Java

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

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

  1. Cliquez sur le lien de votre appareil.
  2. OneLink vous redirige en fonction de la configuration du lien, soit vers Google Play, soit vers un site web.
  3. 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.
  4. Le DLU détecte le deep linking différé, fait correspondre l'installation au clic et récupère les paramètres OneLink pour onDeepLinking . Le DLU ne trouvera pas de paramètres pour diriger l'utilisateur et quitter.
  5. onConversionDataSuccess est appelé avec les données de conversion, qui contiennent à la fois les paramètres personnalisés et les données d'attribution.
  6. 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é.

  • SDK initialisé :

    D/AppsFlyer_6.9.0: Initializing AppsFlyer SDK: (v6.9.0.126)
    
  • Le protocole suivant concerne le deep linking direct et peut être ignoré dans la cadre d'un deep linking différé :

    D/AppsFlyer_6.9.0: No deep link detected
    
  • L'API UDL démarre :

    D/AppsFlyer_6.9.0: [DDL] start
    
  • Le DLU envoie une requête à AppsFlyer pour rechercher une correspondance avec cette installation :

    D/AppsFlyer_6.9.0: [DDL] Preparing request 1
    ...
    I/AppsFlyer_6.9.0: call = https://dlsdk.appsflyer.com/v1.0/android/com.appsflyer.onelink.appsflyeronelinkbasicapp?af_sig=<>&sdk_version=6.9; size = 239 bytes; body = {
          ...
          TRUNCATED
          ...
    }
    
  • Le DLU a obtenu une réponse et appelle onDeepLinking avec status=FOUND et les données de lien OneLink :

    D/AppsFlyer_6.9.0: [DDL] Calling onDeepLinking with:
      {"deepLink":"{\"campaign_id\":\"\",\"af_sub3\":\"\",\"match_type\":\"probabilistic\",\"af_sub1\":\"\",\"deep_link_value\":\"\",\"campaign\":\"\",\"af_sub4\":\"\",\"timestamp\":\"2022-12-07T09:32:52.256\",\"click_http_referrer\":\"\",\"af_sub5\":\"\",\"media_source\":\"\",\"af_sub2\":\"\",\"is_deferred\":true}","status":"FOUND"}
    
  • Le GCD récupère les données de conversion :

GET:https://gcdsdk.appsflyer.com/install_data/v4.0/com.appsflyer.onelink.appsflyeronelinkbasicapp?devkey=XXXXXXXXX&device_id=1670405582645-822555416155480367
  • onConversionDataSuccess est appelé avec les données de conversion en entrée :
 D/AppsFlyer_6.9.0: [GCD-A02] Calling onConversionDataSuccess with:
    {
        ...
        is_first_launch=true, 
        ...
        fruit_amount=56,
        fruit_name=apples, 
        ...
        af_status=Non-organic,
        ...
    }