如果您使用托管购买,则使用 RESTORE_TRANSACTION 是唯一的方法。如果您使用非托管购买,您可以将购买状态存储在自己的服务器上,但这并不简单。
RESTORE_TRANSACTIONS 并不复杂:您只需触发命令,就会收到与您首次购买商品时格式完全相同的交易信息通知。您应该以完全相同的方式处理它,并且很可能您的应用程序中已经有了相应的代码。对此进行测试有点困难,因为它实际上不适用于测试帐户,并且您需要一个实时应用。
再次查看official 文档以了解其工作原理。
管理应用程序产品数据的三种方式。
1)SharedPrefrence:您可以使用share prefrence值并检查它是否被购买。如果万一用户卸载了应用程序然后重新安装了应用程序,那么您可以检查用户是否已购买,此时您会得到该项目已经购买。而且您必须管理用户才能访问您的应用程序数据。
2)本地数据库:您也可以使用本地sqlite数据库来存储购买细节和购买状态。和上面一样,如果用户清除数据或卸载应用程序然后再次请求购买物品并检查用户是否购买了物品。
或
2) 服务器数据库: 如果您使用网络服务器来存储用户数据,这是比上面更好的方法。在这种情况下,如果用户卸载应用或清除应用数据,您甚至不需要第二次管理。
3) 混淆:(与共享偏好相比最有效的方式)
更多实现详情请查看HERE
这里是如何恢复交易的 sn-p:
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
}
};