AppsFlyer SDK実装ガイド - Android

現在のバージョン:4.7.3

注:今回の変更はメジャーバージョン変更にあたるため、本ドキュメントをよくお読み頂き、すべての変更点について必ずご承知ください。V.3.3.xから4.6.7への移行詳細についてはこちらをご確認ください。

AppsFlyerのSDKはアプリのインストールとイベント計測機能を提供しています。非常に堅牢(現在まで70億以上のSDKのインテグレーションが行われています)で、セキュリティ度が高く、軽量でとても埋め込みが簡単です。

インストール、アップデートそしてセッション(以下の必須のステップをたどる必要があります)を測定することができます。また、インストールに留まらないアプリ実装後のアプリ内イベント(アプリ内購入、ゲームレベル等)を計測し、ROIとユーザーエンゲージメントレベルを評価することができます。

必須事項は以下の2章と3章となります。任意で追加実装して頂く機能については、4章及び5章をご参照ください。

AppsFlyer Android SDKはAndroid 2.3 以上に対応しております。

本インテグレーションガイドにてカバーしているセクションは以下となります。

  • Android SDKダウンロード
  • 本バージョンでの更新点
  • SDKのアプリへの埋め込み(必須)
  • SDKの初期化およびインストールイベント(計測に最低限必要な手順)
  • アプリ内イベントの計測API(任意)
  • 上級インテグレーション
  • SDK導入テストの実施

Android SDKダウンロード

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

AppsFlyerのサンプルアプリの詳細はこちらをご確認ください。

1.  本バージョンでの変更点

  • ProGuardが原因で表示される警告を修正

2.  アプリへのSDK埋め込み(必須)

次のステップがインストール及びセッションを計測するための必須事項です。

AppsFlyerのSDKはビルドシステムにGradleを使用されている場合は自動で、または手動にてSDK.jarを配備して頂くことで導入できます。

2.1  AppsFlyer SDKをプロジェクトに追加する

SDKをプロジェクトに最も簡単に導入するには、GradleのDependency Managementをご利用ください。

AppsFlyerのAndroid SDK Dependencyを追加する:

  1. プロジェクトを開き(または新しいプロジェクトを作成)、your_app | build.gradle を開きます。

2.  dependenciesの前に以下のコードを/app/build.gradleのモジュールレベルに追加してください。

repositories {
	mavenCentral() 
}

3.  build.gradleファイルにコンパイル依存情報としてAppsFlyer SDKの最新バージョンを追加してください。

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

バージョン情報についてはこちらをご確認ください。

ここまででAppsFlyerのSDKがプロジェクトに読み込まれておりますので、引き続き本ガイドに従い実装してください。

import com.appsflyer.AppsFlyerLib

Gradleを使用されない場合は、プロジェクトのクラスパスにAF-Android-SDK.jarを追加してください。

2.2  必須パーミッションを設定する

AndroidManifest.xmlに以下のパーミッションを設定してください。

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

ACCESS_WIFI_STATEとREAD_PHONE_STATE* パーミッションは任意です。

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

*このパーミッションはIMEIを計測するのために必要です。

2.3  AndroidManifest.xmlにReferrer Broadcast Receiver を設定する

Androidアプリは同一のintent-filterタグのaction要素で複数のレシーバーを設定することができません。

以下2つの方法でinstall referrer broadcast receiverを設定することができます。

2.3.1  複数のBroadcast Receiverを使用する

AppsFlyerはINSTAll_REFERRERを自動的に他のすべてのレシーバーにブロードキャストするソリューションを提供しています。AndroidManifest.xml内で、次のレシーバーをINSTALL_REFERRERの最初のレシーバーとして追加し、receiverタグがapplicationタグ内にあることを確認してください。

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

複数のレシーバーを使用する場合は、Manifest.xmlを次のように設定してください。

<!—The AppsFlyer Install Receiver is first and will broadcast to all receivers placed below it -->
<receiver android:name="com.appsflyer.MultipleInstallBroadcastReceiver" android:exported="true">
  <intent-filter>
     <action android:name="com.android.vending.INSTALL_REFERRER" />
  </intent-filter>
</receiver>
<!—All other receivers should follow right after -->     
<receiver android:name="com.google.android.apps.analytics.AnalyticsReceiver" android:exported="true">
 <intent-filter>
      <action android:name="com.android.vending.INSTALL_REFERRER" />
 </intent-filter>
</receiver>
<receiver android:name="com.admob.android.ads.analytics.InstallReceiver" android:exported="true">
      <intent-filter>
          <action android:name="com.android.vending.INSTALL_REFERRER" />
      </intent-filter>
</receiver>

2.3.2  単体のBroadcast Receiverを使用する

AndroidManifest.xmlにて、次のレシーバーをINSTALL_REFERRERの最初のレシーバーとして、あるいは別の複数Broadcast Receiverの後に追加してください。このとき、receiverタグがapplicationタグ内に設定されていることを確認してください。

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

アプリコンテキストからアプリインストールデータにアクセスするためのレシーバーを更に追加する方法については、こちらをご確認ください。

2.4  アプリにGoogle Play Servicesを埋め込む

Google Advertising ID(GAID)を取得することは、Facebook、Google、Twitterを含むいくつかのチャネルを経由したキャンペーンをトラッキングするために必須となります。

Google Advertising IDの追加方法は以下のとおりです:

  1. Google Play Services SDKをインストールしてプロジェクトにインポートします。ダウンロードの詳細はこちらをご確認ください。
  2. mlに次のエントリを、application内の最後のエントリ(</application>の直前)として追加してください。
<meta-data android:name="com.google.android.gms.version"
android:value="@integer/google_play_services_version" />

注記:

  • AppsFlyerはGoogle Advertising IDを取得するためにGoogle Play Servicesライブラリを使用します。
  • GCM Registration Token (アンインストール計測に使用)向けには、Google Play Services 7.5 が最低限必要です。AppsFlyerでは常に最新バージョンの利用を推奨しています。

このライブラリはその他の追加サービスを提供していますが、ビルドプロセスの中でProGuardを使うとフットプリントが軽くなります。弊社ではGoogle Serviceから広告パッケージのみを使用します。プロジェクトのサイズを最適化したい場合は、その他のパッケージを省いてください。

詳細は以下を参照ください:https://developers.google.com/android/guides/setup

ソース:https://developer.android.com/google/play-services/setup.html 

2.5  Android ID及びIMEIを収集する

デフォルトでは、OSバージョンがKitKat (4.4) 以上でアプリにGoogle Play Servicesを含んでいる場合、IMEIとAndoid IDはSDK経由では取得されません

明示的にこれらのIDをAppsFlyerに送るためには、次のAPIを使用してください。

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

もしアプリがGoogle Play Servicesを含んでいない場合は、IMEI及びAndroid IDはSDK経由で取得されます。

以下のAPIによって、IMEI及びAndroid IDの収集をオプトアウトすることもできます。

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

注:適切なアトリビューションのために、少なくとも1個のデバイスIDを取得することをおすすめします。

3.  SDK初期化とインストールイベント(計測に最低限必要な手順)

:これはアプリインストールを計測するために最低限必要な手順です。

3.1 SDKの初期化

SDKを初期化するために、以下のコードをonCreateファンクションに追加します:

public void startTracking(Application application, String key);

使用例:

AppsFlyerLib.getInstance().startTracking(this.getApplication(),"[Dev_Key]");

[Dev_Key]をご自身のDev_Key(AppsFlyer管理画面の 設定 >>SDKインテグレーション」にて確認可能)に置換してください。

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

3.2 リターゲティング計測向けのディープリンクをレポートする

アプリがディープリンクに対応している、複数のアクティビティがある、またはリターゲティング広告を運用する予定がある場合は、以下のセクション5.6を実装する必要があります。

3.3 バックグラウンドでのセッションをレポートする

アプリがバックグラウンドで稼働するユーティリティアプリの場合、AppsFlyerにてセッション及びリテンションが計測できるようセクション5.12にて説明しているAPIを使用してください。

4.  アプリ内イベントトラッキングAPI (任意)

このAPIを通じて、AppsFlyerはインストール後のアプリ内イベントを計測します。これらのイベントは広告主によって定義され、イベント名に加えて任意のイベント値が含まれます。

これらのイベントによって、ロイヤルユーザーがどのようにアプリを発見し、特定のキャンペーンやメディアから成果に至ったかをトラッキングできます。ROI(投資収益率)やLTV(ライフタイムバリュー)を計測するために、計測したいアプリ内イベントを慎重に定義することをおすすめします。

シンタックス:

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

context: getApplicationContext()を使用

eventName: イベント名を定義するための文字列

eventValues: リッチイベントを構成するイベントパラメータのマッピング

revenue(売上)をアプリ内イベントとして計測する場合: af_revenue (固定)を使用

AFInAppEventParameterName.REVENUE

イベントパラメータは収益をアプリ内リッチイベントの一部として計測します。正または負の任意の数値を設定できます。

注:af_price

AFInAppEventParameterName.PRICE

はrevenue(売上)として計測されるのではなく、イベントの説明的なパラメータであり、収益額やLTV計測には反映されません。

例1:「レベル達成」アプリイベント

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

これはイベントタイプ”af_level_achieved”を以下のイベント値と共に生成します。

{af_level: 9, af_score: 100}

例2:購入イベント

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の収益を含み、これは収益として管理画面に反映されます。

:アプリ内イベント名は45文字以下である必要があります。45文字以上のイベント名は管理画面上に表示されず、ローデータレポート、Pull及びPush APIにのみ表示されます。

AppsFlyerのAndroid向けリッチアプリ内イベント詳細については、こちらをご参照ください。

5.  上級インテグレーション(任意)

以下のAPIは任意であり、AppsFlyer SDKの上級インテグレーションの一部です。

5.1  通貨コードの設定(任意)

AppsFlyer 側に送信される各リッチアプリ内イベントに使用される各通貨コードに加えて、以下のAPIを用いてグローバル通貨コードを設定できます。グローバル通貨コードは、af_currencyがアプリ内イベントの値として設定されていない場合に適用されます。

AFInAppEventParameterName.CURRENCY

USD (米国ドル) が既定値です。使用できる ISO通貨コードはこちらです。

通貨コードを設定するには、以下の API を用いてください:

public void setCurrencyCode(String currencyCode);

使用例:

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

5.2  AppsFlyerの独自IDを取得(任意)

アプリの新規インストールに対して、それぞれAppsFlyer独自のIDが生成されます。AppsFlyerの独自IDはAppsFlyerがレポートやAPIで用いる主なIDです。

AppsFlyer の独自 ID を取得するには以下の API を用いてください:

public String getAppsFlyerUID(Context context);

使用例:   

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

5.3  顧客IDの設定(任意)

独自の顧客IDを設定すると、独自の固有IDを、AppsFlyer IDや他のデバイスのIDと相互参照できるようになります。このIDは、ポストバックAPIとともにAppsFlyerのCSVレポート上で確認でき、広告主側の内部的なIDと相互参照することができます。

顧客 ID を設定するには:

public void setCustomerUserId(String id);

使用例:

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

重要事項:

  • この設定を実装あとに発生したイベントのみに顧客IDが付与されるため、顧客IDの設定は、できる限り最初の段階で設定することをおすすめします。
  • MixpanelやSwrveなどのアナリティクスツールとのAppsFlyer連携を利用する場合には、顧客IDはこのAPIを用いて設定する必要があります。 

5.4  コンバージョンデータ (Get Conversion Data) の取得(任意)

AppsFlyer を使うことで、リアルタイムで直接SDKレベルでユーザーのアトリビューションデータにアクセスできます。このデータをもとに、ユーザーがインストール後にアプリ初期起動で表示するランディングページをカスタマイズすることが可能です。 

この機能の詳細はこちらを参照ください。

5.5  ユーザーメールアドレスの設定(任意)

AppsFlyer では、デバイスに紐付くメールアドレスをレポートする機能を提供しています。ディベロッパはメールアドレスを収集し、希望の暗号化メソッドを使って AppsFlyer 側にレポートできます。

次の暗号化メソッドが利用可能です:Sha1、MD5、SHA256、plain

例:

public void setUserEmails(String... emails);

使用例:

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

注:メールアドレスのような個人情報(PII)はAppsFlyerでは保持されませんし、いかなるレポートにも表示されません。このような情報を収集する目的は、単にメディアソースへポストバックするためです。

5.6  リターゲティング・アトリビューションのディープリンクを記録(任意)

ディープリンクはリターゲティング広告において重要な実装です。リターゲティング広告を運用する場合はディープリンクの使用を推奨しています。

ディープリンク向けに使用する各アクティビティには、メインアクティビティの他に、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="your unique scheme" />
</intent-filter>

5.7  アプリ内購入の検証(任意)

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 onValidateInAppFailure(String error) {
              Log.d(TAG, "onValidateInAppFailure called: " + error);
          }
      });

5.8  エンドユーザーオプトアプト(任意)

AppsFlyerには、AppsFlyerアナリティクスから特定のユーザーをオプトアウトするための方法があります。この方法は、最新のプライバシー要件に適合しており、Facebookのデータポリシーとプライバシーポリシーにも適合しています。既定値は NO で、計測が有効になっています。

セクション4 のSDK初期化の段階で、以下のAPIを用いてオプトアウトしてください。

public void setDeviceTrackingDisabled(boolean isDisabled);

使用例:

AppsFlyerLib.getInstance().setDeviceTrackingDisabled(true);

5.9  Google Play外部のアプリインストールを計測(任意)

重要:Google Play がデフォルトのストアです。Google Playのみでアプリを公開している場合は、このステップをスキップしてください。

Google Play 以外のストアからのインストールを計測するためには、チャンネル/ストアをアプリのAndroidManifest.xmlで独自のチャネルまたはストア名と一緒に各APKで設定する必要があります。CHANNEL値は、大文字、小文字を区別しますのでご注意ください。

例:

Amazon

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

スタンドアロン

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

Verizon (Pre-Installed)

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

注:AppsFlyer管理画面でアプリを設定する際に、CHANNEL値を設定する必要があります。

メタデータタグは</application>タグの前に配置してください。

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

5.10  アプリのアンインストールを計測(任意)

AppsFlyerではアプリのアンインストールをトラッキングできます。

Manifestに以下のパーミッションを追加してください。(プッシュ通知を使用しているアプリはこれらのパーミッションは既に設定されているはずです。)

<uses-permission android:name="android.permission.WAKE_LOCK" />
    <permission android:name="YOUR-PACKAGE-NAME.permission.C2D_MESSAGE"
        android:protectionLevel="signature" />
    <uses-permission android:name="<your-package-name>.permission.C2D_MESSAGE" />
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />

注:正しいパッケージ名を入力してください。

</application>タグの前に以下のレシーバーを追加してください。

<receiver
android:name="com.google.android.gms.gcm.GcmReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</receiver>
<service android:name="com.appsflyer.InstanceIDListener" android:exported="false">
<intent-filter>
<action android:name="com.google.android.gms.iid.InstanceID"/>
</intent-filter>
</service>

GCMプロジェクト番号をメインアクティビティに設定してください:startTracking()メソッドを呼ぶ直前に以下のコードを追加してください。

public void setGCMProjectNumber(String id);

使用例:

AppsFlyerLib.getInstance().setGCMProjectNumber('1234567890');

この設定を正しく完了させる上で、こちらを必ずご確認ください。

5.11 OneLinkでのディープリンク設定(任意)

OneLinkは、af_dp パラメータに設定されたスキーム名が示すディープリンク場所でアプリを起動させます。

AppsFlyer SDKのonAppOpenAttributionをコールバックする必要があります。それによって、アプリをオープンさせるトリガーとして使用されるOnelinkパラメータが返却されます。その後、その値を解析し、関連性のあるアプリページへ誘導するロジックに適用されます。

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

詳細情報はこちらをご参照ください。 

5.12  バックグラウンドセッションレポート(任意)

これは、ユーティリティアプリを対象とした、バックグラウンドでアプリを起動させている間のユーザーのリテンションを計測するためのAPIです。

public void reportTrackSession(Context context);

使用例:

AppsFlyerLib.getInstance().reportTrackSession(context);

5.13 プッシュ通知の測定(オプション)

AppsFlyerではリターゲティング広告の一部としてプッシュ通知を計測することが可能です。 

この機能を有効にするには、プッシュ通知をクリックして立ち上がる全てのアクティビティのonCreateメソッド内にある以下のメソッドを呼んでください:
AppsFlyerLib.getInstance().sendPushNotificationData(this);
データペイロードには関連するキーバリューストリングと一緒にオブジェクト”af”を含めてください:

\"af\" : { \"c\" : \"test_campaign\" , \"is_retargeting\" : \"true\" , \"pid\" : \"push_provider_int\" })
実装例:
\"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\" } } }"

6.  SDK導入テストの実施

Play Storeにアプリを提出する前/後にSDK導入をテストする方法は、こちらをご覧ください。

7. 既知の不具合

ProGuardをご利用で、AFKeystoreWrapperクラスに関する警告メッセージが表示された場合、以下のコードをProGuard rules fileに追加してください:

-dontwarn com.appsflyer.AFKeystoreWrapper
この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています
他にご質問がございましたら、リクエストを送信してください

コメント

  • Avatar
    Jamie Weider

    最新バージョン4.3.2リリースノート(2016年3月24日)
    o Fixed crash for Android 2.3
    o Android 2.3のクラッシュを修正
    o Changed method to
    o メソッドをに変更

記事コメントは受け付けていません。

Powered by Zendesk