Deep linking unifié pour Android
En bref : le deep linking unifié (DLU) vous permet d'envoyer les utilisateurs nouveaux et existants vers une activité spécifique dans l'app (par exemple, une page spécifique) dès son ouverture.
Protection de la vie privée DLU
For new users, the UDL method only returns parameters relevant to deferred deep linking:
deep_link_value
anddeep_link_sub1-10
. If you try to get any other parameters (media_source
,campaign
,af_sub1-5
etc.), ils renvoient null.
Flux
Le flux est le suivant :
- L'utilisateur clique sur un lien OneLink.
- Si l'utilisateur a installé l'app, le schéma Android App Links ou URI ouvre cette dernière.
- Si l'utilisateur n'a pas installé l'app, il est redirigé vers l'app store. L'utilisateur ouvre l'app après le téléchargement.
- L'ouverture de l'app déclenche le SDK AppsFlyer.
- Le SDK AppsFlyer exécute l'API de DLU.
- L'API de DLU récupère les données OneLink des serveurs AppsFlyer.
- The UDL API calls back the
onDeepLinking()
la méthode dansDeepLinkingListener
class. - The
onDeepLinking()
method gets aDeepLinkResult
object. - The
DeepLinkResult
object includes:- Statut (Trouvé/Non trouvé/Erreur)
- A
DeepLink
object that carries thedeep_link_value
anddeep_link_sub1-10
les paramètres, qui permettent au développeur de diriger l'utilisateur vers une activité in-app spécifique, ceci étant la principale fonction de OneLink.
Planification
- Le DLU nécessite AppsFlyer Android SDK V6.1+.
Lors de la configuration des OneLinks, le marketeur utilise les paramètres pour créer des deep links, et le développeur personnalise le comportement de l'app en fonction de la valeur reçue. Il incombe au développeur de vérifier que les paramètres sont traités correctement dans l'app, tant pour le routage in-app que pour la personnalisation des données dans le lien.
Pour planifier le OneLink :
- Demandez au marketeur le comportement souhaité et l'expérience personnelle qu'un utilisateur obtient en cliquant sur l'URL.
- Based on the desired behavior, plan the
deep_link_value
and other parameters that are needed to give the user the desired personal experience.- The
deep_link_value
is set by the marketer in the URL and used by the developer to redirect the user to a specific place inside the app. For example, if you have a fruit store and want to direct users to apples, the value ofdeep_link_value
can beapples
. - The
deep_link_sub1-10
parameters can also be added to the URL to help personalize the user experience. For example, to give a 10% discount, the value ofdeep_link_sub1
can be10
.
- The
Implémentation
Let's save you some time >>
Set Deep Linking with our SDK integration wizard
Implémentez l'API de DLU en fonction des paramètres et valeurs choisis.
- Utiliser la méthode
subscribeForDeepLink()
(issue deAppsFlyerLib
), before calling start, to register theDeepLinkListener
port d'écoute de l'interface. - Assurez-vous de remplacer la fonction de rappel
onDeepLinking()
.
onDeepLinking()
accepte comme argument unDeepLinkResult
object. - Use
getStatus()
to query whether the deep linking match is found. - For when the status is an error, call
getError()
and run your error flow. - For when the status is found, use
getDeepLink()
to retrieve theDeepLink
object.
TheDeepLink
cet objet contient les informations de deep linking et les fonctions d'assistance permettant de récupérer directement les valeurs depuis les clés OneLink connues, ex :getDeepLinkValue()
. - Use
getDeepLinkValue()
to retrieve thedeep_link_value
. - Use
getStringValue("deep_link_sub1")
to retrievedeep_link_sub1
. Do the same fordeep_link_sub2-10
parameters, changing the string value as required. - Once
deep_link_value
anddeep_link_sub1-10
are retrieved, pass them to an in-app router and use them to personalize the user experience.
Remarque
onDeepLinking
n'est pas appelé lorsque l'app fonctionne en arrière-plan et que le LaunchMode de l'app n'est pas standard.
Pour corriger cela, appelez la méthodesetIntent(intent)
pour définir la valeur intent à l'intérieur de la méthode surchargéeonNewIntent
si l'application utilise un LaunchMode non standard.import android.content.Intent; ... ... ... @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); }
Supporting legacy OneLink links
Les OneLink hérités sont des liens qui ne contiennent pas les paramètres recommandés pour le DLU : deep_link_value
and deep_link_sub1-10
.
En général, il s'agit de liens existants qui sont utilisés lors de la migration des méthodes traditionnelles vers le DLU.
Les nouveaux utilisateurs utilisant des liens hérités sont pris en charge par onConversionDataSuccess
dans le contexte du deep linking différé étendu.
Le DLU gère le deep linking pour les utilisateurs existants. Dans ce cas, il est recommandé d'ajouter un support dans l'appel DLU onDeepLinking
pour les paramètres hérités.
Exemple de code Java
Code example
appsflyer.subscribForDeepLink(new DeepLinkListen
@Override
public void onDeepLinking(@NonNull DeepLinkResult deepLinkResult) {
DeepLinkResult.Status dlStatus = deepLinkResult.getStatus();
if (dlStatus == DeepLinkResult.Status.FOUND) {
Log.d(LOG_TAG, "Deep link found");
} else if (dlStatus == DeepLinkResult.Status.NOT_FOUND) {
Log.d(LOG_TAG, "Deep link not found");
return;
} else {
// dlStatus == DeepLinkResult.Status.ERROR
DeepLinkResult.Error dlError = deepLinkResult.getError();
Log.d(LOG_TAG, "There was an error getting Deep Link data: " + dlError.toString());
return;
}
DeepLink deepLinkObj = deepLinkResult.getDeepLink();
try {
Log.d(LOG_TAG, "The DeepLink data is: " + deepLinkObj.toString());
} catch (Exception e) {
Log.d(LOG_TAG, "DeepLink data came back null");
return;
}
// An example for using is_deferred
if (deepLinkObj.isDeferred()) {
Log.d(LOG_TAG, "This is a deferred deep link");
} else {
Log.d(LOG_TAG, "This is a direct deep link");
}
// ** Next if statement is optional **
// Our sample app's user-invite carries the referrerID in deep_link_sub2
// See the user-invite section in FruitActivity.java
if (dlData.has("deep_link_sub2")){
referrerId = deepLinkObj.getStringValue("deep_link_sub2");
Log.d(LOG_TAG, "The referrerID is: " + referrerId);
} else {
Log.d(LOG_TAG, "deep_link_sub2/Referrer ID not found");
}
// An example for using a generic getter
String fruitName = "";
try {
fruitName = deepLinkObj.getDeepLinkValue();
Log.d(LOG_TAG, "The DeepLink will route to: " + fruitName);
} catch (Exception e) {
Log.d(LOG_TAG, "Custom param fruit_name was not found in DeepLink data");
return;
}
goToFruit(fruitName, deepLinkObj);
}
});
AppsFlyerLib.getInstance().subscribeForDeepLink(object : DeepLinkListener{
override fun onDeepLinking(deepLinkResult: DeepLinkResult) {
when (deepLinkResult.status) {
DeepLinkResult.Status.FOUND -> {
Log.d(
LOG_TAG,"Deep link found"
)
}
DeepLinkResult.Status.NOT_FOUND -> {
Log.d(
LOG_TAG,"Deep link not found"
)
return
}
else -> {
// dlStatus == DeepLinkResult.Status.ERROR
val dlError = deepLinkResult.error
Log.d(
LOG_TAG,"There was an error getting Deep Link data: $dlError"
)
return
}
}
var deepLinkObj: DeepLink = deepLinkResult.deepLink
try {
Log.d(
LOG_TAG,"The DeepLink data is: $deepLinkObj"
)
} catch (e: Exception) {
Log.d(
LOG_TAG,"DeepLink data came back null"
)
return
}
// An example for using is_deferred
if (deepLinkObj.isDeferred == true) {
Log.d(LOG_TAG, "This is a deferred deep link");
} else {
Log.d(LOG_TAG, "This is a direct deep link");
}
try {
val fruitName = deepLinkObj.deepLinkValue
Log.d(LOG_TAG, "The DeepLink will route to: $fruitName")
} catch (e:Exception) {
Log.d(LOG_TAG, "There's been an error: $e");
return;
}
}
})
⇲ Liens Github : Java
Test du deep linking différé
Prerequisites
- Intégration complète du DLU
- Enregistrez 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.
- Demandez un template OneLink à votre marketeur.
- Il ressemblera à ceci :
https://onelink-basic-app.onelink.me/H5hv
. - Cet exemple utilise le sous-domaine OneLink
onelink-basic-app.onelink.me
et l'ID du template OneLinkH5hv
- Il ressemblera à ceci :
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 à un lien existant
- Utilisez uniquement le domaine et le template OneLink de votre lien, par exemple :
https://onelink-basic-app.onelink.me/H5hv
. - Ajouter des paramètres OneLink
deep_link_value
anddeep_link_sub1-10
, comme prévu par votre app. Les paramètres doivent être ajoutés en tant que paramètres de requête.- Exemple :
https://onelink-basic-app.onelink.me/H5hv?pid=my_media_source&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 cette image :
- Installez l'app à partir de Android Studio ou de tout autre IDE que vous utilisez.
- 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 cette image :
- 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
.
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\":\"apples\",\"campaign\":\"\",\"af_sub4\":\"\",\"timestamp\":\"2022-12-06T11:47:40.037\",\"click_http_referrer\":\"\",\"af_sub5\":\"\",\"media_source\":\"\",\"af_sub2\":\"\",\"deep_link_sub1\":\"23\",\"is_deferred\":true}","status":"FOUND"}
Test du deep linking (liens d'app Android)
Prerequisites
- Intégration complète du DLU
- Enregistrez votre appareil de test
- Activez le mode débogage dans l'app
- Assurez-vous que l'app est déjà installée sur votre appareil.
- Demandez un template OneLink à votre marketeur.
- Il ressemblera à ceci :
https://onelink-basic-app.onelink.me/H5hv
. - Cet exemple utilise le sous-domaine OneLink
onelink-basic-app.onelink.me
et l'ID du template OneLinkH5hv
.
- Il ressemblera à ceci :
- Configurez les liens d'app Android.
Create the test link
Utilisez la même méthode que celle utilisée pour le deep linking différé.
Perform the test
- Cliquez sur le lien de votre appareil.
- Le DLU détecte le lien d'app Android et récupère les paramètres OneLink pour le callback
onDeepLinking
.
Expected logs results
Les journaux suivants sont disponibles uniquement lorsque le mode débogage est activé.
- Si le lien est un lien court OneLink (ex. https://onelink-basic-app.onelink.me/H5hv/apples)
D/AppsFlyer_6.9.0: HTTP: [258990367] GET:https://onelink.appsflyer.com/shortlink-sdk/v2/H5hv?id=apples
- Le DLU appelle
onDeepLinking
avecstatus=FOUND
et les données de lien OneLinkD/AppsFlyer_6.9.0: [DDL] Calling onDeepLinking with: {"deepLink":"{\"path\":\"\\\/H5hv\",\"scheme\":\"https\",\"link\":\"https:\\\/\\\/onelink-basic-app.onelink.me\\\/H5hv?deep_link_value=apples&deep_link_sub1=23\",\"host\":\"onelink-basic-app.onelink.me\",\"deep_link_sub1\":\"23\",\"deep_link_value\":\"apples\",\"is_deferred\":false}","status":"FOUND"}
Astuce
Si, en cliquant sur un lien d'app Android, le système d'exploitation affiche une boîte de dialogue d'erreur ou redirige vers Google Play ou un site web, vérifiez que la signature SHA256 est correcte.
- Use
adb
pour obtenir la signature de l'app sur l'appareil :adb shell pm get-app-links <PACKAGE_NAME>
-2. Assurez-vous que le sous-domaine est
verified
.
- Si le sous-domaine n'est pas vérifié, il affiche
1024
.
Mis(e) à jour il y a environ 1 mois