我已经在我的游戏应用中实现了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
}
};