问题 Android - 如何检查订阅是否续订?


我有一个Android应用程序与可更新的每月订阅。在这个应用程序中,我想在下个月他的订阅继续时通知用户一些信息。

我可以看到商家中心的续订(orderId以例如.0,..1结尾),但在查询库存时,我的采购订单ID与efor eq相同。

{
    "orderId": "GPA.XXXX-YYYY-XXXX-ZZZZZ",
    "packageName": "my.packageName",
    "productId": "my.sku",
    "purchaseTime": 1456398623654,
    "purchaseState": 0,
    "developerPayload": "mypayload",
    "purchaseToken": "token",
    "autoRenewing": true
}

令我困扰的是,buyTime也没有改变。

所以我的问题是:如果有任何方法可以在应用程序中检测到更新发生了吗?

编辑:

我正在使用Google Play Developer API获取订阅信息,然后自行计算续订数量。


3126
2018-04-13 07:30


起源



答案:


返回所有重复的订单ID orderId 的领域 INAPP_PURCHASE_DATA JSON字段(在V3中),每个重复事务都附加一个整数。

订阅订单号

为了帮助您跟踪与给定订阅相关的交易,   Google付款为所有人提供基本商家订单号   订阅的重复发生并表示每个重复交易   通过附加一个整数,如下所示:

GPA.1234-5678-9012-34567 (base order number)
GPA.1234-5678-9012-34567..0 (first recurrence orderID)
GPA.1234-5678-9012-34567..1 (second recurrence orderID)
GPA.1234-5678-9012-34567..2 (third recurrence orderID) ...

但由于 本地缓存 您可能无法获得最新信息。因此,请尝试从应用程序管理器清除缓存,首先查看是否获得了正确的购买信

由于购买查询这种方式不可靠,因此调用Google Play Developer更有意义 Purchases.subscriptions:得到 来自后端的API来获取 购买订阅资源 将返回 expiryTimeMillis 当前订阅。

{
  "kind": "androidpublisher#subscriptionPurchase",
  "startTimeMillis": long,
  "expiryTimeMillis": long,
  "autoRenewing": boolean,
  "priceCurrencyCode": string,
  "priceAmountMicros": long,
  "countryCode": string,
  "developerPayload": string,
  "paymentState": integer,
  "cancelReason": integer
}

5
2018-04-20 09:15



您提供的是一种查询Google Play Developer API以进行订阅的方法,这可以从服务器端完成。但问题是在设备端查询库存。 - Anirudha Agashe
如果在设备端无法可靠地检查,那么尝试其他有助于达到目的的选项是否更好? - random
很公平。但只是因为您知道在文档中他们明确指出,如果订阅已过期或不再有效,则在查询库存时不会返回购买详细信息。我在答案中发布了这个链接。 - Anirudha Agashe
只有订阅已过期,您才能获得其购买详情。但如果它处于活动状态,您将获得其到期时间。如果订阅自动续订,我希望我们能够使用当前的到期时间来计算下一个重复交易的开始时间。通过自动续订订阅,直到没有失败的交易或取消,将有一个有效的订阅。 - random
@random我试图清除我的应用程序的缓存,甚至谷歌游戏商店应用程序,在几个设备(使用相同的谷歌帐户)测试,仍然我得到相同的orderId购买。这是正常的吗?另外我有一个问题:是否有任何后端服务可供使用,我提供所需信息并拨打Google PLay Developer API?我搜索过但没有找到一个。 - Axxxon


答案:


返回所有重复的订单ID orderId 的领域 INAPP_PURCHASE_DATA JSON字段(在V3中),每个重复事务都附加一个整数。

订阅订单号

为了帮助您跟踪与给定订阅相关的交易,   Google付款为所有人提供基本商家订单号   订阅的重复发生并表示每个重复交易   通过附加一个整数,如下所示:

GPA.1234-5678-9012-34567 (base order number)
GPA.1234-5678-9012-34567..0 (first recurrence orderID)
GPA.1234-5678-9012-34567..1 (second recurrence orderID)
GPA.1234-5678-9012-34567..2 (third recurrence orderID) ...

但由于 本地缓存 您可能无法获得最新信息。因此,请尝试从应用程序管理器清除缓存,首先查看是否获得了正确的购买信

由于购买查询这种方式不可靠,因此调用Google Play Developer更有意义 Purchases.subscriptions:得到 来自后端的API来获取 购买订阅资源 将返回 expiryTimeMillis 当前订阅。

{
  "kind": "androidpublisher#subscriptionPurchase",
  "startTimeMillis": long,
  "expiryTimeMillis": long,
  "autoRenewing": boolean,
  "priceCurrencyCode": string,
  "priceAmountMicros": long,
  "countryCode": string,
  "developerPayload": string,
  "paymentState": integer,
  "cancelReason": integer
}

5
2018-04-20 09:15



您提供的是一种查询Google Play Developer API以进行订阅的方法,这可以从服务器端完成。但问题是在设备端查询库存。 - Anirudha Agashe
如果在设备端无法可靠地检查,那么尝试其他有助于达到目的的选项是否更好? - random
很公平。但只是因为您知道在文档中他们明确指出,如果订阅已过期或不再有效,则在查询库存时不会返回购买详细信息。我在答案中发布了这个链接。 - Anirudha Agashe
只有订阅已过期,您才能获得其购买详情。但如果它处于活动状态,您将获得其到期时间。如果订阅自动续订,我希望我们能够使用当前的到期时间来计算下一个重复交易的开始时间。通过自动续订订阅,直到没有失败的交易或取消,将有一个有效的订阅。 - random
@random我试图清除我的应用程序的缓存,甚至谷歌游戏商店应用程序,在几个设备(使用相同的谷歌帐户)测试,仍然我得到相同的orderId购买。这是正常的吗?另外我有一个问题:是否有任何后端服务可供使用,我提供所需信息并拨打Google PLay Developer API?我搜索过但没有找到一个。 - Axxxon


仅当订阅处于活动状态时,才会返回订阅的购买数据。 如果订阅到期,那么在查询库存时您将无法获得此购买数据。

摘录自 链接 

如果定期付款失败(例如,因为客户的付款   信用卡已失效),订阅不续订。该   getPurchases()方法不会返回失败或过期的订阅。


4
2018-04-20 08:30