开发者控制台

了解实时通知

了解实时通知

实时通知(RTN)是服务器到服务器的推送通知,可实时提供关于应用内购买的全面数据。可以利用这些信息来监控与客户应用内可购买商品相关的购买状态变更。

实时通知概述

亚马逊会使用收据告知开发者应用程序内商品的用户购买状态。收据中包含开发者提交应用时定义的IAP相关信息及订单状态。目前,要获取最新收据状态,您需要定期遵循拉取模式,通过调用Receipt Verification Service (RVS)查询亚马逊服务。

亚马逊可以使用实时通知提供实时服务器推送通知。亚马逊的RTN服务器会向您的后端服务器发送通知,其中包含与客户购买相关的信息,您收到之后可通过RVS对其进行验证。

可以将实时通知与现有RVS基础架构结合使用。下图展示了RVS流程与RTN流程的交互方式。有关这两个流程的详情,请参阅以下分解步骤。

步骤1-5: 这些步骤遵循IAP应用收据验证文档中RVS概述部分提及的请求流程。

步骤6: 亚马逊实时通知(RTN)向您的应用服务器(开发者的后端服务器)发送关于客户应用内购买的通知消息。

步骤7: 应用服务器向RVS服务器发送验证收据的请求,并获取与收据相关的所有信息。

步骤8: RVS服务器确认收据的有效性,然后返回与收据相关的信息。

无需等待RVS流程(步骤1-5)完成,即可触发实时通知流程(步骤6-8)。两个流程可以同时触发。

先决条件

使用实时通知前,需要确保将环境设置为可接收RTN响应。请确保您的安全后端服务器符合以下要求:

  • 后端服务器需要具备HTTPS终端节点才能接收RTN响应。
  • 后端服务器必须能够处理亚马逊发送的HTTPS POST请求。
  • 后端服务器必须使用来自受信任证书提供方的有效SSL证书。

RTN的动态应用测试

请参阅以下步骤来设置RTN的动态应用测试(LAT)。

  1. 动态应用测试中执行IAP购买。
  2. 亚马逊服务器会返回RTN有效负载,其中包含属性betaProductTransaction=true

实时通知消息详情

实时通知会通过JSON消息递送至您的HTTPS终端节点。每条通知都包含以下JSON有效负载。可以参阅Amazon Simple Notification Service (SNS)开发者指南,了解更多信息。

Message属性实时通知包含了带有下列字段的转义JSON。

字段 数据类型 描述 响应示例
receiptId 字符串 购买的唯一标识符。字符串的最大长度为200个字符,可以包含字母数字值和标点符号 kyplB1fdRX1m6/GNAVW0l6jv9Nl1V/GemSopKBHM84w=
relatedReceipts 映射 与已发送通知相关的其他收据 cancelledReceiptId(SUBSCRIPTION_MODIFIED_IMMEDIATE通知中先前取消的收据的唯一标识符)
appUserId 字符串 代表亚马逊应用商店应用中不同亚马逊客户的标识符。字符串的最大长度为128个字符,可以包含字母数字值和标点符号 wE1EG1gsEZI9q9UnI5YoZ2OxeoVKPdR5bvPMqyKQq5Y=:1:11
notificationType 字符串 通知类型 有关详情和示例,请参阅下一节中的受支持的通知表格。
appPackageName 字符串 标识应用的应用程序包名称 com.myapp.sample.android
timestamp 长整数 Epoch时间 1402008634018
betaProductTransaction 布尔值 表示交易是否针对动态应用测试产品 true/false

支持的通知类型

RTN消息包含了每一类应用内购买(订阅、权利和消费品)的相关信息。下表中描述了当前可用的通知。

亚马逊可能会随时间推移而逐渐添加或更改通知类型。添加新的通知类型后会收到通知。亚马逊通常建议忽略任何不适用的通知类型。

通知类型 描述
CONSUMABLE_CANCELLED 消费品商品已取消(自愿或非自愿)。
CONSUMABLE_PURCHASED 已购买消费品商品。
ENTITLEMENT_CANCELLED 权利商品已取消(自愿或非自愿)。
ENTITLEMENT_PURCHASED 已购买权利商品。
SUBSCRIPTION_PURCHASED 已购买订阅。
SUBSCRIPTION_AUTO_RENEWAL_OFF 已关闭订阅的自动续订功能。
SUBSCRIPTION_CANCELLED 订阅已取消(自愿或非自愿)。
SUBSCRIPTION_EXPIRED 订阅已过期。
SUBSCRIPTION_SCHEDULED_TO_END 由于已关闭自动续订功能,将在预定时间结束订阅。通知会在客户的月度订阅预定结束时间之前10天发送,会在客户半年/年度订阅预定结束时间之前30天发送。
SUBSCRIPTION_AUTO_RENEWAL_ON 订阅的自动续订功能已打开。
SUBSCRIPTION_RENEWED 有效订阅已续订。
SUBSCRIPTION_CONVERTED_FREE_TRIAL_TO_PAID 有效免费试用订阅已转换为付费订阅。
SUBSCRIPTION_IN_GRACE_PERIOD 订阅已进入宽限期(如果启用)。
SUBSCRIPTION_OUT_OF_GRACE_PERIOD 用户修复了曾在宽限期内出现的订阅付款问题/故障。

常见问题解答

有关实时通知的常见问题(FAQ)及其解答。

问题1:实时通知消息的格式是什么?
实时通知会以JSON消息的形式递送至您指定的HTTPS终端节点。有关详细信息,请参阅上文“实时通知消息详情”。
问题2:通知是否会严格按照发布顺序递送?

Amazon SNS服务会尝试按照发布顺序递送发布者的消息。但是,网络问题可能会导致HTTPS终端节点出现乱序消息。建议您查看有效负载中的时间戳属性,检查是否存在乱序消息。

问题3:哪些递送机制可能会受到支持?

目前,我们仅支持将通知递送到HTTPS终端节点。请参阅Amazon SNS文档,了解设置HTTPS终端节点所需的步骤。

问题4:通知流量的来源范围是什么?

流量来源于AWS提供的亚马逊IP地址列表。一旦IP地址空间发生变化,AWS就会提供用于通知订阅者的机制。当前IP地址范围列表请见AWS IP地址范围文档

问题5:如何使用测试交易来测试我的HTTPS终端节点?

可以使用动态应用测试(LAT)来测试HTTPS终端节点。请参阅上文中“RTN的动态应用测试”,了解详细信息。

问题6:我是否需要为所有通知消息调用RVS API?

是的,建议调用Receipt Verification Service (RVS) API以获取关于收据的最新信息。

问题7:与通知消息相关的SLA是什么?

实时通知服务不提供官方延迟SLA。但是,大多数通知应该会在事件发生后几秒钟内发布。

问题8:我可以创建亚马逊IP地址允许列表吗?

可以,但此步骤不是必须步骤。可以批准亚马逊IP地址,这样亚马逊就能与您的服务器通信。请定期检查此列表是否有所变化。