

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# Amazon SNS 移动应用程序属性
<a name="sns-msg-status"></a>

Amazon Simple Notification Service (Amazon SNS) 支持记录推送通知消息的传输状态。配置应用程序属性后，从 Amazon SNS 发送到移动终端节点的消息的 CloudWatch 日志条目将发送到日志。记录消息传输状态有助于提供更好的业务洞察力，例如以下方面：
+ 了解推送通知消息是否已从 Amazon SNS 传输到推送通知服务。
+ 识别从推送通知服务发送到 Amazon SNS 的响应。
+ 确定消息停留时间（发布时间戳与将消息转交给推送通知服务之间的时间差）。

 要为消息传送状态配置应用程序属性，您可以使用 AWS 软件开发套件 (SDKs) 或查询 API。 AWS 管理控制台

## 使用配置邮件传送状态属性 AWS 管理控制台
<a name="sns-msg-console"></a>

1. 登录 [Amazon SNS 控制台](https://console.aws.amazon.com/sns/home)。

1. 在导航面板中，指向**移动**，并选择**推送通知**。

1. 从**平台应用程序**部分，选择包含要接收 CloudWatch 日志的终端节点的应用程序。

1. 选择 **Application Actions (应用程序操作)**，然后选择 **Delivery Status (传输状态)**。

1. 在**传输状态**对话框中，选择**创建 IAM 角色**。

   随后您将被重定向至 IAM 控制台。

1. 选择 “**允许**”，授予 Amazon SNS 写入权限，让您可以代表您使用 CloudWatch 日志。

1. 现在，返回 “**传送状态**” 对话框中，在 “**成功样本百分比 (0-100)**” 字段中输入一个数字，表示要接收 CloudWatch 日志的成功发送邮件的百分比。
**注意**  
为消息传送状态配置应用程序属性后，所有失败的消息传送都会生成 CloudWatch 日志。

1. 最后，选择**保存配置**。现在，您将能够查看和解析包含消息传送状态的 CloudWatch 日志。有关使用的更多信息 CloudWatch，请参阅[CloudWatch文档](https://aws.amazon.com/documentation/cloudwatch)。

## Amazon SNS 消息传输状态日志示例 CloudWatch
<a name="sns-msg-examples"></a>

为应用程序终端节点配置消息传送状态属性后，将生成 CloudWatch 日志。示例日志采用 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"
  }
}
```

有关推送通知服务响应代码的列表，请参阅[平台响应代码](#platform-returncodes)。

## 使用配置消息传送状态属性 AWS SDKs
<a name="sns-msg-sdk"></a>

[AWS SDKs](https://aws.amazon.com/tools/)提供了多种语言版本，用于 APIs 在 Amazon SNS 中使用消息传送状态属性。

下面的 Java 示例显示了如何使用 `SetPlatformApplicationAttributes` API 为推送通知消息的消息传输状态配置应用程序属性。您可以对消息传输状态使用以下属性：`SuccessFeedbackRoleArn`、`FailureFeedbackRoleArn` 和 `SuccessFeedbackSampleRate`。`SuccessFeedbackRoleArn`和`FailureFeedbackRoleArn`属性用于向 Amazon SNS 授予代表您使用 CloudWatch 日志的写入权限。`SuccessFeedbackSampleRate` 属性用于指定成功传输消息的采样率百分比 (0-100)。配置该`FailureFeedbackRoleArn`属性后，所有失败的消息传送都会生成 CloudWatch 日志。

```
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 的开发工具包的更多信息，请参阅 [适用于 Java 的 AWS SDK入门指南](https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/get-started.html)。

## 平台响应代码
<a name="platform-returncodes"></a>

下面是推送通知服务响应代码链接列表：


****  

| 推送通知服务 | 响应代码 | 
| --- | --- | 
| Amazon Device Messaging（ADM） | 请参阅 ADM 文档中的[响应格式](https://developer.amazon.com/docs/adm/send-message.html#response-format)。 | 
| 苹果推送通知服务 (APNs) | 请参阅《本地和远程通知编程指南》 APNs中的 “[与之通信](https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CommunicatingwithAPNs.html#/apple_ref/doc/uid/TP40008194-CH11-SW1)” APNs 中的 HTTP/2 响应。 | 
| Firebase Cloud Messaging (FCM) | 请参阅 Firebase Cloud Messaging 文档中的[下游消息错误响应代码](https://firebase.google.com/docs/cloud-messaging/http-server-ref#error-codes) | 
| 适用于 Windows Phone 的 Microsoft 推送通知服务 (MPNS) | 请参阅 Windows 8 开发文档中的 [Windows Phone 8 的推送通知服务响应代码](https://msdn.microsoft.com/en-us/library/windows/apps/ff941100%28v=vs.105%29.aspx#BKMK_PushNotificationServiceResponseCodes)。 | 
| Windows 推送通知服务 (WNS) | 请参阅 Windows 8 开发文档中[推送通知服务请求和响应标头（Windows 运行时应用程序）](https://msdn.microsoft.com/en-us/library/windows/apps/hh465435.aspx)中的“响应代码”。 | 