- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在我的游戏应用中实现了应用内购买,其中前三个级别免费,然后用户必须付费才能解锁剩余的 7 个级别。
应用内购买运行良好。但是,一旦用户购买了该商品,我应该如何处理它,以便下次开始时他可以看到已解锁的级别。我应该将它保存在 sharedPreferences 中并每次检查吗?或者我应该每次都从谷歌控制台查询以检查特定 ID 的状态。
如果有人能建议我正确的方法,我将不胜感激..
如果用户卸载该应用并在同一设备上再次安装它,行为应该如何?
最佳答案
如果您使用托管购买,则使用 RESTORE_TRANSACTION
是唯一的方法。如果您使用非托管购买,您可以将购买状态存储在您自己的服务器上,但这并不简单。
RESTORE_TRANSACTIONS
并不复杂:您只需启动命令,您就会收到交易信息通知,其格式与您首次购买商品时所收到的信息格式完全相同。您应该以完全相同的方式处理它,并且您的应用程序中很可能已经有了相应的代码。对此进行测试有点困难,因为它实际上不适用于测试帐户,而您需要一个实时应用。
查看 official再次查看文档以了解其工作原理。
管理应用程序产品数据的三种方式。
1) SharedPrefrence:您可以使用分享偏好值查看是否购买。如果万一用户卸载了该应用程序然后重新安装该应用程序,那么您可以检查用户是否已购买,此时您会得到该项目已购买。而且您必须管理用户才能访问您的应用程序数据。
2)本地数据库:您也可以使用本地sqlite数据库来存储购买明细和购买状态。和上面一样,如果用户清除数据或卸载应用程序,然后再次请求购买商品并检查用户是否购买了商品。
或
2) 服务器数据库: 如果您使用网络服务器来存储用户数据,这是比上面更好的方法。在这种情况下,如果用户卸载应用程序或清除应用程序数据,您甚至不需要进行第二次管理。
3) 混淆:(与共享偏好相比最有效的方式)
有关实现检查的更多详细信息 HERE
以下是如何恢复交易的 fragment :
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
}
};
关于android - 如何保存inApp购买状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20343589/
我目前正在开发一款将在 Android 电子市场上发布的应用程序。我如何在我的 Cocos2x 项目中实现用于 Android Market 应用内计费的 Google 代码? 将不胜感激详细的解释(
我有一个在 Play 商店发布的 Android 应用程序。我正在尝试在 App 更新中实现并使用 android 内部轨道共享对其进行测试。 为了在内部轨道上分享,我尝试了关注,一切都给了我相同的结
这可能是一个愚蠢的问题,但我一直找不到答案。应用内购买应存储在设备上的哪个位置?它们是否下载到 bundle 中? 最佳答案 你必须自己存储它们。为了简单起见,我会使用 NSUserDefaults。
我正在尝试执行 inaAppPurchases 并使用以下代码 NSSet *myProductIdentifiers = [NSSet setWithObjects:
我想实现每周自动扣除金额的应用内购买。用户不必一次又一次地输入凭据。它只是通知用户并扣除金额。 喜欢应用程序中的新闻信函功能。每周扣除特定金额。它会要求一次 inapp 凭据,然后它会自动扣除。 我听
我正在使用我自己的服务器验证 App Store 的收据以进行自动续订订阅。并返回状态、收据、latest_receipt、latest_receipt_info、latest_expired_rec
好吧,在你们大发雷霆说它是重复的之前,我已经尝试了互联网上的所有其他答案,但我仍然遇到这个错误。 注意:我使用的是应用内 V3 API。 首先,我创建了应用内产品(我的控制台中已有一个 apk 草稿文
好的,我正在为我的应用实现应用内订阅。循环周期为每月。一切正常 - 我可以从我的测试帐户订阅,正在从购买状态 API 获取信息。 我从购买状态 API 得到的响应是: { "kind": "andro
我正在使用 SwiftyStoreKit 作为小费 jar 的 InApp Purchase Consumable。一切都适用于测试,但根据 this answer并且评论服务器端验证不是必需的,但建
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
是否可以从应用本身获取以本地货币表示的产品价格。例如,如果我通过 Google Play In App billing 以 1 美元的价格销售 Product1。来自英国的客户点击按钮购买产品,Goo
我已经在我的应用程序中实现了应用内购买,但有时它会给我 NPE,下面是堆栈跟踪。如果有人感兴趣,我也可以发布代码。 java.lang.RuntimeException: Unable to star
我已经在一个应用中实现了应用计费,现在我想进一步保护它。阅读它声明的开发人员 Material : In addition to running an obfuscation program, we
当 Firebase 中发生自定义事件时,我们如何测试应用内消息?我的事件在 DebugView firebase 控制台中显示,但在我的应用程序中不显示任何消息对话框仅在应用程序启动时以及我在 Fi
这个问题在这里已经有了答案: How to share in-app-purchases between two Android apps (2 个回答) 4年前关闭。 背景:我曾经在 Play St
我有一个应用程序,因为我需要为Inapp购买添加大约100种产品,我知道所有过程都是一步一步地手动完成的,但是我们还有其他方法可以动态地将许多产品添加为一堆吗? 可能是通过一些xls格式的文件等。 因
我有一个移动应用,其中包含一些用户可以购买的应用内商品。一旦用户购买了一些应用内产品,应用就会将 JSON 收据发送到我的服务器,以便根据我的 Google 开发者公钥(存储在服务器中)进行在线验证。
我正在为应用内购买实现 anjlab 库。我尝试购买商品。有时我收到错误。错误代码为 102。如果我再次尝试 t0 购买,则购买成功且不显示 google 购买对话框。我在关注。 https://gi
使用 implementation 'com.google.firebase:firebase-analytics:17.2.1' implementation 'com.google.firebas
我的应用目前已上线。在提交过程中,我没有检查 inapp 购买,也没有提交审核。现在该应用程序已上线,但我无法提交应用内购买,但按钮已禁用。如何在不重新上传新版本的情况下再次提交 inapp 购买。任
我是一名优秀的程序员,十分优秀!