레거시 API

요약: 딥링킹과 디퍼드 딥링킹을 위한 레거시 방법입니다. 참고: 레거시가 아닌 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.

앱스플라이어 SDK는 사용자가 클릭한 링크에서 파라미터를 반환하며, 앱에서 파라미터를 올바르게 처리하고 인앱 라우팅 및 링크에서 데이터를 맞춤 설정하는 것은 개발자의 책임입니다.

동작 방식은 다음과 같습니다.

19201920
  1. 사용자가 원링크의 짧은 URL을 클릭합니다.
  2. iOS는 앱의 연관된 도메인 권한을 읽습니다.
  3. iOS가 앱을 실행합니다.
  4. 앱스플라이어 SDK가 앱 내에서 트리거됩니다.
  5. 앱스플라이어 SDK가 원링크 데이터를 검색합니다.
  • 짧은 URL에서, 데이터는 앱스플라이어 서버의 짧은 URL 리졸버 API에서 가져옵니다.
  • 긴 URL에서 데이터는 긴 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.
    • 이렇게 하면 사용자에게 맞춤 경험을 생성하며, 이는 원링크의 주요 목적입니다.

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. 사용자가 앱을 설치하지 않은 기기에서 원링크를 클릭합니다.
  2. 앱스플라이어가 클릭을 등록하고 사용자를 올바른 앱스토어나 랜딩 페이지로 리디렉션합니다.
  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. 앱스플라이어 SDK가 초기화되고, 설치는 앱스플라이어 서버에서 어트리뷰트됩니다.
  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]

맵에는 다음과 같은 두 가지 유형의 데이터가 있습니다.

  • 어트리뷰션 데이터
  • Data defined by the marketer in the link (deep_link_value and other parameters and values)
    Other parameters can be either:
    • 앱스플라이어 공식 파라미터.
    • 마케터와 개발자가 함께 정한 파라미터와 값.
    • 입력 데이터 구조는 여기에 설명되어 있습니다.

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:
    • 사용자정의 파라미터는 앱스플라이어에서 수집된 로데이터에 표시되지 않습니다.
    • 전환 데이터는 소문자 "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.

onAppOpenAttributionFailure 메서드를 구현하는 방법:

다음 코드를 구현합니다.

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

공통 데이터 구조

이 섹션에는 원링크가 입력으로서 전달할 수 있는 가능한 파라미터와 데이터 구조에 대한 정보가 포함되어 있습니다.

Input parameters

다음 표에는 원링크가 입력으로 전달 가능한 파라미터를 나열합니다.

입력 맵에는 다음과 같은 두 가지 유형의 데이터가 있습니다.

  • 어트리뷰션 데이터
  • 링크에서 마케터가 정의한 데이터(파라미터와 값)
    파라미터는 다음 중 하나입니다.
    • 앱스플라이어 공식 파라미터.
    • 마케터와 개발자가 함께 정한 파라미터와 값.

📘

참고

  • 다음 표는 앱스플라이어 SDK 5.4.1 이상과 관련이 있습니다. 이전 SDK 버전에서는 파라미터를 표시하거나 이름을 바꾸지 못할 수 있습니다.
  • 더 이상 사용되지 않는 것으로 표시되지 않은 파라미터는 모든 원링크 유형과 관련이 있습니다.
    • 단축 URL
    • 긴 URL
    • 모든 OS의 링크:
      • 안드로이드 앱 링크
      • 유니버설 링크
      • URI 스킴(iOS와 안드로이드 모두)
파라미터 이름유형설명설명
af_dp문자열URI 스킴 URL.앱 링크로 폴백합니다.
예: afbasicapp://mainactivity
링크문자열딥링크를 수행하는 데 사용된 전체 링크입니다.예: https://onelink-basic-app.onelink.me/H5hv?pid=Email&c=fruit_of_the_month
deep_link_value문자열사용자가 이동하게 되는 특정 인앱 콘텐츠의 값 이름입니다.
pid (media source)문자열원링크의 미디어소스(예: 이메일, SMS, 소셜미디어)
install_time문자열최초 앱 실행 시각.사용 중단
예: 2020-05-06 13:51:19
scheme문자열URL의 첫 번째 단어로서 인터넷상의 리소스에 액세스하는 데 사용될 프로토콜을 식별합니다. 예: mygreatapp://mainactivity or https://killerapp.onelink.me/coolactivity/H7JK사용 중단
Never use http or https for URI schemes
host문자열리소스를 보유하는 호스트를 식별합니다. 예: mygreatapp://mainactivity or
https://**killerapp.onelink.me**/coolactivity/H7JK
사용 중단
path문자열웹 클라이언트가 액세스하려는 호스트의 특정 리소스입니다. 예: 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)문자열마케팅 캠페인의 이름입니다.마케터가 앱스플라이어 대시보드에서 설정한 값입니다.
is_retargetingBoolean리타게팅 캠페인의 일부로 푸시 알림을 기록합니다.이 값은 마케터가 설정합니다.
af_ios_url문자열iOS 기기에서 딥링킹이 실패할 시 폴백 URL입니다.관련이 없는 경우에도 안드로이드 기기에도 전달됩니다.
af_android_url문자열안드로이드 기기에서 딥링킹이 실패할 시 폴백 URL입니다.
af_sub[1-5]문자열광고주에 의해 지정된 선택적 커스텀 파라미터.마케터가 앱스플라이어 대시보드에서 설정한 값입니다.
인앱 라우팅과 관련된 파라미터 전달 시 권장합니다.
af_adset문자열광고 세트는 캠페인과 광고 사이에 있는 중간 수준입니다.앱스플라이어의 대시보드에서 마케터가 설정한 값
af_channel문자열광고가 분포되는 미디어소스 채널 예: UAC_Search, UAC_Display, 인스타그램, Facebook Audience Network 등.앱스플라이어의 대시보드에서 마케터가 설정한 값
ad_adname문자열마케터/퍼블리셔가 제공하는 광고 이름.앱스플라이어의 대시보드에서 마케터가 설정한 값
af_cost_currency문자열ISO-4217을 따르는 3자 통화 코드. 예: USD, KRW, EUR
[기본]: USD
앱스플라이어의 대시보드에서 마케터가 설정한 값
af_cost_value문자열비용 통화를 이용한 비용 값.앱스플라이어의 대시보드에서 마케터가 설정한 값
af_click_lookback문자열룩백 클릭 어트리뷰션 기간의 설정 가능한 일수날짜 수.앱스플라이어의 대시보드에서 마케터가 설정한 값
af_force_deeplinkBooleanaf_dp 값에 지정된 액티비티로 강제 딥링킹합니다.iOS만 해당.
관련이 없는 경우에도 안드로이드에 전달됩니다.

iOS sample payloads

유니버설 링크, URI 스킴 및 디퍼드 딥링킹에 대한 다음 샘플 페이로드를 참조하세요. 샘플에는 원링크 사용자정의 링크 설정 페이지의 모든 파라미터에 데이터가 포함되어 있는 경우, 이와 관련된 전체 페이로드가 포함되어 있습니다.

일러두기: 페이로드가 맵으로 반환됩니다. 그러나 명확성을 위해 다음과 같은 샘플 페이로드가 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"
}