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 ::
Direct Deep Linking flow

  1. L'utilisateur clique sur l'URL courte OneLink.

  2. iOS lit les droits relatifs aux domaines associés de l'app.

  3. iOS ouvre l'app.

  4. Le SDK AppsFlyer est déclenché au sein de l'app.

  5. 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.
  6. AppsFlyer SDK triggers onAppOpenAttribution() with the retrieved parameters and cached attribution parameters (e.g.install_time).

  7. Asynchronously, onConversionDataSuccess() is called, holding the full cached attribution data. (You can exit this function by checking if is_first_launch is true.)

  8. onAppOpenAttribution() utilise la map 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

  1. Décider du comportement de l'app deep_link_value (and other parameter names and values) - with the marketer
  2. Planifier la méthode d'entrée, c’est-à-dire deep_link_value (and other parameter names and values) - with the marketer
  3. Implémenter la logique onAppOpenAttribution() logic
  4. 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 and deep_link_sub1-10. Les paramètres d'attribution (tels que media_source, campaign, af_sub1-5etc.), renvoient null 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 ::
Deferred Deep Linking flow!

  1. L'utilisateur clique sur le OneLink depuis un appareil sur lequel l'app n'est pas installée.
  2. AppsFlyer enregistre le clic et redirige l'utilisateur vers l'app store ou la page d'accueil qui convient.
  3. L'utilisateur installe l'app puis la lance.
  4. Le SDK AppsFlyer est initialisé et l'installation est attribuée dans les serveurs AppsFlyer.
  5. The SDK triggers the onConversionDataSuccess method. The function receives input that includes both the deep_link_value, and the attribution data/parameters defined in the OneLink data.
  6. Le paramètre is_first_launch has the value true, qui signale le flux de deep linking différé.
    Le développeur utilise les données provenant de la fonction onConversionDataSuccess 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.

  1. Décider du comportement de l'app lors du premier lancement et deep_link_value (and other parameter names and values) - with the marketer
  2. Planifier la méthode d'entrée, c’est-à-dire deep_link_value (and other parameter names and values) - with the marketer
  3. Implémenter la logique onConversionDataSuccess() logic
  4. 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:

  1. Transmettez au marketeur les paramètres et valeurs qui permettront de déclencher le comportement attendu de l'application.
  2. 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 :

  1. Mettez en œuvre la logique en fonction des paramètres et valeurs choisis. Consultez l'exemple de code ci-dessous.
  2. 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"
}