teh*_*tro 26 android in-app-billing cordova crosswalk
我的Android应用有问题.我正在尝试实施每月订阅.我创建了IAP,该应用程序处于测试阶段,我注册为测试人员.
购买订阅时,一切都按预期工作.我可以将其作为测试人员购买,这意味着订阅实际上并未收费,而且每天都会续订.
但这是我的问题开始的地方.我总是得到原始收据,原件purchaseTime和purchaseToken.每当应用程序启动时,我都会打电话queryInventoryAsync,我希望得到最新的续订收据.但我总是得到原始收据.
我的想法错了吗?我不应该获得新的收据orderID吗?(如谷歌文档说,我应该得到一个orderID样GPA.blabla..0|1|2.我知道有一些缓存机制,但我已经等了三天,我仍然得到原始顺序,而我应该得到的最新一个.
我总是在人行横道上使用cordova,我使用以下插件进行购买:https://github.com/j3k0/cordova-plugin-purchase.我不知道它是否重要,它不应该因为它使用每个其他插件使用的相同的IABHelper类,但也许它们的代码有问题?
我记录了从通话中收到的确切响应mService.getPurchases(3, mContext.getPackageName(), itemType, continueToken);,它包含错误的数据(原始收据).为什么?:(
有没有其他人有类似的问题?是因为测试订阅了吗?实际购买时会起作用吗?我已经开始使用真钱进行测试,但需要一周的时间才能续订.
非常感谢.
修改:无法从Google Play商店应用中清除缓存.我不能要求我的用户这样做.此外,我测试了这个,它不起作用!
编辑2生产订阅(真钱,没有测试)也不起作用!仍然收到原始收据!
编辑3我还没有解决这个问题.检测续订的正确方法是什么?我应该只在后端运行cronjob并根据Google的Purchase Status API查询每个订阅吗?
编辑4感谢您的回答.我已经在后端使用Purchase Status API来确定订阅是否已续订.但它有点糟糕,如果我获得100.000订阅会导致什么?遍历所有这些并查询Google API的脚本将花费非常漫长的时间......脚本应该每天运行!
但是让我们清理一下.
这是否意味着官方文档已过时?.
是GPA.blabla..0 GPA.blabla..1风格续费死?
编辑2016年12月5日更新:我已经在生产中运行了几个月的订阅,我仍然没有获得..0,..1的续订.我做的是设置每天运行的cronjob.它会通过我的有效订阅并针对Google的Purchase API查询它们.如果API返回的截止日期与我的数据库中保存的日期不同,则表示订阅已续订.
编辑2017年7月6日更新 我仍然依赖我的每日脚本来解析所有订阅,并通过使用Purchases API查询Google来更新其状态https://developers.google.com/android-publisher/api-ref/purchases/subscriptions.到目前为止它一直很好用.
编辑2018年10月7日更新 Google现在提供实时通知:https://developer.android.com/google/play/billing/realtime_developer_notifications
我实现了这些通知,并将它们与每日cronjob一起使用,以获取每个订阅的真实状态和到期日期.
快速提示:批量查询订阅!我做了一些测试,并且我能够在同一个请求中捆绑多达1.000个订阅.该限制是由API的最大响应大小强加的.
小智 1
Google Play 的原始收据是您用来查询 Google Play API 的订阅信息的依据。Apple 的 IAP 工作原理非常相似。对于这些应用内购买机制,您可以使用收据中的 subscriptionId 来查询 Google/Apple 的 API 以确定订阅的有效性。
这些应用内购买机制之所以如此工作,是为了防止欺诈,并且用户可以在无需应用参与的情况下更改订阅信息。
这是您应该感兴趣的 API:
GET /{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{token}
Checks whether a user's subscription purchase is valid and returns its expiry time.
Run Code Online (Sandbox Code Playgroud)
应用内购买验证的一般流程是:
您不应信任设备上的收据中返回的数据,而应仅信任从 Apple/Google 远程 API 返回的数据。
关于此主题的另一个 StackOverflow 讨论:Android:inApp 购买收据验证 google play