Amazon Simple Notification Service
开发人员指南 (API Version 2010-03-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

添加设备令牌或注册 ID

当您首次向通知服务(如 Apple Push Notification Service (APNS) 和 Google Cloud Messaging for Android (GCM))注册应用程序或移动设备时,会从通知服务返回设备令牌或注册 ID。向 Amazon SNS 添加设备令牌或注册 ID 时,会将它们与 PlatformApplicationArn API 一起使用来为应用或设备创建终端节点。当 Amazon SNS 创建终端节点时,会返回一个 EndpointArn。Amazon SNS 就是通过 EndpointArn 知道要向哪个应用或移动设备发送通知消息的。

您可以通过以下方法将设备令牌和注册 ID 添加到 Amazon SNS:

  • 使用 AWS 管理控制台 向 AWS 手动添加单一令牌

  • 使用 AWS 管理控制台 将现有令牌从 CSV 文件迁移到 AWS

  • 使用 CreatePlatformEndpoint API 上传多个令牌

  • 从将来会安装您的应用的设备注册令牌

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

  1. 转到 https://console.amazonaws.cn/sns/v2/home,依次单击 Apps、您的应用程序和 Add Endpoints

  2. Endpoint Token (终端节点令牌) 框中,根据通知服务输入令牌 ID 或注册 ID。例如,对于 ADM 和 GCM,则输入注册 ID。

  3. (可选)在 User Data (用户数据) 中,输入要与终端节点关联的任意信息。 Amazon SNS 不会使用此数据。此数据必须采用 UTF-8 格式,并且必须小于 2KB。

  4. 最后,单击 Add Endpoints (添加终端节点)

    现在已经创建了终端节点,您可以直接向移动设备发送消息,也可以向订阅了某一主题的移动设备发送消息。

从 CSV 文件将现有令牌迁移到 AWS

您可以迁移 CSV 文件中包含的现有令牌。这类 CSV 文件不能大于 2MB。迁移多个令牌时,建议您使用 CreatePlatformEndpoint API。CSV 文件中的每个令牌后都必须换行。举例来说,您的 CSV 文件看起来应如下所示:

Copy
amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz01,"User data with spaces requires quotes" amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz04,"Data,with,commas,requires,quotes" amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz02,"Quoted data requires ""escaped"" quotes" amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz03,"{""key"": ""json is allowed"", ""value"":""endpoint"", ""number"": 1}" amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz05,SimpleDataNoQuotes amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz06,"The following line has no user data" amzn1.adm-registration.v1.XpvSSUk0Rc3hTVVV--TOKEN--KMTlmMWxwRkxMaDNST2luZz07 APBTKzPGlCyT6E6oOfpdwLpcRNxQp5vCPFiFeru9oZylc22HvZSwQTDgmmw9WdNlXMerUPxmpX0w1,"Different token style"
  1. 转到 https://console.amazonaws.cn/sns/v2/home,依次单击 Apps、您的应用程序和 Add Endpoints

  2. 依次单击 Migrate existing tokens over to AWS (迁移现有标记到 AWS)Choose File (选择文件),选择您的 CSV 文件,然后单击 Add Endpoints (添加终端节点)

使用 CreatePlatformEndpoint API 上传多个令牌

以下步骤演示如何使用 AWS 提供的示例 Java 应用程序(bulkupload 软件包)将多个令牌(设备令牌或注册 ID)上传至 Amazon SNS。您可以使用本示例应用帮助您开始上传现有令牌。

注意

下面的步骤使用 Eclipse Java IDE。这些步骤假定您已经安装 AWS SDK for Java,并且您 AWS 账户拥有 AWS 安全证书。有关更多信息,请参阅 AWS SDK for Java。有关证书的更多信息,请参阅 AWS General Reference 中的如何获取安全证书?

  1. 下载并解压缩 snsmobilepush.zip 文件。

  2. 在 Eclipse 中创建一个新的 Java 项目。

  3. SNSSamples 文件夹导入到新建的 Java 项目的顶级目录中。在 Eclipse 中,右键单击 Java 项目的名称,然后单击 Import (导入),展开 General (常规),依次单击 File System (文件系统)Next (下一步),浏览到 SNSSamples 文件夹,单击 OK (确定),然后单击 Finish (完成)

  4. 下载 OpenCSV 库的副本,并添加到 bulkupload 包的生成路径中。

  5. 打开 bulkupload 包中包含的 BulkUpload.properties 文件。

  6. 将以下内容添加到 BulkUpload.properties 中:

    • 要向其添加终端节点的 ApplicationArn

    • 包含令牌的 CSV 文件位置的绝对路径。

    • 要为记录 Amazon SNS 正确解析或解析失败的令牌创建的 CSV 文件的名称(如 goodTokens.csvbadTokens.csv)。

    • (可选)用于指定包含令牌的 CSV 文件中的分隔符和引号的字符。

    • (可选)用于同时创建终端节点的线程数量。默认值为 1 个线程。

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

    Copy
    applicationarn:arn:aws:sns:us-west-2:111122223333:app/GCM/gcmpushapp csvfilename:C:\\mytokendirectory\\mytokens.csv goodfilename:C:\\mylogfiles\\goodtokens.csv badfilename:C:\\mylogfiles\\badtokens.csv delimiterchar:' quotechar:" numofthreads:5
  7. 运行 BatchCreatePlatformEndpointSample.java 应用程序,将令牌上传至 Amazon SNS。

    在本例中,为成功上传至 Amazon SNS 的令牌创建的终端节点将记录到 goodTokens.csv 中,格式不正确的令牌将记录到 badTokens.csv 中。此外,您还应看到写入 Eclipse 控制台的 STD OUT 日志包含与下面类似的内容:

    Copy
    <1>[SUCCESS] The endpoint was created with Arn arn:aws:sns:us-west-2:111122223333:app/GCM/gcmpushapp/165j2214-051z-3176-b586-138o3d420071 <2>[ERROR: MALFORMED CSV FILE] Null token found in /mytokendirectory/mytokens.csv

从将来会安装您的应用的设备注册令牌

您可以使用下面两个选项之一:

  • Use the Amazon Cognito service:您的移动应用将需要证书来创建与您的 Amazon SNS 平台应用程序关联的终端节点。我们建议您使用会在一段时间后过期的临时证书。对于大多数情况,我们建议您使用 Amazon Cognito 创建临时安全证书。有关更多信息,请参阅 Amazon Cognito 开发人员指南。如果您希望在有应用向 Amazon SNS 注册时收到通知,可以进行注册,以便接收提供新终端节点 ARN 的 Amazon SNS 事件。您也可以使用 ListEndpointByPlatformApplication API 获取向 Amazon SNS 注册的终端节点的完整列表。

  • Use a proxy server:如果您的应用程序基础设施已经过设置,可使您的移动应用程序在每次安装时进行调用和注册,则可以继续使用此设置。您的服务器将充当代理服务器并将设备令牌传递给 Amazon SNS 移动推送通知,同时传递要存储的所有用户数据。为此,代理服务器将使用您的 AWS 凭据连接 Amazon SNS,并使用 CreatePlatformEndpoint API 调用上传令牌信息。将返回新创建的终端节点Amazon 资源名称 (ARN),服务器可以存储该终端节点以便对 Amazon SNS 进行后续的发布调用。