4.4.3
0.61.6
安卓
首先,感谢您为制作和维护这个库所做的一切努力,非常感谢。
getAvailablePurchases()
不应退回已取消(未续订)的订阅
在测试环境下(使用测试卡测试账户),当我在我的应用程序上订阅并在expiracytime
之前取消订阅时(在测试帐户中购买后5分钟),我的订阅不会被列出在超过到期时间时getAvailablePurchases()
的结果。 这是一种理想的行为。
但是,如果我让我的订阅续订(在续订期之前不取消),然后在此之后取消订阅,即使超过了到期时间, getAvailablePurchases()
仍会列出我的订阅。 我的问题是,为什么它仍然列出我不再订阅的订阅?
另外,我想知道有关getAvailablePurchases()
的详细信息,它是否会调用 google billing 来检索可用的购买? 还是在本地保留采购清单?
测试设置: https :
真机
订阅订阅,让它更新,然后取消。 订阅仍将列为可用购买
我想补充几个问题。 如果我们不使用后端服务进行验证会怎样。 我如何理解用户完成和取消的订阅。 我该如何处理?
同样在我的沙箱帐户中有 6 个订阅产品。 都是主动的怎么可能?
对于 IOS。
由于存在被黑客入侵的风险,Apple 强烈建议使用服务器验证。
我编写了一个后端 API,它接收用户的收据并进行验证。 如果没有找到最新的交易,则意味着该用户尚未订阅,因此我将该用户设为非高级用户(或您想做的任何事情)。 我在应用程序打开时调用此 API。 我的应用程序每天检查。
我也看到与getAvailablePurchases
类似的行为。 预期的行为是在取消订阅后, getAvailablePurchases
方法应该返回购买直到它过期。 到期后,购买不应出现在getAvailablePurchases
结果中(如果因重复订阅付款失败导致到期,则增加 5 分钟的宽限期)。
实际行为是在取消订阅后, getAvailablePurchases
方法返回一个包含订阅购买的数组, _甚至在订阅SubscriptionPurchase
对象中, autoRenewingAndroid
属性设置为false
。
我不知道何时从getAvailablePurchases
返回的结果中删除了购买。 有人知道吗?
@darriuk我刚刚测试了取消订阅并确认autoRenewingAndroid
属性设置为false
。 但! 仅当用户明确取消订阅时。 如果由于拒绝付款而取消订阅,订阅将永远保持有效。 这对于订阅来说确实是个大问题,并且没有解决方法。 我有一个想法来比较transactionDate
,如果这个日期落后于订阅期限,那么请取消我这边的服务。 但似乎transactionDate
始终是订阅付款的第一个日期。
@vkachan据我记得transactionDate
确实总是用于第一次订阅付款。
我的一个更新:我在取消订阅大约 22 小时后再次运行getAvailablePurchases
,它最终返回一个空数组。 看起来 Google 的计费服务器需要很长时间才能更新响应。
我今天将尝试拒绝订阅付款,看看从getAvailablePurchases
响应中删除需要多长时间。
更新
我测试了拒绝订阅付款, getAvailablePurchases
花了大约 32 小时才返回一个空数组。 所以购买_确实
可以确认@darriuk在说什么。 我运行了一个测试订阅,它结束了,然后订阅从getAvailablePurchases
开始仍然显示为活动状态大约 24 小时。 也许有某种方法可以强制 Google 重新加载? 🤔
有类似的问题,在客户端处理 iap 是一团糟,现在使用react-native-iaphub 。
Iaphub 负责服务器收据验证。
@tomerdev您对 iaphub 的体验如何? 我正在考虑转而使用它,但想看看另一个开发人员对该产品的看法。
@captaincole使用
它确实为我节省了很多时间。 如果你不能花很多时间来处理 IAP,我会推荐它,我个人更喜欢专注于我的应用程序。
您好,最近好像没有关于这个问题的活动。 问题已解决,还是仍需要社区关注? 如果没有进一步的活动发生,这个问题可能会被关闭。 您也可以将此问题标记为“供讨论”或“好的第一期”,我将保持开放。 感谢你的贡献。
在长时间不活动后关闭此问题。 如果这个问题在最新版本中仍然存在,请随时创建一个包含最新信息的新问题。
最有用的评论
@darriuk我刚刚测试了取消订阅并确认
autoRenewingAndroid
属性设置为false
。 但! 仅当用户明确取消订阅时。 如果由于拒绝付款而取消订阅,订阅将永远保持有效。 这对于订阅来说确实是个大问题,并且没有解决方法。 我有一个想法来比较transactionDate
,如果这个日期落后于订阅期限,那么请取消我这边的服务。 但似乎transactionDate
始终是订阅付款的第一个日期。