Android 订阅 getPurchases

标签 android in-app-billing billing subscriptions

我在我的应用程序中使用订阅,出于测试目的,我使用购买测试订阅的测试开发人员。

我已向该测试开发人员购买了我的应用程序的三个月订阅。之后,我从我的用户帐户中取消了该订阅(这基本上意味着设置更新= false)。一旦我取消订阅,我就可以从应用程序再次购买它(应该“合并”订阅并延迟您的到期时间。例如,如果一个人还剩一个月并再购买三个月,我的新 wxpiry 日期应该是四个月内)。

当我调用 getPurchases() 方法时,返回的数据与我第一次购买时获得的购买数据相同(没有任何变化, token 没有变化,购买日期也没有变化)。

当我使用此数据通过 Google Developer API 向服务器发送请求时(我知道的唯一请求过期日期的方法),返回的过期日期是过去的日期。因此,如果我执行一些业务逻辑,我必须考虑订阅已过期,但尽管如此,它是我在查询 getPurchases() 时从 GooglePlay 收到的数据。在文档中,它说“getPurchases() 方法不会返回失败或过期的订阅。”

所以,我的想法是,当我第二次购买时,必须生成新的购买数据,并使用新的 token 来查询服务器到服务器,但我没有收到它。

对可能发生的事情有什么想法吗?

此外,我想知道在我的 Google 帐户中哪里可以看到这些订单,因为我已经检查了我的商家帐户,但没有看到它们。 谢谢!

最佳答案

鉴于 3 年过去了,我假设您使用的是 Google 应用内结算 v2。

尽管如此,v3 中仍然存在问题(至少对于沙箱/测试帐户而言)和同步。您实际上只能依靠 Google In-App Billing v3 API (GIABAPIv3) 在成功完成付款弹出流程后为您提供新的 purchaseTokendeveloperPayload。正如我经常观察到的那样,getPurchases 返回的 purchaseData 可能与现实*不同步。此外,GIABAPIv3 弹出流程的行为可能与现实不同步*。

GIABAPIv3 的 purchaseData 和 GIABAPIv3 弹出流程也可能反射(reflect)错误的 isAutoRenewing 状态!例如,订阅实际上可能会被取消(并过期)*,但 GIABAAPIv3 及其弹出窗口都表明用户仍然订阅。在这种情况下,再次取消(通过 Google Play 应用程序)似乎有助于鼓励 GIABAPv3 保持同步。

"The getPurchases() method does not return failed or expired subscriptions."

与此相反,getPurchases 将返回“已取消”购买的数据。奇怪的是,GDAPI expiryTime 将从正常订阅结束时间更改为取消购买的时间。因此,为了实现您的应用程序继续将用户视为订阅直到订阅结束的理想行为,您的服务器将需要记住原始的到期时间。如果 expiryTime < 订阅结束,则表示购买已取消(并且您应该期望 GDAPI 的 AutoRenewing 也已更改为 false)。 https://developer.android.com/google/play/billing/billing_integrate.html “该调用返回一个 Bundle,其中包含用户拥有的所有 Activity 订阅。一旦订阅过期且未续订,它将不再出现在返回的 Bundle 中。” 这让我得出结论,Google 对上面的“expires”一词和字段名称 expiryTime 的使用很差,它们并不完全相关(expiryTime 将表示取消时间,如果发生这种情况时,真正的到期(订阅结束)将无法通过 GDAPI 获得 - 人们必须记住它或通过 GIABAPIv3^) 中没有购买来推断它。

*此处的现实情况与人类用户的行为以及 Google Developer API (GDAPI) 的说法一致。

^我不能说我见过这种情况发生,这可能是沙箱/测试每日重置的症状。我在现实中看到取消和过期的订阅*在几天后继续出现在 GIABAPIv3 中(只有在 Google Play 应用程序中重新取消才能同步回现实*)。

关于Android 订阅 getPurchases,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37875300/

相关文章:

billing - 为什么我们不能使用prometheus作为计费系统?

Android 长按编辑文本行为

java - 从视频帧读取数据

java - 文本文件正在从网上下载,但 ePub/Pdf 有问题

android - Google Play与应用内结算

java - 如何在用户单击 JButton 时关闭 JFrame 窗口?

java - For 循环不会停止

android - 免费和付费版本的 Android 应用程序的最佳方法?

android - 使用 paypal sdk : PaymentActivity class issue 将 Paypal 集成到 android 应用程序

Android 应用内结算意外响应