概要:ディープリンクとディファードディープリンクの従来の方法を紹介します。注:従来の方法ではなくUDLメソッドを使用することを推奨します。

ディープリンクにより、マーケティング担当者は既存アプリユーザーを特定のアプリ体験(例えば、アプリ内の特定のページなど)へ誘導するためのリンクを作成できます。ディファードディープリンクは、アプリを持っていない新規ユーザーに、まずアプリストアでのアプリダウンロードを促し、その後特定のアプリ体験へ誘導します。

14941494

ディープリンク

Overview

ディープリンクは、モバイルユーザーを特定のアクティビティまたはアプリ内コンテンツに誘導します。

This in-app routing to a specific activity in the app is possible due to the deep_link_value that is passed to the app when the OS opens the app and the 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.

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.

AppsFlyer SDKは、ユーザーがクリックしたリンクからパラメータを返します。アプリ内のルーティングやリンク内のデータのパーソナライズのために、アプリ内でパラメーターが正しく処理されるようにするのはディベロッパーの責任です。

ディープリンクは次の流れで機能します

19201920
  1. ユーザーがOneLinkのショートURLをクリックします。
  2. iOSがアプリのAssociated Domains Entitlementsを読み込みます。
  3. iOSがアプリを起動します。
  4. AppsFlyer SDKがアプリ内で起動します。
  5. AppsFlyer SDKはOneLinkデータを取得します。
  • ショートURLでは、AppsFlyerのサーバーにあるショートURLリゾルバAPIからデータを取得します。
  • ロングURLでは、データを直接取得しています。
  1. AppsFlyer SDK triggers onAppOpenAttribution() with the retrieved parameters and cached attribution parameters (e.g.install_time).
  2. Asynchronously, onConversionDataSuccess() is called, holding the full cached attribution data. (You can exit this function by checking if is_first_launch is true.)
  3. onAppOpenAttribution() uses the attributionData map to dispatch other activities in the app and pass relevant data.
    • これにより、OneLinkの最大の目的である、ユーザーのためのパーソナライズされた体験が生まれます。

Procedures

onAppOpenAttribution メソッドを実装し、パラメーターの動作を設定するには、次の手順に関するアクションチェックリストを完了する必要があります。

手順のチェックリスト
1. Deciding app behavior and deep_link_value (and other parameter names and values) - with the marketer
2. Planning method input, i.e. deep_link_value (and other parameter names and values) - with the marketer
3. Implementing the onAppOpenAttribution() logic
4. Implementing the onAppOpenAttributionFailure() logic

アプリの動作を決定

リンクがクリックされた際のアプリ動作を決定する方法

マーケティング担当者から、アプリがクリックされた際に期待する動作を聞き出してください。

メソッドインプットの計画

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 method gets variables as an input like this:

attributionData: [AnyHashable: Any]

インプットデータの構成はこちらで説明しています。

The marketer and developers need to plan the deep_link_value (and possible other 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. 希望するアプリの動作を実装するために必要なパラメーターと値について、マーケティング担当者に伝えてください。
  2. Decide on naming conventions for the deep_link_value and other parameters and values.
    Note: Custom parameters will not appear in raw data collected in AppsFlyer.

📘

ヒント

The marketer and developers need to decide together on the best long term system for the deep_link_value (and any other parameters/values) to minimize additional app updates.

The deep_link_value can be based on a SKU, post ID, path, or anything else. We strongly recommend agreeing on a system that allows for you to enter dynamic values on your chosen parameter, so you can generate many different deep links that go to different content within the app, without any further changes to the app code by the developers.

See the following URL examples. The deep_link_value of a fruit type was chosen by the marketer and developer together. And the developers made the values dynamic, so the marketer could enter any fruit without the need for further work by the dev team.

https://onelink-sample-app.onelink.me/H5hv?pid=Email&c=fruit_of_the_month**&deep_link_value=apples**...
https://onelink-sample-app.onelink.me/H5hv?pid=Email&c=fruit_of_the_month**&deep_link_value=bananas**...
https://onelink-sample-app.onelink.me/H5hv?pid=Email&c=fruit_of_the_month**&deep_link_value=peaches**...

onAppOpenAttribution() ロジックの実装

The deep link opens the onAppOpenAttribution method in the AppDelegate. The deep_link_value and other parameters in the method input are used to implement the specific user experience when the application is opened.

ロジックを実装する方法

  1. 選択したパラメーターと値に基づいてロジックを実装してください。次のコードの例を参照してください。
  2. アプリケーションの関数を実装して、以下を許可してください:
    • ユニバーサルリンクが以下に対応: continue
    • URIが以下に対応: handleOpen
  3. 完了後、アプリが予定通り動作するかの確認をマーケティング担当者に送ります。

📘

サンプルコード

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)")
    }
}

⇲ Github リンク:Swift

onAppOpenAttributionFailure() ロジックの実装

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.

onAppOpenAttributionFailure メソッドの実装方法

次のコードを入力してください:

func onAppOpenAttributionFailure(_ error: Error) {
    print("\(error)")
}

⇲ Github リンク:Swift

ディファードディープリンク

❗️

重要!

Deferred deep linking using the legacy method of onConversionDataSuccess may not work for iOS 14.5+, since it requires attribution data that may not be available due to privacy protection.
We recommend using unified deep linking (UDL). UDL conforms to the iOS 14.5+ privacy standards and only returns parameters relevant to deep linking and deferred deep linking: deep_link_value and deep_link_sub1. Attribution parameters (such as media_source, campaign, af_sub1-5, etc.), return null and can’t be used for deep linking purposes.

詳しく知る

Overview

ディファードディープリンクは、新規ユーザーがアプリをインストールするために正しいアプリストアへ誘導し、その後、初回起動後に特定のアプリ体験(例:アプリ内の特定のページ)へ誘導します。

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 that is passed to the app when the OS opens the 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.

アプリ内でのルーティングやリンク先でのデータのパーソナライズなど、アプリ内でパラメータが正しく処理されるように実装するのはディベロッパーの責任です。

ディープリンクは次の流れで機能します

19201920
  1. ユーザーが、アプリがまだインストールされていないデバイス上でOneLinkをクリックします。
  2. AppsFlyerはクリックを登録し、ユーザーを正しいアプリストアまたはランディングページに誘導します。
  3. ユーザーがアプリをインストールし起動します。
  4. iOS verifies the Universal Link ownership using the Apple App Site Association file hosted by AppsFlyer in the location: https://myapp.onelink.me/.well-known/apple-app-site-association
  5. AppsFlyer SDKが初期化され、AppsFlyerサーバーにインストールが帰属されます。
  6. 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.
  7. パラメーター is_first_launch has the value true, which signals the deferred deep link flow.
    The developer uses the data received in the onConversionDataSuccess function to create a personalized experience for the user for the application’s first launch.

Procedures

To implement the onConversionDataSuccess method and set up the parameter behaviors, the following action checklist of procedures need to be completed.

手順のチェックリスト
1. Deciding app behavior on first launch, and deep_link_value (and other parameter names and values) - with the marketer
2. Planning method input, i.e. deep_link_value (and other parameter names and values) - with the marketer
3. Implementing the onConversionDataSuccess() logic
4. Implementing the onConversionDataFail() logic

初回起動時のアプリ動作を決定する

初回起動時のアプリ動作を決定する

マーケティング担当者から、リンクがクリックされたときと、アプリが初回起動されたときに期待される動作を入手してください。

メソッドインプットの計画

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 and other variables as an input like this:

data: [AnyHashable: Any]

マップには2種類のデータがあります:

  • 計測データ
  • Data defined by the marketer in the link (deep_link_value and other parameters and values)
    Other parameters can be either:
    • AppsFlyerの公式パラメーター
    • マーケティング担当者とディベロッパーが選択したカスタムパラメーターと値
    • インプットデータの構成はこちらで説明しています。

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. 希望するアプリの動作を実装するために必要なパラメーターと値について、マーケティング担当者に伝えてください。
  2. Decide on naming conventions for the deep_link_value and other parameters and values.
    Note:
    • カスタムパラメーターは、AppsFlyerのローデータには表示されません。
    • コンバージョンデータは、小文字の「n」を使ったカスタムパラメーター名「name」を返しません。

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.

ロジックを実装する方法

  1. 選択したパラメーターと値に基づいてロジックを実装してください。次のコードの例を参照してください。
  2. 完了後、アプリが予定通り動作するかの確認をマーケティング担当者に送ります。

📘

サンプルコード

// 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")
        }
    }
}

⇲ Github リンク:Swift

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.

onConversionDataFailure メソッドを実装する方法

次のコードを入力してください:

func onConversionDataFail(_ error: Error) {
    print("\(error)")
}

⇲ Github リンク:Swift

フルコードの例

// For Swift version < 4.2 replace function signature with the commented out code
// func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { // this line for Swift < 4.2
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
  AppsFlyerLib.shared().continue(userActivity, restorationHandler: nil)
  return true
}

// Open URI-scheme for iOS 9 and above
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
  AppsFlyerLib.shared().handleOpen(url, options: options)
  return true
}

extension AppDelegate: AppsFlyerLibDelegate {
     
    // 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")
            } else {
                print("Not First Launch")
            }
        }
    }
    
    func onConversionDataFail(_ error: Error) {
        print("\(error)")
    }
   
    // Handle Deeplink
    func onAppOpenAttribution(_ attributionData: [AnyHashable: Any]) {
        //Handle Deep Link Data
        print("onAppOpenAttribution data:")
        for (key, value) in attributionData {
            print(key, ":",value)
        }
        walkToSceneWithParams(params: attributionData)
    }
    
    func onAppOpenAttributionFailure(_ error: Error) {
        print("\(error)")
    }
}

一般的なデータ構造

このセクションでは、OneLinkがインプットとして渡すことができるデータ構造と可能なパラメーターに関する情報が含まれています。

Input parameters

次の表には、OneLinkがインプットとして渡すことができるパラメーターのリストが含まれています。

インプットマップには2種類のデータがあります:

  • 計測データ
  • リンク内でマーケティング担当者が定義したデータ(パラメーターと値)
    パラメーターは次のいずれかです:
    • AppsFlyerの公式パラメーター
    • マーケティング担当者とディベロッパーが選択したカスタムパラメーターと値

📘

注意

  • 次の表はAppsFlyer SDK 5.4.1以上に関連するものです。以前のSDKバージョンでは、パラメータが存在しない、または名前が変更されている場合があります。
  • 非推奨とされていないパラメーターは、すべての OneLink タイプに関連しています。
    • ショートURL
    • ロングURL
    • 全OSのリンク:
      • Androidアプリリンク
      • ユニバーサルリンク
      • URLスキーム(iOSとAndroidの両方)
パラメーター名タイプ詳細備考
af_dp文字列URIスキームURLアプリリンクのフォールバック。
例:afbasicapp://mainactivity
link文字列ディープリンクの実行に使用された完全なリンク。例: https://onelink-basic-app.onelink.me/H5hv?pid=Email&c=fruit_of_the_month
deep_link_value文字列ユーザーが誘導される特定のアプリ内コンテンツの値名です。
pid (media source)文字列OneLinkのメディアソース、例:email、SMS、social media
install_time文字列アプリが初回起動された時刻。非推奨
例:2020-05-06 13:51:19
scheme文字列URLの最初の単語で、インターネット上のリソースにアクセスする際に使用するプロトコルを識別します。例: mygreatapp://mainactivity または https://killerapp.onelink.me/coolactivity/H7JK非推奨
Never use http or https for URI schemes
host文字列リソースを保有するホストを識別します。例:mygreatapp://mainactivity または
https://**killerapp.onelink.me**/coolactivity/H7JK
非推奨
path文字列Webクライアントがアクセスしたいホスト内の特定のリソースです。例:https://killerapp.onelink.me/coolactivity/**H7JK**非推奨
URIスキームには関係ありません
shortlink文字列元のリンクよりも大幅に少ない文字数で短縮されたURLです。例:https://killerapp.onelink.me/coolactivity/H7JK/**checkitout**
af_web_id文字列ピープルベースドアトリビューションのためのトークンです。
af_status文字列非推奨URIシナリオでのみ渡されます
af_deeplinkBoolean非推奨URIシナリオでのみ渡されます
c (campaign)文字列マーケティングキャンペーンの名称AppsFlyer管理画面でマーケティング担当者が設定した値。
is_retargetingBooleanリターゲティングキャンペーンの一環としてリンクを識別します。値はマーケティング担当者が設定します。
af_ios_url文字列iOSデバイスにてディープリンクが失敗した際のフォールバックURL。関連がない場合でも、Androidデバイスにも渡されます。
af_android_url文字列Androidデバイスでディープリンクが失敗した場合のフォールバックURL。
af_sub[1-5]文字列広告主側で自由に定義可能なカスタムパラメータです。
AppsFlyer管理画面でマーケティング担当者が設定した値。
アプリ内ルーティングに関連するパラメータを渡す場合に推奨されます。
af_adset文字列広告セットはキャンペーンと広告の間に位置する階層です。AppsFlyer管理画面でマーケティング担当者が設定した値
af_channel文字列広告が配信されるメディアソースのチャンネル。例:UAC_Search、UAC_Display、Instagram、Facebook Audience Network など。AppsFlyer管理画面でマーケティング担当者が設定した値
ad_adname文字列マーケティング担当者/パブリッシャーから提供された広告名。AppsFlyer管理画面でマーケティング担当者が設定した値
af_cost_currency文字列ISO-4217に準拠した3 文字の通貨コード。例:USD、ZAR、EUR
[デフォルト]:USD
AppsFlyer管理画面でマーケティング担当者が設定した値
af_cost_value文字列通貨設定 (af_cost_currency) に則したコストの値です。AppsFlyer管理画面でマーケティング担当者が設定した値
af_click_lookback文字列設定可能なルックバッククリック計測期間の日数。AppsFlyer管理画面でマーケティング担当者が設定した値
af_force_deeplinkBooleanaf_dpの値で指定されたアクティビティに強制的にディープリンクさせます。iOSのみに関連します。
関連性がなくても、値はAndroidにも渡されます。

iOS sample payloads

以下、ユニバーサルリンク、URIスキーム、ディファードディープリンクのサンプルペイロードを参照してください。サンプルにはフルペイロードが含まれており、Onelinkのカスタムリンク設定ページのすべてのパラメーターにデータが含まれている場合に関連します。

:ペイロードはマップとして返されます。ただし、わかりやすくするため、以下のサンプルペイロードはJSON形式で表示しています。

ユニバーサルリンク

インプット先: 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スキーム

インプット先: 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"
}

ディファードディープリンク

インプット先: 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"
}