API héritées sous iOS
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.
-
iOS lit les droits relatifs aux domaines associés de l'app.
-
iOS ouvre l'app.
-
Le SDK AppsFlyer est déclenché au sein de 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 mapattributionData
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 : AnyHashable: Any
.
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 :
func onAppOpenAttribution(_ attributionData: [AnyHashable: Any]) {
//Handle Deep Link Data
print("onAppOpenAttribution data:")
for (key, value) in attributionData {
print(key, ":",value)
}
walkToSceneWithParams(params: attributionData)
}
// User logic
fileprivate func walkToSceneWithParams(params: [AnyHashable:Any]) {
let storyBoard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil)
UIApplication.shared.windows.first?.rootViewController?.dismiss(animated: true, completion: nil)
var fruitNameStr = ""
if let thisFruitName = params["deep_link_value"] as? String {
fruitNameStr = thisFruitName
} else if let linkParam = params["link"] as? String {
guard let url = URLComponents(string: linkParam) else {
print("Could not extract query params from link")
return
}
if let thisFruitName = url.queryItems?.first(where: { $0.name == "deep_link_value" })?.value {
fruitNameStr = thisFruitName
}
}
let destVC = fruitNameStr + "_vc"
if let newVC = storyBoard.instantiateVC(withIdentifier: destVC) {
print("AppsFlyer routing to section: \(destVC)")
newVC.attributionData = params
UIApplication.shared.windows.first?.rootViewController?.present(newVC, animated: true, completion: nil)
} else {
print("AppsFlyer: could not find section: \(destVC)")
}
}
⇲ Liens Github : Swift
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.
func onAppOpenAttributionFailure(_ error: Error) {
print("\(error)")
}
⇲ Liens Github : Swift
Deferred Deeplinking
Important
Un deep linking différé qui utilise la méthode antérieure de onConversionDataSuccess risque de ne pas fonctionner sous iOS 14.5 et +, en effet il requiert des données d'attribution qui peuvent ne pas être disponibles en raison de la protection de la vie privée.
Nous vous recommandons donc d'utiliser le Deep Linking unifié (DLU). Le DLU est conforme aux normes de confidentialité de iOS 14.5 et +, et il ne renvoie que les paramètres qui concernent le deep linking et deep linking différé :deep_link_value
anddeep_link_sub1-10
. Les paramètres d'attribution (tels quemedia_source
,campaign
,af_sub1-5
etc.), renvoientnull
et ne peuvent pas être utilisé à des fins de deep linking.
En savoir plus
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 : AnyHashable: Any
.
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
// Handle Organic/Non-organic installation
func onConversionDataSuccess(_ data: [AnyHashable: Any]) {
print("onConversionDataSuccess data:")
for (key, value) in data {
print(key, ":", value)
}
if let status = data["af_status"] as? String {
if (status == "Non-organic") {
if let sourceID = data["media_source"],
let campaign = data["campaign"] {
print("This is a Non-Organic install. Media source: \(sourceID) Campaign: \(campaign)")
}
} else {
print("This is an organic install.")
}
if let is_first_launch = data["is_first_launch"] as? Bool,
is_first_launch {
print("First Launch")
if let fruit_name = data["deep_link_value"]
{
// The key 'deep_link_value' exists only in OneLink originated installs
print("deferred deep-linking to \(fruit_name)")
walkToSceneWithParams(params: data)
}
else {
print("Install from a non-owned media")
}
} else {
print("Not First Launch")
}
}
}
⇲ Liens Github : Swift
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
:
func onConversionDataFail(_ error: Error) {
print("\(error)")
}
⇲ Liens Github : Swift
Exemples de charges utiles iOS
Consultez les exemples de charges utiles suivants pour les liens universels, 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.
Universal Links
En Entrée vers onAppOpenAttribution(_ attributionData: [AnyHashable: Any])
{
"af_ad": "my_adname",
"af_adset": "my_adset",
"af_android_url": "https://isitchristmas.com/",
"af_channel": "my_channel",
"af_click_lookback": "20d",
"af_cost_currency": "USD",
"af_cost_value": 6,
"af_dp": "afbasicapp://mainactivity",
"af_ios_url": "https://isitchristmas.com/",
"af_sub1": "my_sub1",
"af_sub2": "my_sub2",
"c": "fruit_of_the_month",
"campaign": "fruit_of_the_month",
"fruit_amount": 26,
"fruit_name": "apples",
"is_retargeting": true,
"link": "https://onelink-basic-app.onelink.me/H5hv/6d66214a",
"media_source": "Email",
"pid": "Email"
}
{
"path": "/H5hv",
"af_android_url": "https://my_android_lp.com",
"af_channel": "my_channel",
"host": "onelink-basic-app.onelink.me",
"af_adset": "my_adset",
"pid": "Email",
"scheme": "https",
"af_dp": "afbasicapp://mainactivity",
"af_sub1": "my_sub1",
"fruit_name": "apples",
"af_ad": "my_adname",
"af_click_lookback": "20d",
"fruit_amount": 16,
"af_sub2": "my_sub2",
"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",
"c": "fruit_of_the_month",
"af_ios_url": "https://my_ios_lp.com",
"af_cost_value": 6
}
URI scheme
En Entrée vers onAppOpenAttribution(_ attributionData: [AnyHashable: Any])
{
"af_click_lookback ": "25d",
"af_sub1 ": "my_sub1",
"shortlink ": "9270d092",
"af_deeplink ": true,
"media_source ": "Email",
"campaign ": "my_campaign",
"af_cost_currency ": "NZD",
"host ": "mainactivity",
"af_ios_url ": "https://my_ios_lp.com",
"scheme ": "afbasicapp",
"path ": "",
"af_cost_value ": 5,
"af_adset ": "my_adset",
"af_ad ": "my_adname",
"af_android_url ": "https://my_android_lp.com",
"af_sub2 ": "my_sub2",
"af_force_deeplink ": true,
"fruit_amount ": 15,
"af_dp ": "afbasicapp://mainactivity",
"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=56441f02-377b-47c6-9648-7a7f88268130-o&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email&shortlink=9270d092",
"af_channel ": "my_channel",
"is_retargeting ": true,
"af_web_id ": "56441f02-377b-47c6-9648-7a7f88268130-o",
"fruit_name ": "apples"
}
{
"af_ad ": "my_adname",
"fruit_name ": "apples",
"host ": "mainactivity",
"af_channel ": "my_channel",
"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=56441f02-377b-47c6-9648-7a7f88268130-o&campaign=my_campaign&fruit_amount=15&fruit_name=apples&is_retargeting=true&media_source=Email",
"af_deeplink ": true,
"campaign ": "my_campaign",
"af_sub1 ": "my_sub1",
"af_click_lookback ": "25d",
"af_web_id ": "56441f02-377b-47c6-9648-7a7f88268130-o",
"path ": "",
"af_sub2 ": "my_sub2",
"af_ios_url ": "https://my_ios_lp.com",
"af_cost_value ": 5,
"fruit_amount ": 15,
"is_retargeting ": true,
"scheme ": "afbasicapp",
"af_force_deeplink ": true,
"af_adset ": "my_adset",
"media_source ": "Email",
"af_cost_currency ": "NZD",
"af_dp ": "afbasicapp://mainactivity",
"af_android_url ": "https://my_android_lp.com"
}
Deferred deep linking
En Entrée vers onConversionDataSuccess(_ data: [AnyHashable: Any])
{
"adgroup": null,
"adgroup_id": null,
"adset": null,
"adset_id": null,
"af_ad": "my_adname",
"af_adset": "my_adset",
"af_android_url": "https://isitchristmas.com/",
"af_channel": "my_channel",
"af_click_lookback": "20d",
"af_cost_currency": "USD",
"af_cost_value": 6,
"af_cpi": null,
"af_dp": "afbasicapp://mainactivity",
"af_ios_url": "https://isitchristmas.com/",
"af_siteid": null,
"af_status": "Non-organic",
"af_sub1": "my_sub1",
"af_sub2": "my_sub2",
"af_sub3": null,
"af_sub4": null,
"af_sub5": null,
"agency": null,
"campaign": "fruit_of_the_month ",
"campaign_id": null,
"click_time": "2020-08-12 15:08:00.770",
"cost_cents_USD": 600,
"engmnt_source": null,
"esp_name": null,
"fruit_amount": 26,
"fruit_name": "apples",
"http_referrer": null,
"install_time": "2020-08-12 15:08:33.335",
"is_branded_link": null,
"is_first_launch": 1,
"is_retargeting": true,
"is_universal_link": null,
"iscache": 1,
"match_type": "probabilistic",
"media_source": "Email",
"orig_cost": "6.0",
"redirect_response_data": null,
"retargeting_conversion_type": "none",
"shortlink": "6d66214a"
}
Mis(e) à jour il y a 2 mois