我已经在我的游戏应用程序中实施了inApp购买,其中前三个级别是免费的,然后用户必须付费才能解锁剩余的7个级别。
在应用程序购买工作正常。但是,一旦用户购买该物品,我应该如何处理它,以便下次他能够看到解锁的等级。我应该将它保存在sharedPreferences中并每次检查。或者我应该每次从谷歌控制台查询以检查特定身份证的状态。
如果有人可以建议我采取正确的方法,那么会非常高兴。
如果用户卸载应用并在同一设备上再次安装该应用,行为应如何?
答案 0 :(得分:2)
如果您使用托管购买,则使用RESTORE_TRANSACTION
是唯一的方法。如果您使用非托管购买,则可以将购买状态存储在您自己的服务器上,但这并不简单。
RESTORE_TRANSACTIONS
没有什么复杂之处:您只需触发命令,就会收到与第一次购买商品时格式完全相同的交易信息。您应该以完全相同的方式处理它,并且您可能已经在应用程序中获得了该代码。测试这个有点困难,因为它不适用于测试帐户,而且你需要一个实时应用程序。
再次查看official文档,了解其工作原理。
管理应用程序产品数据的三种方法。
1)SharedPrefrence:您可以使用共享优先级值并检查是否已购买。如果用户卸载了应用程序,然后重新安装应用程序,那么您可以检查用户是否已购买,此时您已经购买了该项目。您必须管理用户以访问您的应用程序数据。
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
}
};
答案 1 :(得分:1)
是的,您可以将其保存在sharedPreferences中,但是如果用户重新安装应用程序,则会删除这些内容。使用sharedPreferences很聪明,因为用户每次使用您的应用程序时都不必在线。但是,如果他们在线,您将需要进行托管购买(请参阅下面的网站源代码),以便您的应用程序检查何时打开他们购买的商品。
如果您使用的是API 3或更高版本,则该信息已缓存在设备上。如果网络可用,调用服务器仍然很聪明,但您也可以使用getPurchases
进行检查。
请参阅:来源http://developer.android.com/google/play/billing/api.html