实时开发者通知参考指南

本主题列出并描述了您可以从 Google Play 收到的实时开发者通知的类型。

编码

发布到 Cloud Pub/Sub 主题的每个发布包含一个单独的 base64 编码数据字段。

{
  "message": {
    "attributes": {
      "key": "value"
    },
    "data": "eyAidmVyc2lvbiI6IHN0cmluZywgInBhY2thZ2VOYW1lIjogc3RyaW5nLCAiZXZlbnRUaW1lTWlsbGlzIjogbG9uZywgIm9uZVRpbWVQcm9kdWN0Tm90aWZpY2F0aW9uIjogT25lVGltZVByb2R1Y3ROb3RpZmljYXRpb24sICJzdWJzY3JpcHRpb25Ob3RpZmljYXRpb24iOiBTdWJzY3JpcHRpb25Ob3RpZmljYXRpb24sICJ0ZXN0Tm90aWZpY2F0aW9uIjogVGVzdE5vdGlmaWNhdGlvbiB9",
    "messageId": "136969346945"
  },
  "subscription": "projects/myproject/subscriptions/mysubscription"
}

解码 base64 编码数据字段后,DeveloperNotification 包含以下字段

{
  "version": string,
  "packageName": string,
  "eventTimeMillis": long,
  "oneTimeProductNotification": OneTimeProductNotification,
  "subscriptionNotification": SubscriptionNotification,
  "voidedPurchaseNotification": VoidedPurchaseNotification,
  "testNotification": TestNotification
}

以下表格描述了这些字段。

属性名称 描述
version 字符串 此通知的版本。最初,此版本为“1.0”。此版本与其他版本字段不同。
packageName 字符串 此通知相关的应用的包名称(例如,`com.some.thing`)。
eventTimeMillis 长整型 事件发生的时间戳,以自纪元以来的毫秒数表示。
subscriptionNotification SubscriptionNotification 如果此字段存在,则此通知与订阅相关,并且此字段包含与订阅相关的其他信息。请注意,此字段与 oneTimeProductNotification、voidedPurchaseNotification 和 testNotification 互斥。
oneTimeProductNotification OneTimeProductNotification 如果此字段存在,则此通知与一次性购买相关,并且此字段包含与购买相关的其他信息。请注意,此字段与 subscriptionNotification、voidedPurchaseNotification 和 testNotification 互斥。
voidedPurchaseNotification VoidedPurchaseNotification 如果此字段存在,则此通知与已作废的购买相关,并且此字段包含与已作废的购买相关的其他信息。请注意,此字段与 oneTimeProductNotification、subscriptionNotification 和 testNotification 互斥。
testNotification TestNotification 如果此字段存在,则此通知与测试发布相关。这些仅通过 Google Play 开发者控制台发送。请注意,此字段与 oneTimeProductNotification、subscriptionNotification 和 voidedPurchaseNotification 互斥。

SubscriptionNotification

A SubscriptionNotification 包含以下字段

{
  "version": string,
  "notificationType": int,
  "purchaseToken": string,
  "subscriptionId": string
}
属性名称 描述
version 字符串 此通知的版本。最初,此版本为“1.0”。此版本与其他版本字段不同。
notificationType 整型 订阅的 notificationType 可以具有以下值
  • (1) SUBSCRIPTION_RECOVERED - 订阅已从账户冻结中恢复。
  • (2) SUBSCRIPTION_RENEWED - 活动订阅已续订。
  • (3) SUBSCRIPTION_CANCELED - 订阅已自愿或非自愿取消。对于自愿取消,在用户取消时发送。
  • (4) SUBSCRIPTION_PURCHASED - 已购买新的订阅。
  • (5) SUBSCRIPTION_ON_HOLD - 订阅已进入账户冻结(如果已启用)。
  • (6) SUBSCRIPTION_IN_GRACE_PERIOD - 订阅已进入宽限期(如果已启用)。
  • (7) SUBSCRIPTION_RESTARTED - 用户已从Play > 账户 > 订阅恢复其订阅。订阅已取消,但在用户恢复时尚未过期。有关更多信息,请参阅恢复
  • (8) SUBSCRIPTION_PRICE_CHANGE_CONFIRMED - 用户已成功确认订阅价格变更。
  • (9) SUBSCRIPTION_DEFERRED - 订阅的重复时间已延长。
  • (10) SUBSCRIPTION_PAUSED - 订阅已暂停。
  • (11) SUBSCRIPTION_PAUSE_SCHEDULE_CHANGED - 订阅暂停计划已更改。
  • (12) SUBSCRIPTION_REVOKED - 订阅已在到期时间之前从用户处撤销。
  • (13) SUBSCRIPTION_EXPIRED - 订阅已过期。
  • (20) SUBSCRIPTION_PENDING_PURCHASE_CANCELED - 订阅的待处理交易已取消。
purchaseToken 字符串 用户购买订阅时提供给其设备的令牌。
subscriptionId 字符串 已购买订阅的产品 ID(例如,“monthly001”)。

示例

以下是一个新订阅购买通知的示例

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503349566168",
  "subscriptionNotification":
  {
    "version":"1.0",
    "notificationType":4,
    "purchaseToken":"PURCHASE_TOKEN",
    "subscriptionId":"monthly001"
  }
}

OneTimeProductNotification

一个OneTimeProductNotification包含以下字段

{
  "version": string,
  "notificationType": int,
  "purchaseToken": string,
  "sku": string
}
属性名称 描述
version 字符串 此通知的版本。最初,这将是“1.0”。此版本与其他版本字段不同。
notificationType 整型 通知的类型。它可以具有以下值
  • (1) ONE_TIME_PRODUCT_PURCHASED - 用户成功购买了一次性产品。
  • (2) ONE_TIME_PRODUCT_CANCELED - 用户已取消待处理的一次性产品购买。
purchaseToken 字符串 购买时提供给用户设备的令牌。
sku 字符串 已购买的一次性产品 ID(例如,“sword_001”)

示例

以下是一个新的单次购买通知的示例

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503349566168",
  "oneTimeProductNotification":
  {
    "version":"1.0",
    "notificationType":1,
    "purchaseToken":"PURCHASE_TOKEN",
    "sku":"my.sku"
  }
}

VoidedPurchaseNotification

一个VoidedPurchaseNotification包含以下字段

属性名称

描述

purchaseToken

字符串

与已作废的购买关联的令牌。在发生新的购买时,会向开发者提供此信息。

orderId

字符串

与已作废的交易关联的唯一订单 ID。对于一次性购买,这表示为购买生成的唯一订单 ID。对于自动续订订阅,每次续订交易都会生成一个新的订单 ID。

productType

整型

已作废购买的productType可以具有以下值

  • (1) PRODUCT_TYPE_SUBSCRIPTION - 订阅购买已被作废。
  • (2) PRODUCT_TYPE_ONE_TIME - 一次性购买已被作废。

refundType

整型

已作废购买的refundType可以具有以下值

  • (1) REFUND_TYPE_FULL_REFUND - 购买已完全作废。
  • (2) REFUND_TYPE_QUANTITY_BASED_PARTIAL_REFUND - 购买已通过基于数量的部分退款部分作废,仅适用于多数量购买。购买可以多次部分作废。

请注意,当多数量购买的剩余总数量获得退款时,refundType将为REFUND_TYPE_FULL_REFUND

示例

以下是一个新的已作废购买通知的示例

{
  "version":"1.0",
  "packageName":"com.some.app",
  "eventTimeMillis":"1503349566168",
  "voidedPurchaseNotification":
  {
    "purchaseToken":"PURCHASE_TOKEN",
    "orderId":"GS.0000-0000-0000",
    "productType":1
    "refundType":1
  }
}

使用 VoidedPurchaseNotification

当您的 RTDN 客户端收到VoidedPurchaseNotification时,请注意以下信息

  • packageName:这标识了应用。
  • eventTimeMillis:这通知开发者状态更改发生的时间。
  • purchaseToken:产品购买时提供给用户设备的令牌。
  • orderId:这标识了与已作废交易关联的订单。
  • productType:这会告诉您已作废的购买是应用内购买还是订阅。
  • refundType:这会告诉您作废购买的退款类型。

如果您只需要进行权利调整以找到正确的购买和订单,那么您现在已经拥有了所有必要的信息。要了解如何获取有关已作废购买的其他信息,请查看Google Play 已作废购买 API,这是一个拉取模型,可在给定时间戳之间为已作废购买提供其他数据。

对于部分作废的多数量购买,purchases.products提供的refundableQuantity字段包含尚未作废的已购买产品的剩余数量。

TestNotification

一个TestNotification包含以下字段

{
  "version": string
}
属性名称 描述
version 字符串 此通知的版本。最初,此版本为“1.0”。此版本与其他版本字段不同。

示例

以下是一个测试通知的示例

{
  "version":"1.0",
  "packageName":"com.some.thing",
  "eventTimeMillis":"1503350156918",
  "testNotification":
  {
    "version":"1.0"
  }
}