追踪购买

通过消费行为细分用户是Tapjoy SDK最强大的功能之一。例如,您的广告主要是想显示给您的非消费用户,但是事实上却把广告投向了您的高端付费用户。要使用这项功能,必须让Tapjoy了解您的用户的消费活动。您只需要在代码中调用Tapjoy.trackPurchase。您需要追踪在应用中每一笔购买,无论是通过应用内购买还是其他途径购买,比如Tapjoy IAP推广。

为了让购买跟踪的收据验证在Android上正常工作,您必须在应用设置中填入您的应用程序的许可证密钥 > 分析 > 收据验证

您能在Licensing section of the Google Services Documentation找到如何得到您应用的许可密钥。

如下调用用于带有收据验证的追踪购买:

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

1. 参数说明

  1. skuDetails – 用JSON对象格式的字符串包含产品项目的详细信息(遵循谷歌规范
  2. purchaseData – JSON格式的字符串,其中包含有关采购订单的详细信息。它将在调用购买之后由操作系统返回。使用空值将不验证。
  3. dataSignature – 字符串包含开发人员用自己的私钥签署了的购买数据签名。它将在调用购买之后由操作系统返回。使用空值将不验证。
  4. campaignId – 发起购买活动PurchaseRequest的campaign ID。如果您不希望跟踪哪些活动发起此次购买可以设置为空值。

如下是IAP追踪的示例。对于有收据验证的IAP追踪,您只能用于追踪那些有收据信息的购买。

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");

    // get receipt here.
    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");

        // Remove empty purchase data and signatures
        if(purchaseData.isEmpty() || purchaseData == null)
	purchaseData = "Empty_Purchase_Data";

        if(dataSignature.isEmpty() || dataSignature == null)
	dataSignature = "Empty_Data_Signature"
	
        //Track the purchase
        Tapjoy.trackPurchase(responseList.get(0), purchaseData, dataSignature, null);
                //The fourth parameter is a string that lets you specify a campaign ID should you choose to do so.

      } catch (JSONException e) {
        e.printStackTrace();
      } catch (NullPointerException e){
        e.printStackTrace();
      } catch (RemoteException e) {
        e.printStackTrace();
      }
    }
  }
}

货币代码遵循 ISO 4217 standard

当您使用了追踪购买以后,您就能够在控制面板的”IAP Revenue”中看到相关图表。

2. Referrer

A. 集成Tapjoy InstallReferrer 客户端到Tapjoy Analytics

  1. 添加 com.android.installreferrer:installreferrer 到build.gradle <app_level>中
  2. 在应用程序启动Activity的onCreate()中调用Tapjoy.activateInstallReferrerClient(context);

B. 实现您自己的InstallReferrer客户端ing使用Tapjoy Analytics

  1. 在您应用程序工程中创建一个类并实现InstallReferrerStateListener
  2. 添加com.android.installreferrer:installreferre到build.gradle <app_level>中
  3. 从当前类 onInstallReferrerSetupFinished 的回调中:
    1. 从ReferrerClient对象的ReferrerDetails的getInstallReferrer()方法获取引用者值。
    2. 调用Tapjoy.setInstallReferrer(context, referrer);来传递context和刚刚获取的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());
       }
     /*
     * Notes from google documentaiton: Unless the app is reinstalled, the install referrer information will be available for 90 days
     * To avoid unnecessary API calls in your app, you should invoke the API only once during the first execution after install.
     */
     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:
         // API not available on the current Play Store app.
         break;
       case InstallReferrerClient.InstallReferrerResponse.SERVICE_UNAVAILABLE:
         // Connection couldn't be established.
         break;
     }

   }

   @Override
   public void onInstallReferrerServiceDisconnected() {
     // Try to restart the connection on the next request to
     // Google Play by calling the startConnection() method.
     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. 重要提示

您应该在您的Tapjoy IAP跟踪调用中包含IAP购买收据(对于SDK版本11.2.0或更高版本),或者使用Google Play收据验证来验证给定的IAP是否有效(或适合您所使用商店的任何内容) 然后将其报告给Tapjoy。 如果您不这样做,几乎可以肯定的是,欺诈性购买会影响到您的指标和细分。 这将破坏大量的Tapjoy功能,包括“未来价值地图”以及使用某些内容定位(或排除)高消费用户的功能。

IAP在免费增值应用程序中的增长突显了应用程序开发人员验证每次购买并防范欺诈的迫切需求。我们强烈建议您在应用程序中使用收据验证,以防止未经授权的交易污染您的数据。这样,您就可以将有效(且仅有效)的购买合并到您的移动分析数据中。如果您不包含收据参数,我们将假设您自己进行了收据验证,并认为购买有效。

使用IAP收据验证并在Tapjoy控制面板上跟踪数据非常简单,并且对应用程序发布者的工作量很小。

您只需要为用户进行的每次购买进行一次IAP跟踪调用。通过包括收据参数,您将消除显示在控制面板上的欺诈性购买的收入,并确保IAP分析保持准确。您可以将Apple或Google商店收据与Tapjoy IAP跟踪调用一起传递,Tapjoy的服务器会在将交易添加到控制面板数据之前验证该交易是否有效。

完成收据验证后,您可以放心地查看数据集,Tapjoy的“未来价值地图”,并通过IAP促销和广告的非支出者来定位支出者,从而真正从用户中提高LTV。