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 pasdeep_link_value
anddeep_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
ordeep_link_sub1-10
utilisé pour le deep linking, par exemple, les anciens liens créés avantdeep_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émentez le deep linking unifié pour gérer à la fois le deep linking différé et le deep linking direct.
- Implémentez
onConversionDataSuccess
pour gérer le deep linking différé en utilisant l'API GCD.
Implémentation
onConversionDataSuccess
détecte les cas où le de deep linking différé n'a pas été traité par le DLU.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
- 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
andonAttributionFailure
sont liées et exclusives au DLU, et ne seront pas appelées. - 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
- 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 contiennentdeep_link_value
.
Pour le DLU, il est recommandé de signaler par un drapeau que le deep linking différé est déjà géré, etonConversionDataSuccess
devrait être ignoré. 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 exemplefruit_name
dans l'exemple qui suit.- 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
anddeep_link_sub1-10
.
Ce scénario de test convient également à tout deep linking différé étendu décrit précédemment.
Before you begin
- Terminez l'implémentation décrite précédemment.
- Enregistrer votre appareil de test.
- Activez le mode débogage dans l'app.
- Assurez-vous que l'app n'est pas installée sur votre appareil.
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
anddeep_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
- Exemple :
Perform the test
- Cliquez sur le lien de votre appareil.
- OneLink vous redirige en fonction de la configuration du lien, soit vers Google Play, 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 :
- Installez l'app à partir d'Android Studio ou de tout autre IDE.
- 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 :
- 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. 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é.
-
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
avecstatus=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,
...
}
Mis(e) à jour il y a 12 mois