实时通知概述
亚马逊会使用收据告知开发者应用程序内商品的用户购买状态。收据中包含开发者提交应用时定义的IAP相关信息及订单状态。目前,要获取最新收据状态,您需要定期遵循
拉取模式
,通过调用
收据验证服务 (RVS)
查询亚马逊服务。
亚马逊可以使用实时通知提供实时
服务器
推送通知
。亚马逊的RTN服务器会向您的后端服务器发送通知,其中包含与客户购买相关的信息,您收到之后可通过RVS对其进行验证。
可以将实时通知与现有RVS基础架构结合使用。下图展示了RVS流程与RTN流程的交互方式。有关这些流程的详情,请参阅以下分解步骤。
步骤1-5
: 这些步骤遵循
收据验证服务概述
中提及的请求流程。
步骤6
: 亚马逊实时通知(RTN)向您的应用服务器(开发者的后端服务器)发送关于客户应用内购买的通知消息。
步骤7
: 应用服务器向RVS服务器发送验证收据的请求,并获取与收据相关的所有信息。
步骤8
: RVS服务器确认收据的有效性,然后返回与收据相关的信息。
无需等待RVS流程(步骤1-5)完成,即可触发实时通知流程(步骤6-8)。两个流程可以同时触发。
注意:
实时通知旨在成为RVS之外的补充通知系统。应继续将RVS用作主要的收据验证模式。
使用实时通知前,需要确保将环境设置为可接收RTN响应。请确保您的安全后端服务器符合以下要求:
后端服务器需要具备HTTPS终端节点才能接收RTN响应。
后端服务器必须能够处理亚马逊发送的HTTPS POST请求。
后端服务器必须使用来自受信任证书提供方的有效SSL证书。
RTN的动态应用测试
请参阅以下步骤来设置RTN的动态应用测试 (LAT)。
在
动态应用测试
中执行IAP购买。
亚马逊服务器会返回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消息包含了每一类应用内购买(订阅、权利和消费品)的相关信息。下表中描述了当前可用的通知。
亚马逊可能会随时间推移而逐渐添加或更改通知类型。添加新的通知类型后会收到通知。亚马逊通常建议忽略任何不适用的通知类型。
注意:
通知类型将来可能会发生变化,因此需要妥善处理无法识别的通知类型。请查询RVS API以获取最新的收据信息,因为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
用户修复了曾在宽限期内出现的订阅付款问题/故障。
问题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?
是的,建议调用
收据验证服务 (RVS) API
以获取关于收据的最新信息。
问题7:与通知消息相关的SLA是什么?
实时通知服务不提供官方延迟SLA。但是,大多数通知应该会在事件发生后几秒钟内发布。
问题8:我可以创建亚马逊IP地址允许列表吗?
可以,但此步骤不是必须步骤。可以批准
亚马逊IP地址
,这样亚马逊就能与您的服务器通信。请定期检查此列表是否有所变化。