

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

# 将设备令牌与 Amazon SNS 集成以发送移动通知
<a name="mobile-push-send-devicetoken"></a>

当您首次使用通知服务（例如 Apple 推送通知服务 (APNs) 和 Firebase Cloud Messaging (FCM)）注册应用程序和移动设备时，该服务会返回设备令牌或注册 IDs 信息。 tokens/IDs 它们将添加到 Amazon SNS 中，以便使用 API 为应用程序和设备创建终端节点。[https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_PlatformApplication.html)端点创建完成后，系统会返回一个 [https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_Endpoint.html)，Amazon SNS 就会使用它将通知发送到对应的应用程序或设备。

您可以通过以下方式向 Amazon SNS 添加设备令牌或注册 IDs ：
+ 通过手动添加单个令牌 AWS 管理控制台
+ 使用 [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) API 上传多个令牌
+ 为未来的设备注册令牌

****手动添加设备令牌或注册 ID****

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

1. 在导航窗格中，选择**推送通知**。

1. 在**平台应用程序**部分，选择您的应用程序，然后选择**编辑**。如果您尚未创建平台应用程序，请按照[创建 Amazon SNS 平台应用程序](mobile-push-send-register.md)指南立即创建。

1. 选择**创建端点**。

1. 在**Endpoint Token**（端点令牌）框中，输入**令牌**或**注册 ID**，具体取决于您使用的通知服务（例如，FCM 注册 ID）。

1. （可选）在 **User Data**（用户数据）字段中输入其他数据。数据必须采用 UTF-8 编码并且小于 2KB。

1. 选择**创建端点**。

创建了端点后，您可以直接向移动设备发送消息，也可以向订阅了某一 Amazon SNS 主题的移动设备发送消息。

****使用 `CreatePlatformEndpoint` API 上传多个令牌****

以下步骤说明如何使用提供的示例 Java 应用程序（`bulkupload`软件包）将多个令牌（设备令牌或注册 IDs）上传 AWS 到 Amazon SNS。您可以使用本示例应用帮助您开始上传现有令牌。
**注意**  
下面的步骤使用 Eclipse Java IDE。这些步骤假设您已安装 适用于 Java 的 AWS SDK 并且拥有自己的 AWS 安全证书 AWS 账户。有关更多信息，请参阅 [适用于 Java 的 AWS SDK](https://aws.amazon.com/sdkforjava/)。有关更多信息，请参阅《IAM 用户指南》**中的 [AWS 安全性凭证](https://docs.aws.amazon.com/general/latest/gr/getting-aws-sec-creds.html)。

1. 下载并解压缩 [snsmobilepush.zip](samples/snsmobilepush.zip) 文件。

1. 在 Eclipse 中创建一个新的 **Java 项目**，然后将 `SNSSamples` 文件夹导入到该项目中。

1. 下载 [OpenCSV 库](http://sourceforge.net/projects/opencsv/)，并添加到生成路径中。

1. 在 `BulkUpload.properties` 文件中，指定以下项：
   + 您的 `ApplicationArn`（平台应用程序 ARN）。
   + 包含令牌的 CSV 文件的绝对路径。
   + 记录成功和失败令牌的文件名。例如，`goodTokens.csv` 和 `badTokens.csv`。
   + （可选）用于设置分隔符、引用字符以及线程数量的配置。

   完成后的 `BulkUpload.properties` 与下文类似：

   ```
   applicationarn: arn:aws:sns:us-west-2:111122223333:app/FCM/fcmpushapp
   csvfilename: C:\\mytokendirectory\\mytokens.csv
   goodfilename: C:\\mylogfiles\\goodtokens.csv
   badfilename: C:\\mylogfiles\\badtokens.csv
   delimiterchar: ','
   quotechar: '"'
   numofthreads: 5
   ```

1.  运行 **BatchCreatePlatformEndpointSample.java** 应用程序将令牌上传到亚马逊 SNS。成功上传的令牌将记录在 `goodTokens.csv` 中，而格式错误的令牌将记录在 `badTokens.csv` 中。

**为未来的应用程序安装注册设备令牌**

您可以通过以下两个选项来执行此操作：

**使用 Amazon Cognito 服务**  
您的移动应用程序可以使用临时安全凭证来创建端点。建议使用 Amazon Cognito 来生成临时凭证。有关更多信息，请参阅 *[Amazon Cognito 开发人员指南](https://docs.aws.amazon.com/cognito/latest/developerguide/)*。  
要跟踪应用程序[注册](application-event-notifications.md)，请在创建新的 ARNs 终端节点时使用 Amazon SNS 事件接收通知。  
或者，您可以使用 [https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html](https://docs.aws.amazon.com/sns/latest/api/API_ListEndpointsByPlatformApplication.html) API 检索已注册的端点列表。

**使用代理服务器**  
如果您的应用程序基础架构已支持在安装时注册设备，则可以将服务器用作代理。它将通过 [https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html](https://docs.aws.amazon.com/sns/latest/api/API_CreatePlatformEndpoint.html) API 将设备令牌转发给 Amazon SNS。  
Amazon SNS 创建的端点 ARN 将被返回，并可由您的服务器存储起来，以便未来发布消息时使用。