我在我的应用程序中使用订阅,出于测试目的,我使用的是购买测试订阅的测试开发人员。
我已经与该测试开发人员订阅了我的应用程序三个月。之后,我从用户的帐户中取消了该订阅(这基本上意味着设置续订= false)。一旦我取消了订阅,我就可以从应用程序中再次购买它(这是为了“合并”订阅并延迟你的到期时间。例如,如果有一个月还剩下一个月购买更多月份我的新wxpiry日期应该是在四个月内)。
当我调用方法getPurchases()时,我在第一次购买时获得了相同的购买数据(没有任何变化,不是令牌,而是购买日期)。
当我使用此数据使用google开发人员API(我知道请求过期日期的唯一途径)向服务器执行请求服务器时,返回的过期日期是过去的。因此,如果我做一些业务逻辑,我必须考虑订阅已过期,但不过它是我在查询getPurchases()时从GooglePlay收到的数据。在文档中,它说“getPurchases()方法不会返回失败或过期的订阅。”
所以,我在想的是,当我第二次开始时,必须生成一个新的购买数据,新的令牌可以查询服务器到服务器,但我没有收到它。
关于可能发生的事情的任何想法?
此外,我想知道我在哪里可以在我的Google帐户中查看这些订单,因为我已经在我的商家帐户中查看了我看不到它们。 谢谢!
答案 0 :(得分:2)
鉴于3年过去了,我假设您使用的是Google In-App Billing v2。
尽管如此,问题仍然存在于v3中(至少对于沙盒/测试帐户而言)和同步。在成功完成付款弹出流程后,您实际上只能依赖Google In-App Billing v3 API(GIABAPIv3)为您提供新的purchaseToken
和developerPayload
。正如我经常观察到的那样,purchaseData
返回的getPurchases
可能与现实*不同步。此外,GIABAPIv3弹出流程的行为可能与现实*不一致。
GIABAPIv3的purchaseData
有可能反映错误的isAutoRenewing
状态和GIABAPIv3弹出流程!例如,订阅可能在现实中取消(和过期)*但GIABAPIv3和它的弹出窗口都表明用户仍然订阅。在这种情况下,似乎再次取消(通过Google Play应用)有助于鼓励GIABAPIv3同步。
" getPurchases()方法不会返回失败或过期 订阅"
与此相反,getPurchases
将返回'已取消'的数据。购买。奇怪的是,GDAPI expiryTime
将从正常的订阅结束更改为取消购买的时间。因此,为了实现理想的行为,即您的应用程序继续将用户视为订阅直到订阅结束,您的服务器将需要记住原始的到期时间。如果expiryTime
<订阅结束然后它表示购买已取消(并且您应该期望GDAPI的AutoRenewing
也已更改为false)。
https://developer.android.com/google/play/billing/billing_integrate.html
"该调用返回包含用户拥有的所有活动订阅的Bundle。一旦订阅到期而没有续订,它将不再出现在返回的Bundle中。"
这让我得出结论,谷歌使用了“过期”这个词。上面和字段名称expiryTime
很差,它们并不完全相关(如果发生这种情况,expiryTime
将代表取消的时间,并且真正的到期(订阅结束)不会通过GDAPI获得 - 必须记住它或通过GIABAPIv3中缺少购买来推断它。)
*这里的现实与人类用户所做的以及Google Developer API(GDAPI)所说的一致。
^我不能说我已经看到过这种情况,这可能是沙箱/测试每日重置的症状。我已经看到现实中取消和过期的订阅*继续出现在GIABAPIv3中几天之后(仅在Google Play应用中重新取消产生同步回到现实*)。