Amazon SNS 移动应用程序属性
Amazon Simple Notification Service (Amazon SNS) 支持记录推送通知消息的传输状态。配置应用程序属性以后,将针对从 Amazon SNS 发送到移动终端节点的消息向 CloudWatch Logs 发送日志条目。记录消息传输状态有助于提供更好的业务洞察力,例如以下方面:
-
了解推送通知消息是否已从 Amazon SNS 传输到推送通知服务。
-
识别从推送通知服务发送到 Amazon SNS 的响应。
-
确定消息停留时间(发布时间戳与将消息转交给推送通知服务之间的时间差)。
要配置用于消息传输状态的应用程序属性,您可以使用 AWS Management Console、AWS 软件开发工具包 (SDK) 或查询 API。
使用 AWS Management Console配置消息传输状态属性
-
登录 Amazon SNS 控制台
。 -
在导航面板中,指向移动,并选择推送通知。
-
从 Platform applications(平台应用程序)部分中,选择包含要接收 CloudWatch Logs 的终端节点的应用程序。
-
选择 Application Actions (应用程序操作),然后选择 Delivery Status (传输状态)。
-
在传输状态对话框中,选择创建 IAM 角色。
随后您将被重定向至 IAM 控制台。
-
选择Allow(允许)给予 Amazon SNS 写入权限以代表您使用 CloudWatch Logs。
-
现在,返回 Delivery Status(传输状态)对话框,在 Percentage of Success to Sample (0-100) (采样成功百分比 (0-100)) 字段中输入一个数字作为要接收 CloudWatch Logs 的成功消息百分比。
注意
配置用于消息传输状态的应用程序属性以后,所有失败的消息传输都会生成 CloudWatch Logs。
-
最后,选择保存配置。现在您就可以查看和分析包含消息传输状态的 CloudWatch Logs 了。有关使用 CloudWatch 和警报的更多信息,请参阅 CloudWatch 文档
。
Amazon SNS 消息传输状态 CloudWatch 日志示例
为应用程序终端节点配置消息传输状态属性以后,将会生成 CloudWatch Logs。示例日志采用 JSON 格式,如下所示:
SUCCESS
{ "status": "SUCCESS", "notification": { "timestamp": "2015-01-26 23:07:39.54", "messageId": "9655abe4-6ed6-5734-89f7-e6a6a42de02a" }, "delivery": { "statusCode": 200, "dwellTimeMs": 65, "token": "Examplei7fFachkJ1xjlqT64RaBkcGHochmf1VQAr9k-IBJtKjp7fedYPzEwT_Pq3Tu0lroqro1cwWJUvgkcPPYcaXCpPWmG3Bqn-wiqIEzp5zZ7y_jsM0PKPxKhddCzx6paEsyay9Zn3D4wNUJb8m6HXrBf9dqaEw", "attempts": 1, "providerResponse": "{\"multicast_id\":5138139752481671853,\"success\":1,\"failure\":0,\"canonical_ids\":0,\"results\":[{\"message_id\":\"0:1422313659698010%d6ba8edff9fd7ecd\"}]}", "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/FCM/FCMPushApp/c23e42de-3699-3639-84dd-65f84474629d" } }
FAILURE
{ "status": "FAILURE", "notification": { "timestamp": "2015-01-26 23:29:35.678", "messageId": "c3ad79b0-8996-550a-8bfa-24f05989898f" }, "delivery": { "statusCode": 8, "dwellTimeMs": 1451, "token": "examp1e29z6j5c4df46f80189c4c83fjcgf7f6257e98542d2jt3395kj73", "attempts": 1, "providerResponse": "NotificationErrorResponse(command=8, status=InvalidToken, id=1, cause=null)", "destination": "arn:aws:sns:us-east-2:111122223333:endpoint/APNS_SANDBOX/APNSPushApp/986cb8a1-4f6b-34b1-9a1b-d9e9cb553944" } }
有关推送通知服务响应代码的列表,请参阅平台响应代码。
使用 AWS 开发工具包配置消息传输状态属性
AWS SDK
下面的 Java 示例显示了如何使用 SetPlatformApplicationAttributes
API 为推送通知消息的消息传输状态配置应用程序属性。您可以对消息传输状态使用以下属性:SuccessFeedbackRoleArn
、FailureFeedbackRoleArn
和 SuccessFeedbackSampleRate
。SuccessFeedbackRoleArn
和 FailureFeedbackRoleArn
属性用于授予 Amazon SNS 写入权限,以代表您使用 CloudWatch Logs。SuccessFeedbackSampleRate
属性用于指定成功传输消息的采样率百分比 (0-100)。配置 FailureFeedbackRoleArn
属性以后,所有失败的消息传输都会生成 CloudWatch Logs。
SetPlatformApplicationAttributesRequest setPlatformApplicationAttributesRequest = new SetPlatformApplicationAttributesRequest(); Map<String, String> attributes = new HashMap<>(); attributes.put("SuccessFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs"); attributes.put("FailureFeedbackRoleArn", "arn:aws:iam::111122223333:role/SNS_CWlogs"); attributes.put("SuccessFeedbackSampleRate", "5"); setPlatformApplicationAttributesRequest.withAttributes(attributes); setPlatformApplicationAttributesRequest.setPlatformApplicationArn("arn:aws:sns:us-west-2:111122223333:app/FCM/FCMPushApp"); sns.setPlatformApplicationAttributes(setPlatformApplicationAttributesRequest);
有关适用于 Java 的开发工具包的更多信息,请参阅 AWS SDK for Java 入门指南。
平台响应代码
下面是推送通知服务响应代码链接列表:
推送通知服务 | 响应代码 |
---|---|
Amazon Device Messaging(ADM) | 请参阅 ADM 文档中的响应格式 |
Apple Push Notification Service (APNs) | 请参阅本地和远程通知编程指南中的与 APNs 通信 |
Firebase Cloud Messaging (FCM) | 请参阅 Firebase Cloud Messaging 文档中的下游消息错误响应代码 |
适用于 Windows Phone 的 Microsoft 推送通知服务 (MPNS) | 请参阅 Windows 8 开发文档中的 Windows Phone 8 的推送通知服务响应代码 |
Windows 推送通知服务 (WNS) | 请参阅 Windows 8 开发文档中推送通知服务请求和响应标头(Windows 运行时应用程序) |