IAP(課金)トラッキング

IAP情報によりユーザーをセグメントすることはTapjoy SDKで最も強力な機能の一つです。例えば、非課金ユーザーだけに広告を配信しながら、高課金ユーザーにはアプリ内アイテムプロモーションをするといった事が可能になります。このためにはユーザーのIAP情報をTapjoyに送る必要があり、その際は、Tapjoy.trackPurchase コールを使います。 ユーザーのアプリ内での購入行動は、IAPストアで行われるものに限らず、例えばTapjoyの"アイテム販促"で行われたものなども含めてすべてきろくするようにしてください。

Androidでレシートの受領確認月のIAPトラッキングを行うためには、アプリのライセンスキーを "設定 > アプリ設定 > アナリティクス > Receipt Validation" に設定します:

アプリのライセンスキーの取得の仕方は、Google Services ドキュメントの Licensing についての章を参照して下さい。

下記は受領確認を用い課金トラッキングを行う方法です:

  Tapjoy.trackPurchase(skuDetails, purchaseData, dataSignature, campaignID);

1. パラメータの説明

  1. skuDetails – Product itemの詳細を含むJSON Object formatの文字列 (Specification on Google Playによる)
  2. purchaseData – Purchase orderの詳細を含むJSON formatの文字列。これはPurchaseコール後Operating Systemから返されます。確認を行わない場合はnullを使います。
  3. dataSignature – 開発者がprivate keyにより署名したpurchase dataの署名を含む文字列。Purchaseコール後Operating Systemから返されます。確認を行わない場合はnullを使います。
  4. campaignId – この課金を促したキャンペーンがある場合、そのPurchaseRequestのcampaign id。課金を促したキャンペーンをトラッキングしない場合はnullにします。

下記は 受領確認つきの課金トラッキングのコード例です。受領確認を行う場合、レシート情報のある購入のみをトラッキングするようにしてください。

java
@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レベニューグラフをご確認いただけます。

2. Referrer

A. Tapjoyの InstallReferrer クライアントをTapjoyアナリティクス用に実装する

  1. build.gradle の <app_level> の dependency に com.android.installreferrer:installreferrer を追加する
  2. アプリの起動ActivityのonCreate()メソッド内で Tapjoy.activateInstallReferrerClient(context); を呼ぶ。

B. InstallRefferer実装をTapjoyアナリティクス用に使用する

  1. InstallReferrerStateListener の実装クラスをプロジェクトに追加する
  2. build.gradle の <app_level> の dependency に com.android.installreferrer:installreferrer を追加する
  3. 実装クラスの onInstallReferrerSetupFinished コールバックメソッドに以下を追加:
    1. ReferrerClient オブジェクトから getInstallReferrer() メソッドの戻り値 ReferrerDetails オブジェクトを取得し、getInstallReferrer() メソッドの戻り値でReferrerの値を取得します。
    2. 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);
   }
}

3. 重要事項

IAP購入レシートをTapjoyに送る前に、Tapjoy IAPトラッキングに含めるか、Google Play のレシートバリデーション (もしくは利用しているストアでの適切なバリデーション) を行ってください。レシートの受領確認を行わない場合、恐らく、統計数値およびセグメント情報は不正ユーザーによる購入情報により歪められる事になります。

フリーミアムアプリでのIAPが増加しているため、アプリ開発者はすべての購入を検証して不正を防ぐ事が重要です。アプリ内でレシートバリデーションを行い、不正なトランザクションがデータに混じり混む事を防止するよう強く勧めます。これにより、携帯のアナリティクスデータに減少された購入の情報のみを組み合わせられるようになります。レシートパラメータを含めない場合、Tapjoyではレシートバリデーションを既に行っているとみなしてデータを検証されたものとして受け入れます。

パブリッシャーはIAP Receipt Validation機能を使って簡単に、最小限の実装でTapjoyダッシュボードで購入情報を追跡できます。

ユーザーが購入を行うたびに、IAPトラッキング用APIを一度呼ぶだけです。レシートパラメータを含める事で、ダッシュボードに表示されるIAPアナリティクスデータを正確に保てます。Tapjoy IAP トラッキングAPIの呼びだし時には、AppleおよびGoogleのストアからのレシート情報を指定でき、Tapjoyのサーバではダッシュボードのデータに加える前にトランザクションが正しいかどうかを検証します。

レシートのバリデーションが完了すればデータの正確性が担保されるため、Tapjoyの将来バリューマップ機能や購入情報によるIAPプロモーションや日課金者に対する広告表示等によりユーザーのLTVを真に向上できるようになります。