Android订阅购买后第二次收到到期通知

问题描述 投票:0回答:1

我对 SubscriptionNotification 有一个奇怪的行为,当我们购买并取消订阅时,我们总共收到 4 条通知:

  • 购买的第一个(08:11:40收到)
{
  "startTimeMillis": "1680768693830", // 2023-04-06 08:11:33
  "expiryTimeMillis": "1680768987284", // 2023-04-06 08:16:27
  "autoRenewing": true,
  "priceCurrencyCode": "EUR",
  "priceAmountMicros": "12990000",
  "countryCode": "FR",
  "developerPayload": "",
  "paymentState": 1,
  "orderId": "GPA.3318-6319-2574-83983",
  "purchaseType": 0,
  "acknowledgementState": 0,
  "kind": "androidpublisher#subscriptionPurchase",
  "obfuscatedExternalAccountId": "44643664-6333-4338-a666-353162316530",
  "obfuscatedExternalProfileId": "78708a15-b7ab-480d-90bf-84e75c4962eb"
}
  • 取消第二个(08:14:32收到)
{
  "startTimeMillis": "1680768693830", // 2023-04-06 08:11:33
  "expiryTimeMillis": "1680768987284", // 2023-04-06 08:16:27
  "autoRenewing": false,
  "priceCurrencyCode": "EUR",
  "priceAmountMicros": "12990000",
  "countryCode": "FR",
  "developerPayload": "",
  "paymentState": 1,
  "cancelReason": 0,
  "userCancellationTimeMillis": "1680768867438", // 2023-04-06 08:14:27
  "orderId": "GPA.3318-6319-2574-83983",
  "purchaseType": 0,
  "acknowledgementState": 1,
  "kind": "androidpublisher#subscriptionPurchase",
  "obfuscatedExternalAccountId": "44643664-6333-4338-a666-353162316530",
  "obfuscatedExternalProfileId": "78708a15-b7ab-480d-90bf-84e75c4962eb"
}
  • 第三个到期(08:16:33收到)
{
  "startTimeMillis": "1680768693830", // 2023-04-06 08:11:33
  "expiryTimeMillis": "1680768988438", // 2023-04-06 08:16:28
  "autoRenewing": false,
  "priceCurrencyCode": "EUR",
  "priceAmountMicros": "12990000",
  "countryCode": "FR",
  "developerPayload": "",
  "cancelReason": 0,
  "userCancellationTimeMillis": "1680768867438", // 2023-04-06 08:14:27
  "orderId": "GPA.3318-6319-2574-83983",
  "purchaseType": 0,
  "acknowledgementState": 1,
  "kind": "androidpublisher#subscriptionPurchase",
  "obfuscatedExternalAccountId": "44643664-6333-4338-a666-353162316530",
  "obfuscatedExternalProfileId": "78708a15-b7ab-480d-90bf-84e75c4962eb"
}
  • 第四个到期(08:34:33 收到)
{
  "startTimeMillis": "1680768693830", // 2023-04-06 08:11:33
  "expiryTimeMillis": "1680768988438", // 2023-04-06 08:16:28
  "autoRenewing": false,
  "priceCurrencyCode": "EUR",
  "priceAmountMicros": "12990000",
  "countryCode": "FR",
  "developerPayload": "",
  "cancelReason": 0,
  "userCancellationTimeMillis": "1680768867438", // 2023-04-06 08:14:27
  "orderId": "GPA.3318-6319-2574-83983",
  "purchaseType": 0,
  "acknowledgementState": 1,
  "kind": "androidpublisher#subscriptionPurchase",
  "obfuscatedExternalAccountId": "44643664-6333-4338-a666-353162316530",
  "obfuscatedExternalProfileId": "78708a15-b7ab-480d-90bf-84e75c4962eb"
}

(我处于测试模式,所以订阅时长为 5 分钟)

第四个不知道从哪里来的,问题是我们再次购买后才寄出

这里是第二次购买的通知(08:34:23收到):

{
  "startTimeMillis": "1680770058278", // 2023-04-06 08:34:18
  "expiryTimeMillis": "1680770354886", // 2023-04-06 08:39:14
  "autoRenewing": true,
  "priceCurrencyCode": "EUR",
  "priceAmountMicros": "12990000",
  "countryCode": "FR",
  "developerPayload": "",
  "paymentState": 1,
  "orderId": "GPA.3314-6552-0681-64757",
  "purchaseType": 0,
  "acknowledgementState": 0,
  "kind": "androidpublisher#subscriptionPurchase",
  "obfuscatedExternalAccountId": "44643664-6333-4338-a666-353162316530",
  "obfuscatedExternalProfileId": "78708a15-b7ab-480d-90bf-84e75c4962eb"
}

可以看到这次的orderId不一样,因为是第二次购买。第一次购买的第四次通知来自哪里?

android in-app-subscription android-billing
1个回答
0
投票

通知3和通知4的信息相同,只是收到的时间不同。

几个可能的原因:

  1. 重复通知:有时,Google Play 会针对同一事件发送重复通知。这是一个已知问题,可能由于网络问题或其他技术原因而发生。您应该确保您的服务器是幂等的,这意味着它可以处理重复的通知而不会引起任何问题。

  2. 实时开发者通知 (RTDN) 重试:如果 Google Play 未从您的服务器收到成功确认(HTTP 200 状态代码),它可能会重试发送通知。确保您的服务器正确确认通知以避免此问题。

  3. 服务器端处理:处理通知的服务器端代码可能存在问题。仔细检查您的代码以确保它不会导致处理收到的通知出现任何问题。

也许还有一些解决方案:

  1. 确保您的服务器正确确认收到的通知,以避免从 Google Play 进行不必要的重试。

  2. 向服务器端代码添加逻辑以删除重复通知。您可以使用“startTimeMillis”、“expiryTimeMillis”和“orderId”字段来唯一标识一个订阅事件。如果您的服务器收到这些字段具有相同值的通知,您可以放心地忽略重复的通知。

  3. 监控并记录服务器收到的通知。这可以帮助您识别通知的任何问题或趋势,并在需要时帮助调试。

© www.soinside.com 2019 - 2024. All rights reserved.