我已经在我的游戏应用中实现了inApp购买,前三个级别是免费的,然后用户必须付费才能解锁剩余的7个级别。

在应用内购买可以正常工作。但是一旦用户购买了该物品,我该如何处理它,以便下次他可以看到该级别已解锁。我应该将其保存在sharedPreferences中并进行每次检查。或者我应该每次从Google控制台查询以检查特定ID的状态。

如果有人可以向我建议正确的方法,那将非常有用。

如果用户卸载该应用程序并将其再次安装在同一设备上,该行为将如何?

最佳答案

如果使用托管购买,则使用RESTORE_TRANSACTION是唯一的方法。如果您使用非托管购买,则可以将购买状态存储在自己的服务器上,但这很难简单。

RESTORE_TRANSACTIONS没什么复杂的:您只需触发命令,然后便会收到与交易信息完全相同的通知,该信息的格式与您首次购买商品时的格式相同。您应该以完全相同的方式对其进行处理,并且很可能您的应用程序中已经具有用于该代码的代码。测试它有点困难,因为它实际上不适用于测试帐户,并且您需要一个实时应用程序。

再次浏览official文档以了解其工作原理。

管理应用程序的产品数据的三种方式。

1)SharedPrefrence:您可以使用share prefrence值并检查是否已购买。如果用户卸载了该应用程序,然后重新安装该应用程序,则可以检查用户是否已购买,此时您已经购买了该商品。而且,您必须管理用户以访问您的应用程序数据。

2)本地数据库:您还可以使用本地sqlite数据库存储购买明细和购买状态。与上述相同(如果用户清除了数据或卸载了应用程序,然后再次请求了购买商品,并检查了用户是否购买了商品)。

要么

2)服务器数据库:如果使用Web服务器存储用户数据,则是与上述方法相比更好的方法。在这种类型的情况下,如果用户卸载了应用程序或清除了应用程序数据,您甚至不需要进行第二次管理。

3)混淆:(与共享首选项相比最有效的方式)

有关实现的更多详细信息,请检查HERE

以下是如何还原事务的代码段:

private void restoreTransactions() {
    if (!mBillingObserver.isTransactionsRestored()) {
        BillingController.restoreTransactions(this);
        Toast.makeText(this, R.string.restoring_transactions, Toast.LENGTH_LONG).show();
    }
}


编辑:

api的V3不再需要恢复购买。可以直接查询购买的物品。

请阅读查询以下项目的购买项目:
http://developer.android.com/google/play/billing/billing_integrate.html
getPurchases() method description

要获取已购买的商品的详细信息,请尝试以下方法:

IabHelper.QueryInventoryFinishedListener mGotInventoryListener = new IabHelper.QueryInventoryFinishedListener() {
    public void onQueryInventoryFinished(IabResult result,
            Inventory inventory) {
        if (result.isFailure()) {
            complain("Failed to query inventory: " + result);
            return;
        }

        mIsPremium = inventory.hasPurchase(SKU_PREMIUM); ------> By here you can get information

    }
};

10-08 06:16
查看更多