Android应用内结算,如何处理应用重新安装

use*_*523 5 android android-billing

我对应用内结算的工作方式非常困惑.我已经阅读了文档,但我一定错过了一些东西,因为我不理解我需要在我的应用程序中实现的最后一步才能使其工作.应用内结算效果很好,但是,如果用户卸载我的应用并在将来再次安装它,我的应用程序就不知道如何确定以前是否进行了应用内购买.这是我的主类中的一个片段,我尝试处理所有这些:

@Override
public void onCreate(Bundle savedInstanceState)
{
    mContext = this;
    startService(new Intent(mContext, BillingService.class));
    BillingHelper.setCompletedHandler(mTransactionHandler);
}
Run Code Online (Sandbox Code Playgroud)

我正在使用dungeons示例项目中的示例类.我不明白的是下面的代码在购买时如何工作,但重新运行它不能检查是否已经购买了某些东西.我已经被困在这个部分已经有一个月了,而且我对此感到非常沮丧.

public Handler mTransactionHandler = new Handler()
{
    public void handleMessage(android.os.Message msg)
    {
        Log.i(TAG, "Transaction complete");
        Log.i(TAG, "Transaction status: "
            + BillingHelper.latestPurchase.purchaseState);
        Log.i(TAG, "Item purchased is: "
            + BillingHelper.latestPurchase.productId);

        if (BillingHelper.latestPurchase.isPurchased())
        {
            new Message("Thank you!", getApplicationContext());
            PAY_VERSION = true;
            SharedPreferences purchasePreferences = getSharedPreferences(PURCHASE_PREFERENCES, Activity.MODE_PRIVATE);
            Editor purchaseEditor = purchasePreferences.edit();
            purchaseEditor.putBoolean("purchased", PAY_VERSION);
            purchaseEditor.commit();
            Intent intent = getIntent();
            finish();
            startActivity(intent);
        }
    };
Run Code Online (Sandbox Code Playgroud)

我需要的是一些查询服务器以查看是否已购买此项目的方法.我知道那里有一PURCHASE_STATE_CHANGED件事,但是当它确定状态已经改变或者如何启动它来检查时我不知道该怎么做.我迷失了,所有我需要的是一个很好的推动正确的方向,因为到目前为止,我只是完全失去了.

编辑:

我也听说你需要解析JSON,但我不知道如何开始这样做.

编辑2:

我应该把这些东西叫做检查吗?

BillingHelper.restoreTransactionInformation(BillingSecurity.generateNonce());
BillingHelper.getPurchaseInformation(new String[] {"myItem"});
Run Code Online (Sandbox Code Playgroud)

该代码此前曾坠毁在我的姐妹们的电话(SGS3,ICS),但不是我的(GN,ICS,和JB工作).我在onCreate()第一次活动中称呼它.getPurchaseInformation(...)一旦它被调用,不确定该怎么做.它没有返回值,所以我不确定我是否可以解析JSON或者我应该做什么......

另外,这两行给了我这个:

08-27 11:54:04.271: E/BillingService(17702): BillingHelper not fully instantiated
08-27 11:54:04.271: E/BillingService(17702): BillingHelper not fully instantiated
Run Code Online (Sandbox Code Playgroud)

Daw*_*ozd 0

JSON

下面显示了包含订阅购买令牌的 JSON 订单对象的示例。

{ "nonce" : 1836535032137741465,

  "orders" :
    [{ "notificationId" : "android.test.purchased",
       "orderId" : "transactionId.android.test.purchased",
       "packageName" : "com.example.dungeons",
       "productId" : "android.test.purchased",
       "developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
       "purchaseTime" : 1290114783411,
       "purchaseState" : 0,
       "purchaseToken" : "rojeslcdyyiapnqcynkjyyjh" }]
}
Run Code Online (Sandbox Code Playgroud)

如何用JSONJava解析.

Android 支持 JSON

安卓计费

如果您有远程服务器,我们建议您将购买信息存储在服务器上,而不是存储在设备上的本地数据库中。看这里

了解有关按用户帐户托管、非托管或订阅的信息

我这样使用计费方式:

  1. 在 onCreate 中

     BillingHelper.setCompletedHandler(handlerTransaction);
    
    Run Code Online (Sandbox Code Playgroud)

    您的代码中有处理程序。

  2. 下一个onClick或其他什么

     BillingHelper.requestPurchase(this, currentMarketProduct.getMarketId());
    
    Run Code Online (Sandbox Code Playgroud)