API héritées Android
Deep linking direct
Overview
Le deep linking direct dirige les utilisateurs mobile vers une activité ou un contenu spécifique de l'app, lorsque celle-ci est déjà installée.
Ce routage in-app vers une activité précise se fait grâce aux paramètres transmis à l'app lorsque le système d'exploitation ouvre l'app et que la méthode onAppOpenAttribution
method is called. AppsFlyer's OneLink ensures that the correct value is passed along with the user's click, thus personalizing the user’s app experience.
Only the deep_link_value
is required for deep linking. However, other parameters and values (such as custom attribution parameters) can also be added to the link and returned by the SDK as deep linking data.
Le flux de deep linking direct fonctionne comme suit :
- L'utilisateur clique sur l'URL courte OneLink.
- Android lance l'app en fonction de l'activité dans le fichier AndroidManifest.xml.
- Le SDK AppsFlyer est déclenché dans l'app.
- Le SDK AppsFlyer récupère les données OneLink.
- Dans une URL courte, les données sont extraites de l'API de gestion des URL courtes dans les serveurs d'AppsFlyer.
- Dans une URL longue, les données sont extraites directement depuis l'URL longue.
- AppsFlyer SDK triggers
onAppOpenAttribution()
with the retrieved parameters and cached attribution parameters (e.g.install_time
). - Asynchronously,
onConversionDataSuccess()
is called, holding the full cached attribution data. (You can exit this function by checking ifis_first_launch
istrue
.) onAppOpenAttribution()
utilise la carte attributionData pour distribuer d'autres activités au sein de l'app, et transmettre les données ad hoc.- Une expérience personnalisée est ainsi proposée à l'utilisateur, ce qui est l'objectif premier de OneLink.
Procedures
To implement the onAppOpenAttribution
méthode et configurer les comportements des paramètres, vous devez suivre les étapes de mise en œuvre suivantes.
Étapes de la procédure
- Décider du comportement de l'app
deep_link_value
(and other parameter names and values) - with the marketer - Planifier la méthode d'entrée, c’est-à-dire
deep_link_value
(and other parameter names and values) - with the marketer - Implémenter la logique
onAppOpenAttribution()
logic - Implémenter la logique
onAttributionFailure()
logic
Décider du comportement de l'app
Pour décider du comportement de l'app une fois le lien cliqué :
À fournir par le marketeur : le comportement attendu du lien lorsqu'il est cliqué.
Définir l'entrée de la méthode
When a OneLink is clicked and the user has the app installed on their device, the onAppOpenAttribution
method is called by the AppsFlyer SDK. This is referred to as a retargeting re-engagement.
The onAppOpenAttribution
reçoit des variables en entrée comme ceci : Map <String, String>
.
La structure des données entrantes est détaillée ici.
Implémenter la logique onAppOpenAttribution()
The deep link opens the onAppOpenAttribution
dans l'activité principale. Les paramètres OneLink de la méthode d'entrée sont utilisés pour définir l'activité précise que l'utilisateur aura à réaliser en ouvrant l'app.
Exemple de code :
@Override
public void onAppOpenAttribution(Map<String, String> attributionData) {
if (!attributionData.containsKey("is_first_launch"))
Log.d(LOG_TAG, "onAppOpenAttribution: This is NOT deferred deep linking");
for (String attrName : attributionData.keySet()) {
String deepLinkAttrStr = attrName + " = " + attributionData.get(attrName);
Log.d(LOG_TAG, "Deeplink attribute: " + deepLinkAttrStr);
}
Log.d(LOG_TAG, "onAppOpenAttribution: Deep linking into " + attributionData.get("deep_link_value"));
goToFruit(attributionData.get("deep_link_value"), attributionData);
}
@Override
public void onAttributionFailure(String errorMessage) {
Log.d(LOG_TAG, "error onAttributionFailure : " + errorMessage);
}
private void goToFruit(String fruitName, Map<String, String> dlData) {
String fruitClassName = fruitName.concat("Activity");
try {
Class fruitClass = Class.forName(this.getPackageName().concat(".").concat(fruitClassName));
Log.d(LOG_TAG, "Looking for class " + fruitClass);
Intent intent = new Intent(getApplicationContext(), fruitClass);
if (dlData != null) {
// Map is casted HashMap since it is easier to pass serializable data to an intent
HashMap<String, String> copy = new HashMap<String, String>(dlData);
intent.putExtra(DL_ATTRS, copy);
}
startActivity(intent);
} catch (ClassNotFoundException e) {
Log.d(LOG_TAG, "Deep linking failed looking for " + fruitName);
e.printStackTrace();
}
}
⇲ Liens Github : Java
Remarque
onAppOpenAttribution
n'est pas appelé lorsque l'app fonctionne en arrière-plan et que sonLaunchMode
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'app utilise un système non standardLaunchMode
.import android.content.Intent; ... ... ... @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); setIntent(intent); }
Implémenter la logique onAttributionFailure()
The onAttributionFailure
method is called whenever the call to onAppOpenAttribution
fails. The function should report the error and create an expected experience for the user.
@Override
public void onAttributionFailure(String errorMessage) {
Log.d(LOG_TAG, "error onAttributionFailure : " + errorMessage);
}
⇲ Liens Github : Java
Deferred Deeplinking
Overview
Le deep linking différé dirige d'abord les nouveaux utilisateurs vers l'app store qui leur permettra d'installer l'app, puis, lorsque l'app est ouverte pour la première fois, l'utilisateur est envoyé vers un usage précis au sein de l'app (comme une page spécifique de l'app).
When the user first launches the app, the onConversionDataSuccess
callback function receives both the conversion data of the new user, and OneLink data. The OneLink data makes in-app routing possible due to the deep_link_value
ou autre qui est transmis à l'app lorsque le système d'exploitation ouvre l'app.
Only the deep_link_value
is required for deep linking. However, other parameters and values (such as custom attribution parameters) can also be added to the link and returned by the SDK as deep linking data. The AppsFlyer OneLink ensures that the correct parameters are passed along with the user's click, thus personalizing the user’s app experience.
The marketer and developer must coordinate regarding desired app behavior and deep_link_value
. The marketer uses the parameters to create deep links, and the developer customizes the behavior of the app based on the value received.
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.
Le flux de deep linking différé fonctionne comme suit ::
- L'utilisateur clique sur le OneLink depuis un appareil sur lequel l'app n'est pas installée.
- AppsFlyer enregistre le clic et redirige l'utilisateur vers l'app store ou la page d'accueil qui convient.
- L'utilisateur installe l'app puis la lance.
- Le SDK AppsFlyer est initialisé et l'installation est attribuée dans les serveurs AppsFlyer.
- The SDK triggers the
onConversionDataSuccess
method. The function receives input that includes both thedeep_link_value
, and the attribution data/parameters defined in the OneLink data. - Le paramètre
is_first_launch
has the valuetrue
, qui signale le flux de deep linking différé.
Le développeur utilise les données provenant de la fonctiononConversionDataSuccess
pour créer une expérience personnalisée lorsque l'app est lancée pour la première fois.
Procedures
To implement the onConversionDataSuccess
method and set up the parameter behaviors, the following action checklist of procedures need to be completed.
- Décider du comportement de l'app lors du premier lancement et
deep_link_value
(and other parameter names and values) - with the marketer - Planifier la méthode d'entrée, c’est-à-dire
deep_link_value
(and other parameter names and values) - with the marketer - Implémenter la logique
onConversionDataSuccess()
logic - Implémenter la logique
onConversionDataFail()
logic
Décider du comportement de l'app lors du premier lancement
Pour décider du comportement de l'app lors du premier lancement :
À fournir par le marketeur : le comportement attendu du lien lorsqu'il est cliqué et que l'app est lancée pour la première fois.
Définir l'entrée de la méthode
For deferred deep linking, the onConversionDataSuccess
method input must be planned and the input decided in the previous section (for deep linking) is made relevant for the first time the app is launched.
The onConversionDataSuccess
method gets the deep_link_value
ainsi que d'autres variables en entrée comme ceci : Map <String, Object>.
La carte (map) contient deux types de données :
- Données d'attribution
- Data defined by the marketer in the link (
deep_link_value
and other parameters and values)
Other parameters can be either:- Les paramètres officiels AppsFlyer.
- Les paramètres personnalisés et valeurs choisis par le marketeur et le développeur.
- La structure des données entrantes est détaillée ici.
The marketer and developers need to plan the deep_link_value
(and other possible parameters and values) together based on the desired app behavior when the link is clicked.
To plan the deep_link_value
, and other parameter names and values based on the expected link behavior:
- Transmettez au marketeur les paramètres et valeurs qui permettront de déclencher le comportement attendu de l'application.
- Decide on naming conventions for the
deep_link_value
and other parameters and values.
Note:- Les paramètres personnalisés n'apparaîtront pas dans les données brutes collectées dans AppsFlyer.
- Les données de conversion ne retourneront pas un paramètre personnalisé nommé « name, » avec un « n » minuscule.
Implémenter la logique onConversionDataSuccess()
When the app is opened for the first time, the onConversionDataSuccess
method is triggered in the main activity. The deep_link_value
and other parameters in the method input are used to implement the specific user experience when the app is first launched.
Pour implémenter la logique :
- Mettez en œuvre la logique en fonction des paramètres et valeurs choisis. Consultez l'exemple de code ci-dessous.
- Une fois terminé, prévenez le marketeur que l'application se comporte bien comme prévu.
Exemple de code
@Override
public void onConversionDataSuccess(Map<String, Object> conversionData) {
for (String attrName : conversionData.keySet())
Log.d(LOG_TAG, "Conversion attribute: " + attrName + " = " + conversionData.get(attrName));
String status = Objects.requireNonNull(conversionData.get("af_status")).toString();
if(status.equals("Non-organic")){
if( Objects.requireNonNull(conversionData.get("is_first_launch")).toString().equals("true")){
Log.d(LOG_TAG,"Conversion: First Launch");
if (conversionData.containsKey("deep_link_value")){
Log.d(LOG_TAG,"Conversion: This is deferred deep linking.");
// TODO SDK in future versions - match the input types
Map<String,String> newMap = new HashMap<>();
for (Map.Entry<String, Object> entry : conversionData.entrySet()) {
newMap.put(entry.getKey(), String.valueOf(entry.getValue()));
}
onAppOpenAttribution(newMap);
}
} else {
Log.d(LOG_TAG,"Conversion: Not First Launch");
}
} else {
Log.d(LOG_TAG,"Conversion: This is an organic install.");
}
}
⇲ Liens Github : Java
Implémenter la logique onConversionDataFailure()
The onConversionDataFailure
method is called whenever the call to onConversionDataSuccess
fails. The function should report the error and create an expected experience for the user.
To implement the onConversionDataFailure
:
@Override
public void onConversionDataFail(String errorMessage) {
Log.d(LOG_TAG, "error getting conversion data: " + errorMessage);
}
⇲ Liens Github : Java
Exemples de charges utiles Android
Consultez les exemples de charges utiles suivants pour les App Links, les schémas d'URI et le deep linking différé. Chaque exemple illustre une charge utile complète, qui existe lorsque tous les paramètres de la page de configuration du lien personnalisé Onelink contiennent des données.
Remarque: les charges utiles reviennent sous forme de map. Dans un souci de clarté, les exemples de charges utiles suivants s'affichent au format JSON.
Android App Links
En Entrée vers onAppOpenAttribution(Map<String, String> attributionData)
{
"af_dp": "afbasicapp://mainactivity",
"af_ios_url": "https://isitchristmas.com/",
"fruit_name": "apples",
"c": "fruit_of_the_month",
"media_source": "Email",
"link": "https://onelink-basic-app.onelink.me/H5hv/6d66214a",
"pid": "Email",
"af_cost_currency": "USD",
"af_sub1": "my_sub1",
"af_click_lookback": "20d",
"af_adset": "my_adset",
"af_android_url": "https://isitchristmas.com/",
"af_sub2": "my_sub2",
"fruit_amount": 26,
"af_cost_value": 6,
"campaign": "fruit_of_the_month",
"af_channel": "my_channel",
"af_ad": "my_adname",
"is_retargeting": "true"
}
{
"af_dp": "afbasicapp://mainactivity",
"install_time": "2020-08-06 06:56:02",
"fruit_name": "apples",
"af_ios_url": "https://my_ios_lp.com",
"media_source": "Email",
"scheme": "https",
"link": "https://onelink-basic-app.onelink.me/H5hv?pid=Email&c=fruit_of_the_month&af_channel=my_channel&af_adset=my_adset&af_ad=my_adname&af_sub1=my_sub1&af_sub2=my_sub2&fruit_name=apples&fruit_amount=16&af_cost_currency=USD&af_cost_value=6&af_click_lookback=20d&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_android_url=https%3A%2F%2Fmy_android_lp.com",
"af_cost_currency": "USD",
"af_sub1": "my_sub1",
"af_click_lookback": "20d",
"path": "/H5hv",
"af_adset": "my_adset",
"af_android_url": "https://my_android_lp.com",
"af_sub2": "my_sub2",
"fruit_amount": 16,
"af_cost_value": 6,
"host": "onelink-basic-app.onelink.me",
"campaign": "fruit_of_the_month",
"af_channel": "my_channel",
"af_ad": "my_adname"
}
URI schemes
En Entrée vers onAppOpenAttribution(Map<String, String> attributionData)
{
"scheme": "afbasicapp",
"link": "afbasicapp://mainactivity?af_ad=my_adname&af_adset=my_adset&af_android_url=https%3A%2F%2Fmy_android_lp.com&af_channel=my_channel&af_click_lookback=25d&af_cost_currency=NZD&af_cost_value=5&af_deeplink=true&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_force_deeplink=true&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_sub1=my_sub1&af_sub2=my_sub2&af_web_id=367f81fb-59a4-446a-ac6c-a68d2ee9447c-p&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email&shortlink=9270d092",
"af_cost_currency": "NZD",
"af_click_lookback": "25d",
"af_deeplink": true,
"path": "",
"af_android_url": "https://my_android_lp.com",
"af_force_deeplink": true,
"fruit_amount": 15,
"host": "mainactivity",
"af_channel": "my_channel",
"shortlink": "9270d092",
"af_dp": "afbasicapp://mainactivity",
"install_time": "2020-08-06 06:56:02",
"af_ios_url": "https://my_ios_lp.com",
"fruit_name": "apples",
"af_web_id": "367f81fb-59a4-446a-ac6c-a68d2ee9447c-p",
"media_source": "Email",
"af_status": "Non-organic",
"af_sub1": "my_sub1",
"af_adset": "my_adset",
"af_sub2": "my_sub2",
"af_cost_value": 5,
"campaign": "my_campaign",
"af_ad": "my_adname",
"is_retargeting": true
}
{
"af_dp": "afbasicapp://mainactivity",
"install_time": "2020-08-06 06:56:02",
"af_ios_url": "https://my_ios_lp.com",
"fruit_name": "apples",
"af_web_id": "367f81fb-59a4-446a-ac6c-a68d2ee9447c-p",
"scheme": "afbasicapp",
"media_source": "Email",
"link": "afbasicapp://mainactivity?af_ad=my_adname&af_adset=my_adset&af_android_url=https%3A%2F%2Fmy_android_lp.com&af_channel=my_channel&af_click_lookback=25d&af_cost_currency=NZD&af_cost_value=5&af_deeplink=true&af_dp=afbasicapp%3A%2F%2Fmainactivity&af_ios_url=https%3A%2F%2Fmy_ios_lp.com&af_sub1=my_sub1&af_sub2=my_sub2&af_web_id=367f81fb-59a4-446a-ac6c-a68d2ee9447c-p&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email",
"af_cost_currency": "NZD",
"af_status": "Non-organic",
"af_click_lookback": "25d",
"af_sub1": "my_sub1",
"af_deeplink": true,
"path": "",
"af_android_url": "https://my_android_lp.com",
"af_adset": "my_adset",
"fruit_amount": 15,
"af_sub2": "my_sub2",
"host": "mainactivity",
"af_cost_value": 5,
"campaign": "my_campaign",
"af_channel": "my_channel",
"af_ad": "my_adname",
"is_retargeting": true
}
Deferred deep linking
En Entrée vers onConversionDataSuccess(Map<String, Object> conversionData)
{
"redirect_response_data": null,
"adgroup_id": null,
"engmnt_source": null,
"retargeting_conversion_type": "none",
"orig_cost": 6.0,
"af_cost_currency": "USD",
"is_first_launch": true,
"af_click_lookback": "20d",
"af_cpi": null,
"iscache": true,
"click_time": "2020-08-12 16:04:50.605",
"af_android_url": "https://isitchristmas.com/",
"fruit_amount": 26,
"is_branded_link": null,
"match_type": "probabilistic",
"adset": null,
"af_channel": "my_channel",
"campaign_id": null,
"shortlink": "6d66214a",
"af_dp": "afbasicapp://mainactivity",
"install_time": "2020-08-12 16:05:33.750",
"af_ios_url": "https://isitchristmas.com/",
"fruit_name": "apples",
"media_source": "Email",
"agency": null,
"af_siteid": null,
"af_status": "Non-organic",
"af_sub1": "my_sub1",
"cost_cents_USD": 600,
"af_sub5": null,
"af_adset": "my_adset",
"af_sub4": null,
"af_sub3": null,
"af_sub2": "my_sub2",
"adset_id": null,
"esp_name": null,
"af_cost_value": 6,
"campaign": "fruit_of_the_month",
"http_referrer": "android-app://com.slack/",
"af_ad": "my_adname",
"is_universal_link": null,
"is_retargeting": true,
"adgroup": null
}
Mis(e) à jour il y a environ 1 an