AppsFlyer SDK 연동 - Unity

Official_unity_logo.png

Current Unity SDK Version:  v4.17.0
Compatible with Android SDK v4.8.13 and iOS SDK v4.8.7

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 버전 이상으로 업데이트하세요.

 Tip

  • Chapters 2 and 3 are MANDATORY to implement BASIC SDK integration, i.e. install attribution only
  • Tracking in-app events chapter is HIGHLY RECOMMENDED to implement
  • The rest of the described features are OPTIONAL to implement, although some of them may be necessary for you, depending on your app's business logic. For example, tracking revenue or getting the conversion data on first launch may be vital for your app's flow

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 리시버 및 사용 권한 설정:

<!-- receiver should be inside the <application> tag -->
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
        <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
        </intent-filter>
</receiver>
<!-- Mandatory permission: -->
<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");
/* 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_APPSFLYER_DEV_KEY","AppsFlyerTrackerCallbacks");
#endif
}

 중요!

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

4. 인앱이벤트 트래킹

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

Tracking in-app events is performed by calling trackRichEvent with event name and value parameters. See In-App Events documentation for more details.

 참고

인앱이벤트 이름은 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. Tracking Deep Linking

For deep linking, follow the instructions according to your operating system.

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

 중요!

Do NOT format the revenue value in any way. It should not contain comma separators, currency sign, or text. A revenue event should be similar to 1234.56, for example.

7. 전환 데이터 받기

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

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

  1. Empty GameObject를 추가합니다.
  2. 이것을 프로젝트에 포함되어 있는 AppsFlyerTrackerCallbacks.cs에 추가합니다. (이 게임오브젝트는 반드시 AppsFlyerTrackerCallbacks 명명을 해주어야 합니다).
Android Unity Plugin > 4.15.1 Android Unity Plugin < 4.14.3 iOS
/*For getting the conversion data in Android, you need to add this listener. to the 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를 획득하기 때문입니다. 이 메소드를 추가하면 안드로이드에서 디버그 경고가 발생할 수 있습니다.

Tracking Push Notifications

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

 참고

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

Cross Promotion Tracking

AppsFlyer allows you to track and attribute installs originating from a cross promotion of one of your apps from within the current app the user has. Cross promoting apps can be a major growth factor in driving additional installs for your apps.

For details, see the Cross Promotion Tracking article, here.

사용자 초대 트래킹

AppsFlyer allows you to track and attribute installs originating from user invites within your app. Allowing your existing users to invite their friends and contacts as new users to your app can be a key growth factor for your app.

For details, see the User Invite Tracking article, here.

Set Currency Code

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로 설정하고 호출하면, 트래킹이 다시 시작됩니다.

  경고

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

세션간 사용자정의 시간

By default, at least 5 seconds must lapse between 2 app launches to count as separate 2 sessions (more about counting sessions). 
However, you can use the following API to set your custom value for the minimum required time between sessions:
setMinTimeBetweenSessions(int seconds)


Usage Example:

AppsFlyer.setMinTimeBetweenSessions(10);

Note that setting a high value to the custom time between launches may badly impact APIs relying on sessions data, such as deep linking.

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

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

Track Out-of-Store Apps

 참고

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

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

Examples:

<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> 태그 앞에 놓습니다.

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

Opt-Out

In some extreme cases you might want to shut down all SDK tracking due to legal and privacy compliance. This can be achieved with the isStopTracking API. Once this API is invoked, our SDK no longer communicates with our servers and stops functioning.

AppsFlyer.stopTracking(true);

In any event, the SDK can be reactivated by calling the same API, by passing false.

There are several different scenarios for user opt-out. We highly recommend following the exact instructions for the scenario, that is relevant for your app.

  경고

특정 트래킹이나 모든 트래킹에서 사용자를 완전히 제외하려는 경우에만 이 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);

Attribution for Pre-Installed Apps

Android Only

You can programatically set a pre-installed media source, from Unity, using the following API:

setPreinstallAttribution(string MediaSource, string Campaign, string Site_Id);

For details on native implementations, click here.

 중요!

AppsFlyer Unity SDK 사용 시 다음의 구문 사용을 피하세요.

PlayerPrebs.DeleteAll()

10. SDK 연동 테스트

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

Now you can start tracking the media sources you work with.

11. Known Issues

ProGuard

If you are using ProGuard for Android and you encounter a warning regarding our AFKeystoreWrapperclass, then add the following code to your ProGuard rules file:

-keep class com.appsflyer.** { *; }

IL2CPP

To exclude our SDK from the Managed bytecode stripping with IL2CPP, add the following to the link.xml:

<linker>
    <assembly fullname="mscorlib">
        <type fullname="AppsFlyer.*" preserve="all"/>
    </assembly>
…
</linker>

12. Unity Sample Project

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

도움이 되었습니까?
6명 중 2명이 도움이 되었다고 했습니다.

댓글

댓글 0개

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

이 섹션의 문서