AppsFlyer SDK 연동 - 안드로이드

android.pngSDK Version:  4.8.9 (Release Notes)

1. 개요

AppsFlyer SDK는 앱 설치 및 이벤트를 트래킹하는 기능을 제공합니다. 지금까지 70억 건 이상 설치되었으며, 매우 강력하고 안전하며 가벼우면서도 임베드하기 쉽도록 개발되었습니다.

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

AppsFlyer 안드로이드 SDK는 안드로이드 2.3 버전 이상과 호환됩니다.

AppsFlyer 안드로이드 SDK V.3.3.x에서 마이그레이션하는 경우는 여기를 클릭하세요.

2. 빠른 시작

2.1 SDK 다운로드 

안드로이드 SDK jar를 다운로드하려면 여기를 클릭하세요.

AppsFlyer 샘플 앱에 대한 자세한 내용은 여기를 클릭하세요.

2.2 앱에 SDK 임베딩하기

Gradle의 Dependency Management 를 사용하면서 AppsFlyer SDK를 자동으로 연동할 수도 있고, SDK.jar를 사용하여 수동으로 연동할 수도 있습니다.

2.3 프로젝트에 SDK 추가하기

SDK를 연동하는 가장 쉬운 방법은 Gradle의 Dependency Management를 사용하는 것입니다. 버전 정보는 여기에서 확인할 수 있습니다.

Gradle을 사용하지 않는 경우에는 AF-Android-SDK.jar를 다운로드하여 프로젝트 클래스 경로에 추가합니다.

AppsFlyer의 안드로이드 SDK Dependency 추가하기:

  1.  프로젝트를 열거나 새 프로젝트를 만들고, your_app | build.gradle을 엽니다.
  2.  모듈 레벨 /app/build.gradle 파일의 dependencies 앞에 다음 코드를 추가합니다.
repositories {
mavenCentral()
}


build.gradle 파일에 최신 버전 AppsFlyer SDK compile dependancy를 추가하세요. 

dependencies {
compile 'com.appsflyer:af-android-sdk:4+@aar'
compile 'com.android.installreferrer:installreferrer:1.0'
}

 중요!

  • 'com.android.installreferrer:installreferrer:1.0' Dependency는 Google Play 설치 리퍼러 API(referrer API)를 지원하기 위해서 필요합니다. 이 API를 사용하여 어트리뷰션의 정확도를 높일 수 있고, Install Fraud로부터 보호할 수 있습니다.
  • 이 API는 AppsFlyer 안드로이드 SDK 4.8.6 버전 이상에서 지원합니다. 이전 버전의 SDK로부터 업데이트하는 경우에는 SDK의 init 메소드를 업데이트하여 새 Dependency 연동을 완료합니다.
  • ProGuard를 사용하고 Google의 새로운 리퍼러 API를 사용하려면 다음의 ProGuard 규칙을 설정해야 합니다.
    -dontwarn com.android.installreferrer
  • Gradle 빌드나 aar을 사용하지 않고 Google의 새 리퍼러 API를 사용하려면 com.android.installreferrer jar 파일을 수동으로 추가하고 다음 권한 (permission)이 추가되었는지 확인해야 합니다.
    com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE

2.4 필요 권한 설정

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

2.5 AndroidManifest.xml 파일에서 BroadcastReceiver 설정

설치 Broadcast Receiver는 다음 두가지 방법으로 구현할 수 있습니다.

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

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>

3. SDK 초기화

Initialization of the SDK is completed in two stages. In the first stage the DevKey is supplied along with your app ID and an optional conversionDataListener. In the second stage the call to startTracking indicates that all relevant preparations are complete (e.g. call setCustomerUserId) and the SDK can start tracking all events.

SDK를 초기화하려면 앱의 onCreate() 안에 다음 코드를 추가합니다.

public class AFApplication extends Application {
   private static final String AF_DEV_KEY = "<your-appsflyer-dev-key>";
   @Override
   public void onCreate() {
       super.onCreate();
       AppsFlyerConversionListener conversionDataListener =
new AppsFlyerConversionListener() {
           ...
       };
AppsFlyerLib.getInstance().init(AF_DEV_KEY, conversionDataListener, getApplicationContext());
       AppsFlyerLib.getInstance().startTracking(this);   }
}

 참고

다른 방법으로는 startTracking 호출을 나중으로 미루고, 관련 액티비티의 OnCreate() 기능 안에 넣을 수도 있습니다.

 

다음의 dependancy compile 'com.android.installreferrer:installreferrer:1.0'AppsFlyerLib.getInstance().init(AF_DEV_KEY, getConversionListener(), getApplicationContext()); 메소드로 전달한 getApplicationcontext()는 AppsFlyer에 Google의 새로운 리퍼러 API를 보고하는 전제 조건입니다.

Dev key는 AppsFlyer 대시보드의 Configuration 항목 아래 Apps Settings 에서 액세스할 수 있습니다.

이 API로 AppsFlyer가 설치, 세션, 업데이트를 감지할 수 있습니다.

4. 인앱이벤트 트래킹

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

이벤트 이름과 이벤트 값 파라미터와 함께 trackEvent를 호출하면 인앱이벤트 트래킹이 실행됩니다. 더 자세한 내용은 인앱이벤트문서에서 확인할 수 있습니다.

 참고

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

//context - use getApplicationContext()
//eventName is any string to define the event name.
//eventValues is a map of event parameters that comprise a rich event.  
public static void trackEvent(Context context, String eventName, Map eventValues);


: 레벨 달성 인앱이벤트

Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.LEVEL,9);
eventValue.put(AFInAppEventParameterName.SCORE,100);
AppsFlyerLib.getInstance().trackEvent(context,AFInAppEventType.LEVEL_ACHIEVED,eventValue);
 

이 코드는 af_level_achieved 타입의 이벤트를 다음 이벤트 값과 함께 생성합니다.
{af_level: 9, af_score: 100}

 참고

  • AppsFlyer는 안드로이드 SDK 버전 4.8.1부터 인앱이벤트나 다른 SDK API에서 표준 영문자가 아닌 문자도 사용할 수 있도록 지원합니다.
  • Do not to add any currency symbol or decimal points to the figures, as these are not recognized.

 Usage Example

Map<String,Object> eventValues = new HashMap<>();
eventValues.put(AFInAppEventParameterName.REVENUE, "1200");
eventValues.put(AFInAppEventParameterName.CURRENCY, "JPY");
        
AppsFlyerLib.getInstance().trackEvent(this, AFInAppEventType.PURCHASE, eventValues);

5. 딥 링킹 트래킹

 

앱에서 딥 링킹 연동을 하는 것을 강력하게 추천합니다. 딥 링킹은 리타게팅 캠페인의 중요한 부분이며, 리타게팅 캠페인을 실시할 때에 반드시 사용하도록 권장합니다.

딥 링킹에서 사용될 각 액티비티에 대해서(필요시, 메인 액티비티 포함) onCreate() 안에 다음 라인을 추가하세요.

AppsFlyerLib.getInstance().sendDeepLinkData(this);

딥 링킹에서 열리는 액티비티는 manifest 파일의 액티비티 정의에 아래와 같은 인텐트 필터(intent filter)를 포함해야 합니다. 

<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="yourUniquescheme" />
</intent-filter>


Scheme는 트래킹 링크에 포함시킨 af_dp 값과 관련있습니다.

딥 링크 데이터를 받으려면 AppsFlyer SDK가 호출하는 onAppOpenAttribution 콜백을 구현해야 합니다. 이것은 앱을 여는 원링크/트래킹 링크 파라미터를 반환합니다. 이 값을 분석한 후, 관련 앱 페이지를 열 때 이 논리를 적용할 수 있습니다.

void onAppOpenAttribution(Map<String,String> attributionData);

더 자세한 정보는 여기를 클릭하거나 전환 데이터 획득 섹션에서 확인할 수 있습니다.

6. 수익 트래킹

Use the af_revenue (AFInAppEventParameterName.REVENUE) event parameter to count revenue as part of an in-app event. You can populate it with any numeric value, positive or negative.

 참고

af_revenue is the ONLY event parameter that is counted on AppsFlyer as real revenue on the raw data and dashboard. For more details please click here.

: 인앱이벤트 수익

Map<String, Object> eventValue = new HashMap<String, Object>();
eventValue.put(AFInAppEventParameterName.REVENUE,200);
eventValue.put(AFInAppEventParameterName.CONTENT_TYPE,"category_a");
eventValue.put(AFInAppEventParameterName.CONTENT_ID,"1234567");
eventValue.put(AFInAppEventParameterName.CURRENCY,"USD");
AppsFlyerLib.getInstance().trackEvent(context,AFInAppEventType.PURCHASE,eventValue);

위 코드는 다음 이벤트 값과 함께 af_purchase 타입의 이벤트를 생성합니다.

{af_content_id: “1234567”, af_content_type: “category_a”, af_revenue: 200, af_currency: “USD”}

이 구매 이벤트는 $200 수익이 포함되고, 대시보드에 수익으로 표시됩니다. 

 참고

인앱 구매를 위한 사용자 현지 통화 코드 설정 - 통화 코드는 3 문자의 ISO 4217 코드입니다. (기본값 USD) 

다음 메소드를 호출하면 모든 이벤트의 통화 코드를 설정할 수 있습니다. AppsFlyer.setCurrencyCode("GBP");

7. 전환 데이터 가져오기

AppsFlyer에서는 SDK 레벨에서 모든 신규 설치의 사용자 어트리뷰션 데이터를 실시간으로 직접 액세스할 수 있습니다. 이를 통해서 사용자에게 맞춤형 콘텐츠를 제공하거나 앱 내부의 특정 액티비티를 전송하여 앱에 대한 사용자의 인게이지먼트를 높일 수 있습니다.

안드로이드 SDK에서 AppsFlyer의 전환 데이터에 액세스하기 위해서는 ConversionDataListener를 구현해야 합니다.

public interface AppsFlyerConversionListener {
       void onInstallConversionDataLoaded(Map<String,String> conversionData);
       void onInstallConversionFailure(String errorMessage);
}


예시:

AppsFlyerLib.getInstance().registerConversionListener(this, new AppsFlyerConversionListener() {
  @Override
  public void onInstallConversionDataLoaded(Map<String, String> conversionData) {
      for (String attrName : conversionData.keySet()) {
          Log.d(AppsFlyerLib.LOG_TAG, "attribute: " + attrName + " = " + conversionData.get(attrName));
      }
  }
  @Override
  public void onInstallConversionFailure(String errorMessage) {
      Log.d(AppsFlyerLib.LOG_TAG, "error getting conversion data: " + errorMessage);
  }
  @Override
  public void onAppOpenAttribution(Map<String, String> conversionData) {
  }
  @Override
  public void onAttributionFailure(String errorMessage) {
      Log.d(AppsFlyerLib.LOG_TAG, "error onAttributionFailure : " + errorMessage);
  }
}); 

8. 사용자 식별자

AppsFlyer 기기 ID 가져오기

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

public String getAppsFlyerUID(Context context);


사용 예:

String appsFlyerId = AppsFlyerLib.getInstance().getAppsFlyerUID(this);

고객 사용자 ID 설정

고객 ID를 설정하면 AppsFlyer의 고유 ID 및 다른 장치의 ID와 함께 이 고유한 ID를 상호 참조할 수 있게됩니다. 이 ID는 내부 ID와 상호 참조할 수 있도록 포스트백 API와 AppsFlyer CSV 보고서에 보여집니다.

고객 사용자 ID를 설정하려면 다음 코드를 사용하세요.

public void setCustomerUserId(String id);


사용 예:

AppsFlyerLib.getInstance().setCustomerUserId("myId");

 참고

customerUserID는 trackAppLaunch 보다 먼저 설정되어야 합니다. 고객 사용자 ID는 설정 후에 보고된 이벤트에만 적용되므로 되도록 빨리 설정하는 것을 권장합니다. 또한 고객 사용자 ID는 MixpanelSwrve와 같은 어낼리틱스 플랫폼과 연동할 때도 사용됩니다.

고객 사용자 ID에 대한 더 자세한 정보는 여기를 클릭하세요.

사용자 이메일 설정

AppsFlyer에서는 하나 이상의 기기와 연결된 이메일 주소를 보고할 수 있습니다. 이메일 주소를 수집한 후, 지정된 암호화 방식에 따라 AppsFlyer에 보고해야 합니다.

SHA1, MD5, SHA256, 그리고 평문의 암호화 방식을 지원합니다.

예:

public void setUserEmails(String... emails);


사용 예:

AppsFlyerLib.getInstance().setUserEmails(AppsFlyerProperties.EmailsCryptType.MD5, "email1@domain.com","email2@domain.com", ….);

 참고

AppsFlyer는 이메일 주소와 같은 개인 식별 정보(Personally Identifiable Information, PII)를 보관하지 않고, 어떤 보고서에도 이 정보를 표시하지 않습니다. 이 정보는 미디어 소스로 포스트백을 하기 위한 목적으로만 수집합니다.

Google 광고 ID

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

IMEI 및 안드로이드 ID

By default, IMEI and Android ID are not collected by the SDK if the OS version is higher than KitKat (4.4) and the device contains Google Play Services (on SDK versions 4.8.8 and below the specific app needed GPS). 

이 ID들을 AppsFlyer에 확실하게 전송하려는 경우에는 다음 API를 사용할 수 있습니다.

AppsFlyerLib.getInstance().setImeiData("IMEI_DATA_HERE");
AppsFlyerLib.getInstance().setAndroidIdData("ANDROID_ID_DATA_HERE");

If the app does NOT contain Google Play Services, the IMEI and Android ID are collected by the SDK. However, apps with Google play services should avoid IMEI collection as this is in violation of the Google Play policy.

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

AppsFlyerLib.getInstance().setCollectIMEI(false);
AppsFlyerLib.getInstance().setCollectAndroidID(false);

 주의

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

9. 옵션 기능

앱삭제 트래킹

AppsFlyer에서 앱삭제를 트래킹할 수 있습니다.

이 프로세스를 모두 정확하게 완료하기 위해서는 여기를 읽으세요.

푸쉬 알림 트래킹 

AppsFlyer는 리타게팅 캠페인의 하나로 푸쉬 알림을 측정할 수 있습니다.

이 기능을 사용하기 위해서는 알림을 클릭하면 실행되는 각 액티비티의 onCreate 메서드 안에서 다음 메서드를 호출하세요.

AppsFlyerLib.getInstance().sendPushNotificationData(this);

데이터 페이로드는 관련 키-값 스트링과 함께 오브젝트 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\" } } }"

 참고

푸쉬 알림 측정에 대한 더 자세한 정보는 여기 읽으세요.

크로스 프로모션 트래킹 

AppsFlyer는 사용자가 기존에 가지고 있던 앱 중 하나의 크로스 프로모션에서 발생한 인스톨을 트래킹하고 어트리뷰션을 측정할 수 있습니다. 크로스 프로모션 앱은 앱의 추가 인스톨을 유도하는 주요 성장 요소가 될 수 있습니다.

자세한 내용은 여기에서 크로스 프로모션을 확인할 수 있습니다.

사용자 초대 트래킹

AppsFlyer는 앱에서 초대한 사용자의 인스톨을 트래킹하고 어트리뷰션을 측정할 수 있습니다. 기존 사용자가 친구나 아는 사람을 앱의 신규 사용자로 초대하도록 하는 것은 앱의 추가 인스톨을 유도하는 핵심 성장 요소입니다.

자세한 내용은 여기에서 사용자 초대 트래킹을 확인할 수 있습니다.

통화 코드 설정 

다음 API를 사용하여 국제 통화 코드를 설정할 수 있고, AppsFlyer로 전송되는 인앱이벤트를 사용하여 특정 통화 코드를 설정할 수도 있습니다. 인앱이벤트로 af_currency가 전송되지 않으면

AFInAppEventParameterName.CURRENCY

국제 통화 코드가 사용됩니다.

기본값은 USD입니다. 사용 가능한 ISO 통화 코드는 여기에서 확인할 수 있습니다.

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

public void setCurrencyCode(String currencyCode);

사용 예:

AppsFlyerLib.getInstance().setCurrencyCode("GBP");

인앱 구매 검증

AppsFlyer SDK는 인앱 구매에 대해서 서버 확인 기능을 제공합니다. 구매 검증 트래킹을 설정하려면 onActivityResult function에서 validateAndTrackInAppPurchase 메서드를 호출합니다.

이 호출은 자동으로 af_purchase 인앱이벤트를 생성합니다.

public static void validateAndTrackInAppPurchase(
                     Context context,
                     String publicKey,
                     String signature,
                     String purchaseData,
                     String price,
                     String currency,
                     HashMap<String, String> additionalParameters);

이 호출은 '성공'한 경우와 검증 실패 등의 원인으로 '실패'한 경우에 대한 두 개의 콜백 블록을 가집니다.

AppsFlyerLib.getInstance().registerValidatorListener(this,new
    AppsFlyerInAppPurchaseValidatorListener() {
         public void onValidateInApp() {
             Log.d(TAG, "Purchase validated successfully");
         }
         public void onValidateInAppFailure(String error) {
             Log.d(TAG, "onValidateInAppFailure called: " + error);
         }
     });


사용 예:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  if (requestCode == 1001) {
      String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
      String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
      if (resultCode == RESULT_OK) {
          HashMap<String,String> event = new HashMap<>();
          event.put(AFInAppEventParameterName.PRICE,"9");
          AppsFlyerLib.getInstance().validateAndTrackInAppPurchase(getApplicationContext(),publicKey, dataSignature, purchaseData, "3.00", "ILS", event);
      }
  }
} 

사용자 데이터 익명 처리

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

사용자의 설치, 이벤트, 세션의 익명 처리를 확실하게 하기 위해서는 SDK를 초기화할 때 다음 API를 사용하세요.

public void setDeviceTrackingDisabled(boolean isDisabled);


사용 예:

AppsFlyerLib.getInstance().setDeviceTrackingDisabled(true);

deviceTrackingDisabledfalse로 설정하고 다시 호출하면, 트래킹을 다시 시작할 수 있습니다.

 주의

사용자를 익명 처리하면 어트리뷰션 정보에 심각한 영향을 줄 수 있습니다.사용자 정보 수집이 법적으로 금지된 지역에서만 이 옵션을 사용하세요.

세션 사이 시간의 사용자정의

AppsFlyer에서 두 개의 별도 세션을 계산하려면 각 세션 사이의 기본 시간이 적어도 5초 이상이 되어야 합니다. 세션은 사용자가 앱을 열었을 때 시작됩니다. 세션 사이의 시간을 다르게 설정하려면 다음 API를 사용하세요. AppsFlyerLib.setMinTimeBetweenSessions(int seconds);

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

백그라운드에서 작동하는 유틸리티 앱인 경우에는 액티비티의 onCreate() 안에서 다음 API를 사용할 수 있습니다.

public void reportTrackSession(Context context);


사용 예:

AppsFlyerLib.getInstance().reportTrackSession(context);

다른 스토어 앱 트래킹 

 참고

기본 스토어는 Google Play입니다. 만약 Google Play에서만 앱을 출시하는 경우는 이 항목을 건너뜁니다.

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

:

<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 대시보드에서 앱을 설정할 때 채널 값을 구성해야 합니다.

meta-data 태그를 </application> 태그 앞에 놓습니다.

스토어를 통하지 않는 앱의 인스톨 트래킹에 대한 더 자세한 내용은 여기에서 확인하세요.

옵트아웃

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

AppsFlyerLib.getInstance().stopTracking(true, context);

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

 주의

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

고객 사용자 ID (Customer User ID)를 위한 SDK 초기화 지연

customerUserID가 설정될 때까지 SDK 초기화를 지연시킬 수 있습니다. 이 기능은 customerUserID를 얻기 전까지 SDK가 동작을 시작할 수 없도록 합니다. 이 API를 사용하면 customerUserID를 얻고 트래킹을 시작하기 전까지 모든 인앱이벤트 및 기타 SDK API 호출이 무시됩니다.

고객 사용자 ID를 얻기 위하여 SDK의 초기화 지연이 필요하면 init() 메소드 바로 앞에서 AppsFlyerLib.getInstance().waitForCustomerUserId(true);를 호출합니다. SDK 초기화의 나머지 부분은 변경되지 않아야 합니다.

customerUserID를 얻고 난 후, AppsFlyerLib.getInstance().setCustomerIdAndTrack("customer_id", this );를 호출하여 SDK에 관련 고객 사용자 ID를 제공하고, SDK가 정상적인 트래킹을 시작하도록 합니다.

코드는 다음과 같이 작성되어야 합니다.
public class AFApplication extends Application {
   private static final String AF_DEV_KEY = ;
   @Override
   public void onCreate() {
       super.onCreate();
       AppsFlyerConversionListener conversionDataListener = 
 new AppsFlyerConversionListener() {
           ...
       };
 AppsFlyerLib.getInstance().waitForCustomerUserId(true); 
       AppsFlyerLib.getInstance().init(AF_DEV_KEY, getConversionListener(), getApplicationContext());
 AppsFlyerLib.getInstance().startTracking(this);
       // customerUserID를 얻는 코드를 구현하세요. 
 // ...
 // 여기서 호출되는 모든 AppsFlyer SDK 코드는 무시됩니다.
 //customerUserID를 사용할 수 있게 되면 다음의 API를 호출하세요:
 AppsFlyerLib.getInstance().setCustomerIdAndTrack( "customer_id", this);⏎ }⏎}

 주의

이 API는 비즈니스 로직에 적합한 경우에만 사용하세요. 이 API를 사용하면 Discrepancy가 발생할 가능성이 커지고 앱이 fraud에 더 노출될 수도 있습니다.

Setting Additional Data

The setAdditionalData API is required to integrate on the SDK level with several external partner platforms, including Segment, Adobe and Urban Airship. Use this API only if the integration article of the platform specifically states setAdditionalData API is needed.
The following is a code example for implementing setAdditionalData on Android:

HashMap<String,Object> CustomDataMap = new HashMap<>();
CustomDataMap.put("custom_param_1","value_of_param_1");
AppsFlyerLib.getInstance().setAdditionalData(CustomDataMap);

10. SDK 연동 테스트

Google Play 스토어에 제출하기 전이나 제출한 후에 SDK 연동을 테스트하려면 여기를 클릭하세요.

11. 알려진 문제

ProGuard를 사용하고 있으며 AFKeystoreWrapper 클래스에 관한 경고를 받았다면, ProGuard 규칙 파일에 다음 코드를 추가하세요.

-dontwarn com.appsflyer.*
도움이 되었습니까?
13명 중 11명이 도움이 되었다고 했습니다.

댓글

댓글 0개

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