AppsFlyer SDK 연동 - Unity

Official_unity_logo.png

현재 Unity SDK 버전:  v4.16.4
안드로이드 SDK v4.8.11 및 iOS SDK v4.8.4와 호환

1. 개요

AppsFlyer SDK는 안드로이드, iOS, Windows 폰 및 다른 많은 모바일 개발 플랫폼에서의 모바일 앱설치와 이벤트를 트래킹하는 기능을 제공합니다.

설치, 업데이트, 세션을 트래킹할 수 있고, 또한 인앱 구매나 게임 레벨과 같은 앱 설치 후의 이벤트도 트래킹하여 ROI 및 사용자 인게이지먼트 수준을 평가할 수 있습니다.

Unity 플랫폼에서 개발된 모바일 앱은 한번의 AppsFlyer SDK 연동으로 안드로이드와 iOS에서 생성된 앱을 트래킹할 수 있습니다. 이 가이드는 AppsFlyer SDK를 Unity 코드에 연동하는 방법에 대해 자세히 설명합니다.

 참고

AppsFlyer 연동은 Unity OS 버전 5 이상을 지원합니다.

 중요!

Google Play 설치 Referrer API는 Unity 플러그인 v 4.16.0부터 지원합니다. 새로운 Referrer API를 사용하려면 플러그인을 4.16.0 버전 이상으로 업데이트하세요.

2. 빠른 시작

2.1 AppsFlyer Unity 플러그인 다운로드

플러그인은 다음 Github에서 확인할 수 있습니다. https://github.com/AppsFlyerSDK/Unity

다음은 AppsFlyer Unity 플러그인을 사용하는 연동 안내입니다.

2.2 플러그인 설치

다음은 AppsFlyer 플러그인의 설치 안내입니다.

  1. AppsFlyerUnityPlugin.unitypackage를 Unity 프로젝트로 가져옵니다.
  2. Assets >> Import Package >> Custom Package로 이동합니다.
  3. AppsFlyerUnityPlugin.unitypackage 파일을 선택합니다.

2.3 안드로이드 및 iOS를 위한 필수 설정

안드로이드 설정


AndroidManifest.xml에 AF 리시버 및 사용 권한 설정:

// 리시버는 <application> 태그 안에 있어야 함
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
//필수 사용 권한:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />


필수 사용 권한 설정

AndroidManifest.xml 파일은 다음 권한을 포함합니다.

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- Optional : -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />


AndroidManifest.xml 파일에 BroadcastReceiver 설정

설치 리퍼러 브로드 캐스트 리시버는 다음 두가지 방법으로 구현할 수 있습니다.

싱글 브로드캐스트 리시버 멀티 브로드캐스트 리시버

AndroidManifest.xml에 INSTALL_REFERRER를 수신하는 리시버가 없다면, application tag 안에 다음 리시버를 추가합니다.

<receiver android:name="com.appsflyer.SingleInstallBroadcastReceiver" android:exported="true">
    <intent-filter>
         <action android:name="com.android.vending.INSTALL_REFERRER" />
     </intent-filter>
</receiver>

iOS 설정


연결된 프레임워크 및 라이브러리


xCode용 Unity에서 프로젝트를 구축한 후, 이전에 프레임워크를 추가해놓은 상태가 아니라면 xCode의 Linked Frameworks and Libraries에 Security.Framework를 추가해야 합니다.


iOS Apple Search Ads

다음을 추가합니다:

AdSupport.framework
이 프레임워크를 포함한 경우에만 AppsFlyer가 IDFA를 수집합니다. 이 프레임워크를 추가하지 않으면 Facebook, Twitter, 그리고 대부분의 다른 광고 네트워크를 트래킹할 수 없습니다.
iAd.framework

이 프레임워크는 Apple Search Ads 트래킹에 필수사항이므로 앱 프로젝트에 추가할 것을 적극 권장합니다.

3. SDK 초기화

Start/Init 메서드에서 AppsFlyer dev key 및 iTunes와 Google Play에서 사용되는 고유 앱 ID를 설정합니다. 여기에서 iOS 앱 ID는 "id" 프리픽스 없이 숫자만으로 설정해야 합니다.

다음 코드를 추가하세요.

Unity Plugin 4.15.1 이상 Unity Plugin 4.14.3 이하
void Start () {
/* Mandatory - set your AppsFlyer’s Developer key. */
AppsFlyer.setAppsFlyerKey ("YOUR_APPSFLYER_DEV_KEY_HERE");
/* For detailed logging */
/* AppsFlyer.setIsDebug (true); */
#if UNITY_IOS
/* Mandatory - set your apple app ID
NOTE: You should enter the number only and not the "ID" prefix */
AppsFlyer.setAppID ("YOUR_APP_ID_HERE");
AppsFlyer.trackAppLaunch ();
#elif UNITY_ANDROID
/* Mandatory - set your Android package name */
AppsFlyer.setAppID ("YOUR_ANDROID_PACKAGE_NAME_HERE");
/* For getting the conversion data in Android, you need to add the "AppsFlyerTrackerCallbacks" listener.*/
AppsFlyer.init ("YOUR_DEV_KEY","AppsFlyerTrackerCallbacks");
#endif
}

 중요!

  • 안드로이드에서는 AppsFlyer.inittrackAppLaunch 호출이 포함되어 있습니다. 따라서 Unity 플러그인의 안드로이드 빌드에서는 trackAppLaunch를 호출하지 마십시오.
  • iOS에서는 전환 데이터 응답이 AppsFlyerTrackerCallbacks.cs 클래스에서 시작됩니다.

4. 인앱이벤트 트래킹

앱에서 발생하는 모든 일을 인앱이벤트를 통해 파악할 수 있습니다. ROI(Return on Investment, 투자 대비 이익)와 LTV(Lifetime Value, 유저 생애 가치)를 트래킹하기 위해서는 충분히 시간을 들여서 어떤 이벤트를 측정할 것인지 정의하기를 권장합니다.

인앱이벤트 트래킹은 trackEvent를 이벤트명과 값 파라미터와 함께 호출하여 수행됩니다. 더 자세한 내용은  인앱이벤트  문서에서 찾아볼 수 있습니다.

 참고

인앱이벤트 이름은 45자 이상이 될 수 없습니다. 45자 이상의 이벤트 이름은 대시보드에 나타나지 않고 로데이터, Pull API, Push API에서만 표시됩니다.


트래킹 이벤트 예시:

System.Collections.Generic.Dictionary<string, string> purchaseEvent = new   
System.Collections.Generic.Dictionary<string, string> ();
purchaseEvent.Add ("af_currency", "USD");
purchaseEvent.Add ("af_revenue", "0.99");
purchaseEvent.Add ("af_quantity", "1");
AppsFlyer.trackRichEvent ("af_purchase", purchaseEvent);

 참고

AppsFlyer는 Unity SDK 버전 4.15.1부터 인앱이벤트나 다른 SDK API에서 표준 영문자가 아닌 문자도 사용할 수 있도록 지원합니다.

5. 딥링킹 트래킹

사용 운영체제에 따라 다음의 딥링킹 가이드를 따르세요.

Android iOS
manifest 파일에 다음을 추가합니다:

<activity android:name="com.appsflyer.GetDeepLinkingActivity" android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="your_scheme" />
</intent-filter>
</activity>

6. 수익 트래킹

AFInAppEvents.REVENUE 이벤트 파라미터를 사용하여 수익을 인앱이벤트의 일부로서 계산할 수 있습니다. 양수 또는 음수의 어떤 숫자라도 입력할 수 있습니다.

 참고

AFInAppEvents.REVENUE(af_revenue 사용과 동일)는 AppsFlyer에서 로데이터와 대시보드에서 실제 수익으로 계산되는 유일한 이벤트 파라미터입니다. 더 자세한 내용을 보려면 여기를 클릭하세요.

 예시

수익 인앱이벤트
AppsFlyer.trackRichEvent(AFInAppEvents.LEVEL_ACHIEVED, new Dictionary<string, string>(){
            {AFInAppEvents.CONTENT_ID, "1234567"},
            {AFInAppEvents.CONTENT_TYPE, "category_a"},
            {AFInAppEvents.REVENUE, "1.99"},
            {AFInAppEvents.CURRENCY, "USD"}
        });

7. 전환 데이터 받기

AppsFlyer는 SDK 레벨에서 직접 실시간으로 사용자 전환 데이터에 접근할 수 있도록 합니다. 따라서 앱을 새로 설치한 후 가장 처음으로 앱을 실행했을 때 사용자가 보게 되는 랜딩 페이지를 사용자 정의할 수 있습니다.

AppsFlyer의 전환 데이터를 서버에서 로드하려면:

  1. Empty GameObject를 추가합니다.
  2. 이것을 프로젝트에 포함되어 있는 AppsFlyerTrackerCallbacks.cs에 추가합니다. (이 게임오브젝트는 반드시 AppsFlyerTrackerCallbacks 명명을 해주어야 합니다).
Android Unity Plugin > 4.15.1 Android Unity Plugin < 4.14.3 iOS
/*Android에서 전환 데이터를 받기 위해서는 이 수신기를 추가해야 합니다. 대상: init() method*/
AppsFlyer.init ("YOUR_DEV_KEY","AppsFlyerTrackerCallbacks");


Android에서는 매서드를 AppsFlyerTrackerCallbacks.cs에서 다른 클래스로 이동한 후, 그 클래스를 수신기에서 호출할 수 있습니다.

AppsFlyerTrackerCallbacks에 표시된 것과 정확하게 동일한 메소드 네임스페이스를 사용해야 합니다.

8. 사용자 식별자

AppsFlyer 기기 ID 가져오기

앱의 모든 신규 설치에 대해서 AppsFlyer 고유 기기 ID가 생성됩니다. AppsFlyer의 고유 ID를 얻기 위해서 다음 API를 사용하세요.

public String getAppsFlyerId();


사용 예:

string AppsFlyerUID = AppsFlyer.getAppsFlyerId();

고객 사용자 ID 설정하기

사용자 ID를 앱에서 사용되는 것과 동일하게 설정합니다. 

사용자 ID를 설정하려면 다음의 메서드를 호출합니다:

AppsFlyer.setCustomerUserID("someId");

 참고

customerUserID는 trackAppLaunch/init보다 먼저 설정되어야 합니다. 고객 사용자 ID는 설정 후에 유일하게 이벤트에 연결되므로 가능한 한 빨리 설정하는 것을 권장합니다. 또한 고객 사용자 ID는 MixpanelSwrve와 같은 분석 플랫폼과 연동할 때 사용될 수 있습니다.

고객 사용자 ID에 대해 더 자세히 알아보려면 여기를 클릭하세요.

사용자 이메일 설정

현재 Unity에서는 사용할 수 없습니다.

Google Advertising ID

SDK 4.8.0 버전부터 AppsFlyer는 google_advertising_id를 자동으로 수집합니다. Google Advertising ID 수집에 관한 요구 사항은 SDK 4.7.x 이하 버전에서만 적용됩니다.

IMEI 및 안드로이드 ID

OS 버전이 안드로이드 4.4 KitKat 이상이고 기기가 Google Play Services를 사용하고 있으면(Unity SDK 버전 4.16.4 및 GPS가 필요한 특정 앱에서), 기본적으로 SDK는 IMEI 및 안드로이드 ID를 수집하지 않습니다. 

AppsFlyer에 해당 ID를 확실하게 보내고자 하는 경우에는 개발자가 다음 API를 사용할 수 있습니다.

AppsFlyer.setAndroidIdData(string)
AppsFlyer.setImeiData(string)

앱이 Google Play Services를 사용하지 않는 경우 SDK는 IMEI 및 안드로이드 ID를 수집합니다. 하지만, Google Play Services를 사용하는 앱은 IMEI를 수집하지 말아야 합니다. 이는 Google Play 정책 위반입니다.

다음 API를 사용하여 IMEI와 안드로이드 ID 수집을 옵트아웃할 수 있습니다.

AppsFlyer.setCollectAndroidID(bool) 
AppsFlyer.setCollectIMEI(bool)

  경고

적절한 어트리뷰션을 위해서는 GAID, 안드로이드 ID, IMEI와 같은 적어도 하나 이상의 기기 식별자가 수집되어야 합니다.

IDFA 및 IDFV

AdSupport.framework가 앱에 포함된 경우, AppsFlyer가 자동으로 IDFA (광고주용 ID) 및 IDFV (벤더용 ID)를 수집합니다.

9. 옵션 기능

앱삭제 트래킹

사용 운영체제에 따라 다음의 앱삭제 관련 지침을 따르세요.

Android - Firebase Android - GCM iOS
1.  Unity Firebase SDK를 다운로드합니다: https://firebase.google.com/docs/unity/setup
2.  FirebaseMessaging.unitypackage 를 프로젝트로 가져옵니다.
3.  google-services.json을 프로젝트로 가져옵니다 (Firebase 콘솔에서 획득)

 참고

Manifest 리시버는 Unity Firebase SDK로 자동 추가되어야 합니다.


4.  AppsFlyer 코드를 다루는 Unity 클래스에 다음을 추가합니다:
Firebase.Messaging 사용;
Firebase.Unity 사용;

5.  Start() 메소드에 추가합니다:
Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;

6.  다음의 메소드를 추가합니다:
public void OnTokenReceived
(object sender, Firebase.Messaging.TokenReceivedEventArgs token) { AppsFlyer.updateServerUninstallToken (token.Token); }

 

  경고

Unity Firebase SDK를 구현하는 사용자는 enableUninstallTracking(“SenderID”)에 대한 메소드 호출을 추가하면 안됩니다. 왜냐하면 Firebase SDK는 앞에서 추가한 google-services.json 파일에서 발신자 ID를 획득하기 때문입니다. 이 메소드를 추가하면 안드로이드에서 디버그 경고가 발생할 수 있습니다.

푸쉬 노티피케이션 트래킹 

AppsFlyer는 리타게팅 캠페인의 일부로 푸쉬 노티피케이션을 측정할 수 있습니다.

handlePushNotification(Dictionary<string, string> payload)

데이터 페이로드는 관련 key-value 스트링과 함께 오브젝트 af를 포함해야 합니다.

:

\"data\": { \"score\": \"5x1\", \"time\": \"15:10\" , \"af\" : { \"c\" : \"test_campaign\" , \"is_retargeting\" : \"true\" , \"pid\" : \"push_provider_int\" } } }"[with deep-linking] \"data\": { \"score\": \"5x1\", \"time\": \"15:10\", \"click_action\" : \"com.example.someAction\" , 
\"af\" : { \"c\" : \"test_campaign\" , \"is_retargeting\" : \"true\" , \"pid\" : \"push_provider_int\" } } }"

 참고

푸쉬 알림 측정에 대한 더 자세한 내용은 여기에서 읽어볼 수 있습니다.

크로스 프로모션 트래킹 

Unity SDK(또는 다른 논네이티브 플랫폼)에서 크로스 프로모션 트래킹을 수행하려면 이것을를 구현하세요.

사용자 초대 트래킹

현재 Unity에서는 사용할 수 없습니다.

통화 코드 설정 

AppsFlyer로 전송된 각 인앱이벤트의 일부로 사용할 수 있는 특정 통화 코드 이외에도 다음 API를 이용해서 국제 통화 코드를 설정할 수 있습니다. 국제 통화 코드는 af_currency 경우에 사용됩니다.

AFInAppEvents.CURRENCY

인앱이벤트에 포함되어 전송되지 않습니다.

USD가 기본값입니다. 여기에서 허용 가능한 ISO 통화 코드를 찾아볼 수 있습니다.

통화 코드를 설정하려면 다음의 API를 사용하세요:

public void setCurrencyCode(String currencyCode);

사용 예:

setCurrencyCode(string currencyCode)

인앱 구매 검증

인앱 구매 영수증 검증에 대해서는, 운영체제에 따라 지침을 따르세요.

Android 호출 Listener 호출 (Android에 국한) iOS
//콜백 받기
//AppsFlyer.createValidateInAppListener ("AppsFlyerTrackerCallbacks", 
"onInAppBillingSuccess", "onInAppBillingFailure"); AppsFlyer.validateReceipt(string publicKey, string purchaseData,
string signature, string price, string currency, Dictionary additionalParametes);

유효한 구매 응답은 AppsFlyerTrackerCallbacks.cs 클래스에서 발생합니다

사용자 데이터 익명 처리

Appsflyer에는 특정 사용자의 식별자를 AppsFlyer 분석에서 익명 처리하는 메소드가 있습니다. 이 메소드는 최신 개인 정보 보호 요구 사항을 준수하며 Facebook 데이터 및 개인 정보 보호 정책을 준수합니다. 디폴트값은 익명 처리를 하지 않는 No입니다.

SDK를 초기화하는 동안 사용자의 설치, 이벤트, 세션의 익명 처리를 명시적으로 하려면 이 API를 사용하세요.

public void setDeviceTrackingDisabled(boolean isDisabled);

사용 예:

AppsFlyer.setDeviceTrackingDisabled(true);
deviceTrackingDisabledfalse로 설정하고 호출하면, 트래킹이 다시 시작됩니다.

  경고

사용자를 옵트아웃하면 어트리뷰션 정보가 심각하게 손상될 수 있습니다.
사용자 정보 수집이 법적으로 금지된 지역에서만 이 옵션을 사용하세요.

세션간 사용자정의 시간

현재 Unity에서는 사용할 수 없습니다.

유틸리티 앱을 위한 백그라운드 세션

현재 Unity에서는 사용할 수 없습니다.

다른 앱 스토어 앱 트래킹 

 참고

Google Play는 기본 스토어입니다. 만약 Google Play에서만 앱을 퍼블리싱한다면, 이 항목을 건너뛰세요.

Google Play가 아닌 곳에서의 설치를 트래킹하기 위해서는 앱의 AndroidManifest.xml 파일에 channel 또는 store 이름을 각 APK별로 설정합니다. CHANNEL 값은 대소문자를 구분합니다.

<:

<meta-data android:name="CHANNEL" android:value="Amazon" />
<meta-data android:name="CHANNEL" android:value="Standalone"/>
<meta-data android:name="CHANNEL" android:value="Verizon" />

 참고

앱을 설정할 때 AppsFlyer 대시보드의 CHANNEL 값을 구성해야 합니다.

메타 데이터 태그를 </application> 태그 앞에 놓습니다.

다른 앱스토어 설치 트래킹 방법에 대한 더 상세한 내용은 여기를 참고하세요.

옵트아웃

극단적인 경우 법률 및 개인 정보 보호 준수를 위해서 모든 SDK 트래킹을 중지해야 할 수도 있습니다. 이 작업은 isStopTracking API를 사용하여 수행할 수 있습니다. 이 API가 호출되면, SDK는 서버와 더 이상 통신하지 않고 기능이 중지될 것입니다.

AppsFlyer.stopTracking(true);

어떤 이벤트에서든 이 API를 false 값과 함께 호출하면 SDK를 다시 활성화할 수 있습니다.

  경고

특정 트래킹이나 모든 트래킹에서 사용자를 완전히 제외하려는 경우에만 이 API를 사용하세요. 이 API를 사용하면 보고 및 어트리뷰션에 심각한 영향을 줄 수 있습니다.

추가 데이터 설정

setAdditionalData API는 SDK 수준에서 Segment, Adobe 및 Urban Airship과 같은 몇몇 외부 파트너 플랫폼과 연동할 때 필요합니다. 이 API는 해당 플랫폼의 연동 관련 문서에서 setAdditionalData API가 필요하다고 특별히 명시된 경우에만 사용하세요.다음은 Unity에서 setAdditionalData를 구현하는 예시 코드입니다.

Dictionary<string, string> CustomDataMap = new Dictionary<string, string>();
CustomDataMap.Add("custom_param_1", "value_of_param_1");

AppsFlyer.setAdditionalData(CustomDataMap);

10. SDK 연동 테스트

운영체제에 따른 연동을 테스트하는 방법에 대한 지침은 Android 테스트 또는 iOS 테스트를 참고하세요.

11. Unity 샘플 프로젝트

Unity 샘플 프로젝트를 보려면 여기를 클릭하세요.

도움이 되었습니까?
3명 중 0명이 도움이 되었다고 했습니다.

댓글

댓글 0개

댓글을 남기려면 로그인하세요.

이 섹션의 문서