37Shares

제6장

예시와 함께 보는 어트리뷰션 & 딥링킹 콜백 처리

어트리뷰션과 딥링킹에 관한 지식을 실제로 실행에 옮기고 싶다면 아래 예시를 참고해보세요.

 

고객 사례 #1: 표준 어트리뷰션 & 라우팅 처리

이 예시에서는 SDK 설정을 완료하고, 딥링크를 성공적으로 테스트할 준비가 끝났다고 가정합니다. 따라서 이러한 준비가 되지 않았다면, 이 가이드의 테스트 & QA 섹션을 먼저 확인하세요. 이 섹션에서는 딥링크 QA를 수행하는 방법과 흔히 저지르는 실수를 자세히 설명합니다. QA 팀과 함께 살펴볼 간결한 체크리스트도 제공합니다. 이제 SDK 설정을 완료했다고 가정하고, 사례를 통해 유저 딥링킹 방법을 자세히 알아봅시다. AppsFlyer는 앱에서 설치 데이터를 수신하기 위한 2가지 기능을 제공합니다.

                                                            안드로이드: onInstallConversionDataLoaded

                                                            iOS: onConversionDataReceived

이 기능에서 반환된 전환 데이터는 기존 트래킹 링크나 추가적인 서버 파라미터로 이루어집니다. 이 파라미터는 클릭이나 설치 시점에 생성됩니다. 전환 데이터가 트래킹 링크에 의존하기 때문에, 여러 소스와 트래킹 링크는 다양한 전환 데이터 파라미터를 생성할 수 있습니다.

또한, 설치 유형에 따라 3가지 다른 결과가 나타날 수 있습니다.

  1. 논오가닉 설치: 설치와 관련한 기존 어트리뷰션 데이터를 반환합니다. 아래 예시를 참고하세요.
  2. 오가닉 설치(또는 재설치): ‘오가닉 설치’를 반환합니다.
  3. 리어트리뷰션: 리어트리뷰션 전환에 관한 세부 정보를 반환합니다.

실제 사례

다음은 iOS에서 onConversionDataReceived 를 호출하면 받게 되는 콜백의 예시입니다. 이 예시는 유료 광고에 AppsFlyer의 딥링킹 서비스를 사용하는 쇼핑 앱 Jet의 사례입니다.

  1. ▿ 0 : 2 elements
  2. – key : click_time
  3. – value : 2018-08-14 02:37:30.798
  4. ▿ 1 : 2 elements
  5. – key : orig_cost
  6. – value : 0.0
  7. ▿ 2 : 2 elements
  8. – key : cost_cents_USD
  9. – value : 0
  10. ▿ 3 : 2 elements
  11. – key : is_first_launch
  12. – value : 0
  13. ▿ 4 : 2 elements
  14. – key : campaign
  15. – value : Test
  16. ▿ 5 : 2 elements
  17. – key : af_click_lookback
  18. – value : 7d
  19. ▿ 6 : 2 elements
  20. – key : af_dp
  21. – value : jet://product/Carbona-Washing-Machine-Cleaner-3-Count/d1909b8fb76240d480df7c983452a913
  22. ▿ 7 : 2 elements
  23. – key : idfa
  24. – value : 00000-0000-0000-0000-0000000000000
  25. ▿ 8 : 2 elements
  26. – key : media_source
  27. – value : Email
  28. ▿ 9 : 2 elements
  29. – key : install_time
  30. – value : 2018-08-14 02:38:40.012
  31. ▿ 10 : 2 elements
  32. – key : af_status

몇 가지 사항은 즉각적으로 나타나야 하며, 또한 이 기능의 콜백에서 해당 키 값 구조를 사용할 수 있어야 합니다. 이는 정보를 파싱하고, 유저를 라우팅하고, 사용자 정의 이벤트와 경험을 호출하기 위해 필요합니다. 예를 들어, AppsFlyer 딥링크에 나타나는 af_dp 값을 통해 유저를 즉시 이 URI로 라우팅할 수 있습니다. is_first_launch 값을 통해서는 설치 후 앱을 처음으로 실행했는지 과거에 앱을 실행한 적이 있는지 확인할 수 있습니다.

AppsFlyer는 앱이 실행될 때마다 어트리뷰션 데이터를 수신하기 위해 onAppOpenAttribution을 사용합니다. 이는 iOS와 안드로이드 각각에서 다르게 구현됩니다. 아래의 작업 흐름도는 어떻게 2개의 기능을 결합해 설치할 때는 설치 데이터를, 그렇지 않은 경우에는 오픈 데이터를 수신하는지 보여줍니다. 그 지점에서 af_dp, af_web_dp, af_ios_url, af_android_url와 같이 딥링킹에 사용되는 다양한 키를 파싱할 수 있습니다. URL에 포함되는 링크 파라미터의 전체 목록은 여기에서 확인해주세요.

 

참고

이로 인해 미묘한 차이가 나타납니다. SDK나 제3자 어트리뷰션 서비스에 따라 데이터 수신 방법이 달라집니다. 그래프에서 보이듯 AppsFlyer는 2가지 방식으로 서비스를 제공합니다. 다른 업체들은 더 다양한 방식 또는 1가지 방식으로만 서비스를 제공할 수도 있습니다.

하지만 콜백 데이터를 파싱하고 유저를 라우팅하는 과정은 변해선 안 됩니다!

고객 사례 #2: AppsFlyer와 CDP(mParticle) 활용

일부 개발사들은 어트리뷰션 업체든 아니든 상관없이 다양한 업체의 의뢰를 받아 라우팅, 딥링킹, 어트리뷰션을 처리합니다.

어떻게 고객 데이터 플랫폼을 통해 여러 개의 딥링크 응답을 처리하는지, mParticle의 사례를 중심으로 살펴보겠습니다.

 

이 활용 사례의 핵심은 우선 각 외부 업체에서 제공하는 응답 키를 이해한 다음, 누가 딥링킹의 관점에서 작업을 처리하는지 확인하는 데 있습니다. 마지막으로 어떻게 사용자 정의 이벤트에서 어트리뷰션 콜백 데이터를 기록하는지, 이를 통해 어떻게 푸시 알림을 전송하고 프로모션이나 AppsFlyer 데이터를 이용하는 다른 캠페인을 진행하는지 살펴보겠습니다!

실제 사례

이 앱은 콜백 데이터를 제공하는 2개의 외부 업체와 연동되어 있습니다. 고객 데이터 플랫폼인 mParticle은 웹과 모바일 데이터 처리를 전문으로 합니다. 또한 모든 어트리뷰션과 딥링킹 콜백 데이터를  단 하나의 방법으로 전송합니다.

단일 mParticle API는 다른 모든 어트리뷰션 제공 업체의 콜백뿐만 아니라 AppsFlyer의 콜백도 래핑합니다.  그리고 전송이 완료된 콜백을 알려주기 위해 각각의 AppsFlyer Kit를 상수로 표시합니다.

앱 설치나 다른 프로세스가 진행되는 동안, iOS/안드로이드 Kit는 모든 플랫폼에서 AppsFlyer SDK에 델리게이트나 콜백을 등록합니다. 또한 이용 가능한 신규 전환 데이터가 있을 때마다 iOS의 경우 completion handler block을, 안드로이드의 경우 AttributionListener를 호출합니다.

 

이 결과에서 반환된 키는 AppsFlyer SDK의 결과와 일치합니다. 관련 문서는 다음을 참고하세요.

 

AppsFlyer 콜백 응답: https://support.appsflyer.com/hc/en-us/articles/207032096-Accessing-AppsFlyer-Attribution-Conversion-Data-from-the-SDK-iOS-Deferred-Deep Linking-

  1. (lldb) po linkInfo
  2. ▿ 1 element
  3. ▿ 0 : 2 elements
  4. ▿ key : AnyHashable(“mParticle-AppsFlyer App Open Result”)
  5. – value : “mParticle-AppsFlyer App Open Result”
  6. ▿ value : 1 element
  7. ▿ 0 : 2 elements
  8. – key : link
  9. – value : https://jet.bttn.io/product/Carbona-Washing-Machine-Cleaner-3-Count/d1909b8fb76240d480df7c983452a913/?btn_ref=fakesrctoken-1111111111111111Shop
    (lldb) po linkInfo
  10. ▿ 1 element
  11. ▿ 0 : 2 elements
  12. ▿ key : AnyHashable(“mParticle-AppsFlyer Attribution Result”)
  13. – value : “mParticle-AppsFlyer Attribution Result”
  14. ▿ value : 11 elements
  15. ▿ 0 : 2 elements
  16. – key : click_time
  17. – value : 2018-08-14 02:37:30.798
  18. ▿ 1 : 2 elements
  19. – key : orig_cost
  20. – value : 0.0
  21. ▿ 2 : 2 elements
  22. – key : cost_cents_USD
  23. – value : 0
  24. ▿ 3 : 2 elements
  25. – key : is_first_launch
  26. – value : 0
  27. ▿ 4 : 2 elements
  28. – key : campaign
  29. – value : Test
  30. ▿ 5 : 2 elements
  31. – key : af_click_lookback
  32. – value : 7d
  33. ▿ 6 : 2 elements
  34. – key : af_dp
  35. – value : jet://product/Carbona-Washing-Machine-Cleaner-3-Count/d1909b8fb76240d480df7c983452a913
  36. ▿ 7 : 2 elements
  37. – key : idfa
  38. – value : 0000000-0000-0000-0000-00000000000
  39. ▿ 8 : 2 elements
  40. – key : media_source
  41. – value : Email
  42. ▿ 9 : 2 elements
  43. – key : install_time
  44. – value : 2018-08-14 02:38:40.012
  45. ▿ 10 : 2 elements
  46. – key : af_status

이 사례에서는 mParticle의 딥링크 API에서만 콜백 데이터를 수신합니다. AppsFlyer SDK 응답을 직접 처리한 사례와 마찬가지로, 이러한 응답들 가운데 어떤 것을 어떻게 처리할지 고려해야 합니다. 아래 내용을 참고하여 링크 로직을 구조화해보세요.

  1. 다양한 외부 업체에서 콜백 데이터를 수신하고 있다면, 어떤 업체가 우선일까요? 대부분의 마케터는 AppsFlyer처럼 주요 매체의 MMP (공식 측정 파트너) 자격을 갖춘 어트리뷰션 업체를 선호합니다.
  2. AppsFlyer의 설치 응답과 오픈 응답을 모두 확인해야 한다는 사실을 잊지 마세요.
  3. 그 응답이 ‘오가닉’이고, 특히 해당 업체가 AppsFlyer와 직접적으로 연동되어 있지 않다면, 다른 외부업체를 고려해 봐야 합니다.

어트리뷰션과 딥링킹 로직을 충분히 고려하는 것은 물론, 고객 측의 어트리뷰션 이벤트에서 받은 키와 값을 합쳐 사용자 정의 이벤트를 기록해야 합니다. 다음 사례는 AppsFlyer와 함께 또는 mParticle과 같은 CDP를 통해 이를 어떻게 실행하는지 보여줍니다.

 

AppsFlyer

iOS

– (void) trackEvent:(NSString *)eventName withValues:(NSDictionary*)values

eventName은 ‘어트리뷰션’ 또는 ‘어트리뷰션 데이터’처럼 단순해도 됩니다. 은 위에 나열된 콜백 값의 전체 또는 일부여야 합니다.

 

안드로이드

public static void trackEvent(Context context, String eventName, Map eventValues)

eventName은 ‘어트리뷰션’ 또는 ‘어트리뷰션 데이터’처럼 단순해도 됩니다. eventValues는 위에 나열된 콜백 값의 전체 또는 일부여야 합니다.

 

관련 문서:

https://support.appsflyer.com/hc/en-us/articles/115005544169-AppsFlyer-Rich-In-App-Events-Android-and-iOS#Introduction

mParticle

iOS

MPEvent *event = [[MPEvent alloc] initWithName:@”Attribution Data”
                                         type:MPEventTypeTransaction];
event.info = @{@”key”:@”value”};
[[MParticle sharedInstance] logEvent:event];

안드로이드

Map<String, String> eventInfo = new HashMap<String, String>();
eventInfo.put(“key”, “value”);
MPEvent event = new MPEvent.Builder(“Attribution Data”, EventType.Navigation)
   .info(eventInfo)
   .build();
MParticle.getInstance().logEvent(event);

관련 문서:

iOS: https://docs.mparticle.com/developers/sdk/ios/event-tracking/#capture-a-custom-event

안드로이드: https://docs.mparticle.com/developers/sdk/android/event-tracking/#capture-a-custom-event

About the Authors