AppsFlyer SDK実装ガイド - Android

android.pngSDK Version:  4.8.9 (Release Notes)

1. 概要

AppsFlyerのSDKを利用すると、アプリのインストールやアプリ内イベントを計測することができます。弊社は、非常に堅牢、安全、軽量で、簡単に埋め込むことのできるSDKを開発しました(現在までに計測した70億以上のSDKインストールです)。

インストール、アップデート、セッションを計測し、また、アプリインストールに加えてアプリ内イベント(アプリ内購入、ゲームレベルなど)も計測して、ROIやユーザーエンゲージメントレベルを評価できます。

AppsFlyer Android SDKは、Android 2.3以降に対応しています。

AppsFlyerのAndroid SDK V.3.3.xから移行する場合、こちらをクリックしてください。

2. クイックスタート

2.1 SDKのダウンロード 

Android SDKのjarをダウンロードするには、こちらをクリックしてください。

AppsFlyerのサンプルアプリに関する詳細については、こちらをクリックしてください。

2.2. アプリへのSDKの埋め込み

AppsFlyerのSDKは、GradleのDependency Managementを使用して自動で連携するか、SDK.jarとして手動で連携することができます。

2.3 プロジェクトへのSDKの追加

GradleのDependency Managementを使用すると、最も簡単にSDKをプロジェクトに連携することができます。バージョン情報についてはこちらをご確認ください。

Gradleを使用しない場合、AF-Android-SDK.jarをダウンロードしてプロジェクトのクラスパスに追加します。

AppsFlyerのAndroid SDK Dependencyの追加:

  1.  プロジェクトを開き(または新しいプロジェクトを作成して)、your_app | build.gradleを開きます。
  2.  dependenciesの前にこれを/app/build.gradleモジュールレベルに追加します
repositories {
mavenCentral()
}


build.gradleファイルにコンパイル依存関係としてAppsFlyer SDKの最新バージョンを追加します: 

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 Install Referrer APIのサポートに必要となります。このAPIの使用によりアトリビューションの精度を高めたり、不正インストールなどから保護したりできます。
  • APIは、AppsFlyerのAndroid SDKバージョン4.8.6以降よりサポートされています。これよりも古いSDKバージョンから更新する場合、SDKのinitメソッドを更新して、この新しいdependencyの連携を完了します。
  • ProGuardを使用中で、Googleの新しいReferrer APIを使用したい開発者は、以下のProGuardルールを設定する必要があります。
    dontwarn-com.android.installreferrer
  • Gradle ビルドまたは AAR を使用していない開発者が、Google の新しいリファラ API を使用するには、com.android.installreferrer jar をファイルとして手動で追加し、次のアクセス許可を追加する必要があります。
    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 BroadcastReceiverのAndroidManifest.xmlへの設定

インストールリファラーブロードキャストレシーバーの実装には、次の2つのオプションがあります。

単体のブロードキャストレシーバーの使用複数のブロードキャストレシーバーの使用

AndroidManifest.xmlにINSTALL_REFERRERをリッスンするレシーバーがない場合、次のレシーバーをapplicationタグ内に追加します。

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

3. SDKの初期化

SDKの初期化は、2段階で完了します。第1段階では、Dev KeyがオプションのconversionDataListenerと共に提供されます。第2段階では、startTrackingの呼び出しにより、関連するすべての準備(例:setCustomerUserIdの呼び出し)が完了していることが示され、SDKはすべてのイベントの計測を開始できます。

SDKを初期化するには、次のコードをApplication 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の呼び出しを遅らせ、関連するActivity OnCreate()関数に配置することもできます。

 ヒント

dependancy:compile 'com.android.installreferrer:installreferrer:1.0'、およびメソッド:AppsFlyerLib.getInstance().init(AF_DEV_KEY, getConversionListener(), getApplicationContext());で渡されるgetApplicationContext()は、Googleの新しいReferrer APIをAppsFlyerにレポートするための前提条件となります。

Dev Keyは、管理画面の「設定」>「アプリ設定」ページからご確認いただけます。

このAPIによって、AppsFlyerでインストール、セッション、アップデートを検出できます。

4. アプリ内イベントの計測

アプリ内イベントは、アプリ内の動作に関するインサイトを提供します。ROI(投資収益率)やLTV(顧客生涯価値)を計測するためにも、計測したいアプリ内イベントを熟考されることをお勧めします。

アプリ内イベントの計測は、イベント名と値パラメーターを使用してtrackEventを呼び出すことで実行されます。詳細については、アプリ内イベント」ドキュメントを参照してください。

 

アプリ内イベント名は45文字以下である必要があります。日本語ではなく英数字でイベント名を定義することをお勧めします。イベント名が45文字を超える場合は管理画面に表示されず、ローデータ、Push API、Pull APIにのみ表示されます。

//context - ugetApplicationContext()を使用。
//eventNameは、イベント名を定義するいずれかの文字列。
//eventValuesは、リッチイベントを構成するイベントパラメータのマップ。 
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では、アプリ内イベント、またはAndroid SDKバージョン4.8.1を始めとする他のSDK APIて、英語以外の文字をサポートします。

5. ディープリンクの計測

 ヒント

アプリにディープリンクを連携することを強くお勧めします。ディープリンクはリターゲティングキャンペーンの重要な一部です。リターゲティングキャンペーンを実施する場合は、ディープリンクの使用を強くお勧めします。

ディープリンクに使用される場合がある各アクティビティ(必要に応じて主要アクティビティを含む)については、以下の行をonCreate()に追加します。

AppsFlyerLib.getInstance().sendDeepLinkData(this);

ディープリンクにより起動されるべきアクティビティには、以下の 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="android:scheme="" />
</intent-filter>


設定される
スキームは、トラッキングリンクに含まれるaf_dpの値と関連します。

ディープリンクデータを受け取るには、AppsFlyer SDKが呼び出すコールバックonAppOpenAttributionを実装する必要があります。これは、アプリを起動させるトリガーとして使用されるOnelink/トラッキングリンクの各パラメータを返します。その後、値を解析し、ロジックを適用することで関連アプリページをトリガーできます。

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レベルから直接、各新規インストールのユーザーアトリビューションデータにリアルタイムでアクセスできます。これにより、パーソナライズされたコンテンツを提供したり、アプリ内の特定のアクティビティに誘導したりして、ユーザーのアプリへのエンゲージメントを大きく高めることができます。

Android 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を設定すると、独自の一意のIDを、AppsFlyerの一意のIDや他のデバイスのIDと相互参照できるようになります。このIDは、ポストバックAPIとともにAppsFlyerのCSVレポートで確認でき、貴社の内部IDと相互参照することができます。

顧客ユーザーIDを設定するには:

public void setCustomerUserId(String id);


使用例:

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

 

customerUserIDは、trackAppLaunchの前に設定する必要があります。この設定後に計測したイベントにのみに顧客IDが紐づけられるため、顧客ユーザーIDはできる限り早い段階で設定することをお勧めします。また、顧客ユーザーIDは、MixpanelSwrveなどのアナリティクスプラットフォームとの連携を完了するためにも利用できます。

顧客ユーザーIDの詳細については、こちらをクリックしてくだい。

ユーザーメールの設定

AppsFlyerは、デバイスに関連付けられたメールアドレスを1つ以上レポートする機能を提供しています。メールアドレスを収集し、必要な暗号化方法に従ってAppsFlyerにレポートする必要があります。

利用可能な暗号化方法:Sha1、MD5、SHA256、プレーン

例:

public void setUserEmails(String... emails);


使用例:

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

 

メールアドレスなどの個人識別情報(PII)は、AppsFlyerによって保持されず、いずれのレポートにも表示されません。PIIの収集は、メディアソースへのポストバックを目的としてのみ行われます。

Googleの広告ID

SDKバージョン4.8.0以降、AppsFlyerはgoogle_advertising_idを自動的に収集します。Google Advertising IDを収集する要件は、バージョン4.7以前のSDKにのみ関連します。

IMEIとAndroid 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とAndroid IDの収集をオプトアウトすることができます。

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

 警告

適切なアトリビューションには、少なくとも一つのデバイス識別子、GAID、Android 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を使用すると、アプリ内のユーザー招待から発生したインストールの計測とアトリビューション分析を行うことができます。既存ユーザーが友人や連絡先をアプリの新規ユーザーとして招待できるようにすると、アプリの重要な成長要因となる場合があります。

詳細については、こちらから「ユーザー招待のトラッキング」に関する記事を参照してください。

通貨コードの設定 

AppsFlyerに送信される各アプリ内イベントの一部として使用できる特定の通貨コードに加えて、以下のAPIを使用して、グローバル通貨コードを設定することができます。グローバル通貨コードは、af_currency

AFInAppEventParameterName.CURRENCY

がアプリ内イベントの一部として送信されない場合に使用されます。

USD(米国ドル)がデフォルト値です。使用可能なISO通貨コードは、こちらで確認することができます。

通貨コードを設定するには、以下のAPIを使用します。

public void setCurrencyCode(String currencyCode);

使用例:

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

アプリ内購入検証

AppsFlyerのSDKは、アプリ内購入のサーバー検証を提供します。購入検証トラッキングを設定するには、onActivityResult関数内でvalidateAndTrackInAppPurchaseメソッドを呼び出します。

この呼び出しにより、「af_purchase」アプリ内イベントが自動的に生成されます。

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

この呼び出しには、「Success」と「Failure」(検証の失敗など、あらゆる理由によるもの)の2つのコールバックブロックがあります。

AppsFlyerLib.getInstance().registerValidatorListener(this,new
    AppsFlyerInAppPurchaseValidatorListener() {
         public void onValidateInApp() {
             Log.d(TAG, "Purchase validated successfully");
         }
         public void onValidateInApp() {
             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で2つの個別のセッションをカウントするには、各セッション間のデフォルトの間隔が5秒以上である必要があります。ユーザーがアプリを開くと、セッションが開始されます。各セッションの間隔を別の長さに設定するには、次のAPIを使用します。AppsFlyerLib.setMinTimeBetweenSessions(int seconds);

ユーティリティ系アプリ向けバックグラウンドセッション

アプリがバックグラウンドで実行されるユーティリティアプリの場合、このAPIをアクティビティのonCreate()で使用することができます。

public void reportTrackSession(Context context);


使用例:

AppsFlyerLib.getInstance().reportTrackSession(context);

ストア外アプリの計測 

 

Google Playがデフォルトのストアです。Google Playのみでアプリを公開する場合、このセクションはスキップしてください。

Google Play以外からのインストールを計測するには、各APKに固有のチャネルやストア名を使用して、アプリのAndroidManifest.xmlでチャネルまたはストアを設定します。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>タグの前にmeta-dataタグを配置します。

ストア外アプリのインストールを計測する方法の詳細については、こちらを参照してください。

オプトアウト

いくつかの極端なケースでは、法律とプライバシーの遵守のため、すべてのSDKトラッキングを停止する必要が出てくることがあります。この場合は、isStopTracking APIを使用できます。このAPIが呼び出されると、SDKはサーバーとの通信と動作を停止します。

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

任意のイベントで、同じAPIを呼び出すことにより、SDKを再アクティブ化することができますが、falseを渡す必要があります。

 警告

このユーザーをすべてのトラッキングで完全に無視する場合にのみ、このAPIを使用します。このAPIを使用することにより、レポートとアトリビューションに大きな影響があります。

customerUserIDのためのSDK初期化の遅延

customerUserIDが設定されるまで、SDKの初期化を遅らせることができます。この機能を使用すると、customerUserIDが指定されるまで、SDKは動作を開始しません。このAPIを使用する場合、customerUserIDが指定され、トラッキングされるまで、すべてのアプリ内イベントと他のSDK API呼び出しが破棄されます。

顧客ユーザーIDが指定されるまで、SDKの初期化を遅らせるには、init()メソッドの直前でAppsFlyerLib.getInstance().waitForCustomerUserId(true);を呼び出します。SDK初期化の残りの部分は変更しません。

customerUserIDが指定されたら、AppsFlyerLib.getInstance().setCustomerIdAndTrack("customer_id", this);を呼び出して、関連する顧客ユーザーIDをSDKに渡し、通常のトラッキングを開始するように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);
// Do your magic to get the customerUserID
       // ...
       // any AppsFlyer SDK code invoked here will be discarded
      //Call the following API once the customerUserID is available:
 AppsFlyerLib.getInstance().setCustomerIdAndTrack("customer_id",this);
   }
}

 警告

ビジネスロジックに適している場合に限り、このAPIを使用してください。このAPIを使用すると、数値の乖離が発生する可能性が高くなるだけでなく、アプリに対して不正が行われる可能性も高くなります。

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.*
この記事は役に立ちましたか?
10人中8人がこの記事が役に立ったと言っています

コメント

0件のコメント

ログインしてコメントを残してください。