IAP情報によりユーザーをセグメントすることはTapjoy SDKで最も強力な機能の一つです。例えば、非課金ユーザーだけに広告を配信しながら、高課金ユーザーにはアプリ内アイテムプロモーションをするといった事が可能になります。このためにはユーザーのIAP情報をTapjoyに送る必要があり、その際は、Tapjoy.trackPurchase コールを使います。 ユーザーのアプリ内での購入行動は、IAPストアで行われるものに限らず、例えばTapjoyの"アイテム販促"で行われたものなども含めてすべてきろくするようにしてください。
Androidでレシートの受領確認月のIAPトラッキングを行うためには、アプリのライセンスキーを "設定 > アプリ設定 > アナリティクス > Receipt Validation" に設定します:
アプリのライセンスキーの取得の仕方は、Google Services ドキュメントの Licensing についての章を参照して下さい。
下記は受領確認を用い課金トラッキングを行う方法です:
Tapjoy.trackPurchase(skuDetails, purchaseData, dataSignature, campaignID);
下記は 受領確認つきの課金トラッキングのコード例です。受領確認を行う場合、レシート情報のある購入のみをトラッキングするようにしてください。
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Log.d(TAG, "onActivity Result Code : " + resultCode);
if (requestCode == REQUEST_CODE_PURCHASE) {
String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");
// レシートを取得
if (resultCode == Activity.RESULT_OK) {
try {
JSONObject purchaseDataJson = new JSONObject(purchaseData);
String productId = purchaseDataJson.getString("productId");
// getSkuDetails
ArrayList skuList = new ArrayList<> ();
skuList.add(productId);
Bundle querySkus = new Bundle();
querySkus.putStringArrayList("ITEM_ID_LIST", skuList);
Bundle skuDetails = mService.getSkuDetails(3, getActivity().getPackageName(), "inapp", querySkus);
ArrayList responseList = skuDetails.getStringArrayList("DETAILS_LIST");
// 空の purchase data および signature に対処
if(purchaseData.isEmpty() || purchaseData == null)
purchaseData = "Empty_Purchase_Data";
if(dataSignature.isEmpty() || dataSignature == null)
dataSignature = "Empty_Data_Signature"
// IAPを記録
Tapjoy.trackPurchase(responseList.get(0), purchaseData, dataSignature, null);
//第四引数にキャンペーンIDを指定して、キャンペーンのトラッキングを行う事も可能です。
} catch (JSONException e) {
e.printStackTrace();
} catch (NullPointerException e){
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}
}
通貨コードはISO 4217 standardをご利用ください。
IAPトラッキングを実装しますと、下記のように管理画面上でIAPレベニューグラフをご確認いただけます。
com.android.installreferrer:installreferrer
を追加するonCreate()
メソッド内で Tapjoy.activateInstallReferrerClient(context);
を呼ぶ。InstallReferrerStateListener
の実装クラスをプロジェクトに追加するcom.android.installreferrer:installreferrer
を追加するonInstallReferrerSetupFinished
コールバックメソッドに以下を追加:
Tapjoy.setInstallReferrer(context, referrer);
メソッドにコンテキストと取得したReferrerの値を指定して呼び出します。 このメソッドはアプリ起動時に一度のみ呼ぶようにします。public class EasyAppInstallReferrer implements InstallReferrerStateListener {
private Context referrerContext;
private InstallReferrerClient mReferrerClient;
private String TAG = "Tapjoy Install Referrer";
private SharedPreferences prefs;
public void init(Context context) {
try {
mReferrerClient = InstallReferrerClient.newBuilder(context).build();
} catch (Exception e) {
Log.w(TAG, e.getMessage());
}
/*
* Googleドキュメントからの注釈: アプリが再インストールされない場合、Install referrer情報は90日間取得可能です。
* 不要なAPIの呼び出しを避けるために、アプリはインストール後の初回起動に一度のみAPIを起動するようにするべきです。
*/
prefs = context.getSharedPreferences("TapjoyEasyAppReferrer", Context.MODE_PRIVATE);
if(!prefs.getBoolean("didSetUpTapjoyInstallReferrer", false)) {
mReferrerClient.startConnection(this);
}
referrerContext = context;
}
@Override
public void onInstallReferrerSetupFinished(int responseCode) {
switch (responseCode) {
case InstallReferrerClient.InstallReferrerResponse.OK:
try {
getReferrer();
mReferrerClient.endConnection();
} catch (RemoteException e) {
TapjoyLog.e(TAG, e.getMessage());
} catch (Exception e) {
TapjoyLog.e(TAG, e.getMessage());
}
break;
case InstallReferrerClient.InstallReferrerResponse.FEATURE_NOT_SUPPORTED:
// 現在のPlay StoreアプリではAPIが使用できない
break;
case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:
// Connection ができなかった
break;
}
}
@Override
public void onInstallReferrerServiceDisconnected() {
// Google Playに startConnection() メソッドを呼んで再接続を試みます。
if (referrerContext != null) {
init(referrerContext);
}
}
private void getReferrer() throws RemoteException {
SharedPreferences.Editor editor = prefs.edit();
editor.putBoolean("didSetUpTapjoyInstallReferrer", true);
editor.apply();
ReferrerDetails referrerDetails = mReferrerClient.getInstallReferrer();
String referrer = referrerDetails.getInstallReferrer();
Tapjoy.setInstallReferrer(referrerContext, referrer);
}
}
IAP購入レシートをTapjoyに送る前に、Tapjoy IAPトラッキングに含めるか、Google Play のレシートバリデーション (もしくは利用しているストアでの適切なバリデーション) を行ってください。レシートの受領確認を行わない場合、恐らく、統計数値およびセグメント情報は不正ユーザーによる購入情報により歪められる事になります。
フリーミアムアプリでのIAPが増加しているため、アプリ開発者はすべての購入を検証して不正を防ぐ事が重要です。アプリ内でレシートバリデーションを行い、不正なトランザクションがデータに混じり混む事を防止するよう強く勧めます。これにより、携帯のアナリティクスデータに減少された購入の情報のみを組み合わせられるようになります。レシートパラメータを含めない場合、Tapjoyではレシートバリデーションを既に行っているとみなしてデータを検証されたものとして受け入れます。
パブリッシャーはIAP Receipt Validation機能を使って簡単に、最小限の実装でTapjoyダッシュボードで購入情報を追跡できます。
ユーザーが購入を行うたびに、IAPトラッキング用APIを一度呼ぶだけです。レシートパラメータを含める事で、ダッシュボードに表示されるIAPアナリティクスデータを正確に保てます。Tapjoy IAP トラッキングAPIの呼びだし時には、AppleおよびGoogleのストアからのレシート情報を指定でき、Tapjoyのサーバではダッシュボードのデータに加える前にトランザクションが正しいかどうかを検証します。
レシートのバリデーションが完了すればデータの正確性が担保されるため、Tapjoyの将来バリューマップ機能や購入情報によるIAPプロモーションや日課金者に対する広告表示等によりユーザーのLTVを真に向上できるようになります。