Amazon Simple Notification Service
开发人员指南 (API Version 2010-03-31)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

Google Cloud Messaging for Android 入门

Google Cloud Messaging for Android (GCM) 是一项使您将推送通知消息发送到 Android 应用程序的服务。本节介绍如何获取 GCM 的先决条件以及如何向移动终端节点发送推送通知消息。

GCM 先决条件

要将推送通知消息发送到 Android 应用程序,您需要以下信息:

  • 注册有 GCM 的 Android 应用程序

  • 注册 ID

  • 服务器 API 密钥(发送方身份验证令牌)

如果您已经具备这些先决条件,则可使用 Amazon SNS 控制台或 Amazon SNS API 向移动终端节点发送推送通知消息。有关如何使用 Amazon SNS 控制台的更多信息,请参阅 使用 Amazon SNS 移动推送。有关如何使用 Amazon SNS API 的更多信息,请参阅步骤 4:使用 GCM 将推送通知消息发送到移动终端节点

步骤 1:创建 Google API 项目并启用 GCM 服务

要将推送通知消息发送到 Android 应用程序,您必须有 Google API 项目并启用 GCM 服务。

创建 Google API 项目并启用 GCM 服务

  1. Google API 控制台网站上,验证您拥有 Google API 项目。

  2. 单击 Services (服务) 并确保 Google Cloud Messaging for Android 打开。

步骤 2:获取服务器 API 密钥

要以您的名义与 GCM 通信,Amazon SNS 会使用您的服务器 API 密钥。该密钥将用在后续步骤中,以便将推送通知消息发送到移动终端节点。

获取服务器 API 密钥

  1. Google APIs Console web site (Google API 控制台网站) 上,单击 API Access (API 访问) 并记录带有 Key for server apps (with IP locking) (服务器应用的密钥 (带 IP 锁定)) 标签的服务器 API 密钥。

  2. 如果您尚未创建服务器 API 密钥,请单击 Create new Server key... (新建服务器密钥...)。本节稍后部分将使用此密钥向移动终端节点发送推送通知。

步骤 3:获取来自 GCM 的注册 ID

当您向 GCM 注册应用以接收推送通知消息时,会生成一个注册 ID。Amazon SNS 使用此值来决定将移动推送通知发送给哪个应用和关联设备。

以下步骤介绍如何使用 AWS 提供的示例 Android 应用从 GCM 获取注册 ID。您可以借助此示例 Android 应用开始学习使用 Amazon SNS 推送通知。此示例应用程序需要 Android 软件开发工具包、Google Play 服务软件开发工具包和 Android 支持库软件包。有关这些软件开发工具包的更多信息,请参阅获取 Android 软件开发工具包安装 Google Play 服务软件开发工具包。有关 Android 支持库软件包的更多信息,请参阅支持库设置

注意

提供的示例 Android 应用程序与运行 Android 2.3 或更高版本的物理设备以及运行 Google API 17 或更高版本的虚拟设备兼容。

从 GCM 获取应用的注册 ID

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

  2. AndroidMobilePushApp 文件夹导入您的 IDE 中。在 Eclipse 中,单击 File (文件)Import (导入),展开 Android 文件夹,单击 Existing Android Code Into Workspace (现有的 Android 代码工作区),单击 Next (下一步),浏览到文件夹 AndroidMobilePushApp,单击 OK (确定),然后单击 Finish (完成)

    将 Android 示例应用程序导入您的 IDE 后,需要将您的 Google API 项目的项目编号添加到strings.xml 文件中,该文件包含在示例 Android 应用程序中。

  3. 将 Google API 项目的项目编号添加到 strings.xml 文件中。在 IDE 中 res 文件夹的子文件夹 values (值) 中可以找到该文件。字符串将与下面类似:

    Copy
    <string name="project_number">012345678912</string>
  4. google-play-services.jarandroid-support-v4.jarandroid.jar 添加到 Java 生成路径中。选择 google-play-services.jarandroid-support-v4.jar 进行导出,但不要选择 android.jar 进行导出。

  5. 运行应用程序,查看输出到 Android 记录系统的注册 ID。如果使用具有 Android ADT 插件的 Eclipse,可在 LogCat 显示窗口中查看注册 ID。举例来说,包含注册 ID 的输出如下所示:

    Copy
    06-05 11:50:43.587: V/Registration(14146): Registered, registrationId: = Examplei7fFachkJ1xjlqT64RaBkcGHochmf1VQAr9k-IBJtKjp7fedYPzEwT_Pq3Tu0lroqro1cwWJUvgkcPPYcaXCpPWmG3Bqn-wiqIEzp5zZ7y_jsM0PKPxKhddCzx6paEsyay9Zn3D4wNUJb8m6HXrBf9dqaEw, error = null, unregistered = null

    安装的应用程序就会显示在您的 Android 设备上:

您现在就应该拥有了注册 ID、服务器 API 密钥以及向 GCM 注册的 Android 应用。然后就可以通过使用 Amazon SNS 控制台或 Amazon SNS API 向您设备上的 Android 应用发送通知。要使用 Amazon SNS 控制台,请参阅使用 Amazon SNS 移动推送。要使用 Amazon SNS API,请参阅步骤 4:使用 GCM 将推送通知消息发送到移动终端节点

步骤 4:使用 GCM 将推送通知消息发送到移动终端节点

本部分描述如何将推送通知消息发送到您的移动终端节点。将收集的先决条件信息添加到 AWS 示例文件 SNSMobilePush.java,该文件包含在 snsmobilepush.zip 文件中。

注意

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

将示例添加到 Eclipse

  1. 在 Eclipse 中创建一个新 Java 项目(File (文件) | New (新建) | Java Project (Java 项目))。

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

  3. 在 SNSSamples/src/com/amazonaws/sns/samples/mobilepush 文件夹中,打开 AwsCredentials.properties 文件并添加您的 AWS 安全证书。

将 AWS SDK for Java 添加到生成路径中

  1. 右键单击 Java 项目文件夹,单击 Build Path (生成路径),然后单击 Configure Build Path... (配置生成路径…)

  2. 单击 Libraries (库) 选项卡,然后单击 Add Library... (添加库…)

  3. 单击 AWS SDK for Java (适用于 Java 的 AWS 软件开发工具包),单击 Next (下一步),然后单击 Finish (完成)

将先决条件信息添加到 SNSMobilePush.java

  1. 在 SNSSamples/src/com/amazonaws/sns/samples/mobilepush 文件夹中,在 Eclipse 中打开 SNSMobilePush.java 并取消 sample.demoAndroidAppNotification(); 的注释。如下所示:

    Copy
    SNSMobilePush sample = new SNSMobilePush(sns); // TODO: Uncomment the services you wish to use. sample.demoAndroidAppNotification(); // sample.demoKindleAppNotification(); // sample.demoAppleAppNotification(); // sample.demoAppleSandboxAppNotification(); // sample.demoBaiduAppNotification(); // sample.demoWNSAppNotification(); // sample.demoMPNSAppNotification();
  2. 找到 demoAndroidAppNotification 方法并输入从 GCM 收到的注册 ID 作为注册 ID 字符串的值。举例来说,看起来应如下所示:

    Copy
    String registrationId = = "EXAMPLE-kLMchcX0v3xOxWVhG6TfdBp...KT2TGkvnKyTvLuSpzK_qsHgxVB_UpmcUa7Gl6g3EXAMPLE";
  3. 输入您应用程序的 API 密钥。举例来说,看起来应如下所示:

    Copy
    String serverAPIKey = "EXAMPLExV2lcV2zEKTLNYs625zfk2jh4EXAMPLE";
  4. 输入应用程序的名称。应用程序名称只能由大写和小写 ASCII 字母、数字、下划线、连字符和句点构成,长度必须为 1 到 256 个字符。举例来说,看起来应如下所示:

    Copy
    String applicationName = "gcmpushapp";
  5. 运行应用程序。可以看到输出类似于 IDE 输出窗口中的内容:

    Copy
    =========================================== Getting Started with Amazon SNS =========================================== {PlatformApplicationArn: arn:aws:sns:us-west-2:111122223333:app/GCM/gcmpushapp} {EndpointArn: arn:aws:sns:us-west-2:111122223333:endpoint/GCM/gcmpushapp/5e3e9847-3183-3f18-a7e8-671c3a57d4b3} {"default":"This is the default message","GCM":"{\"delay_while_idle\":true,\"collapse_key\":\"Welcome\",\"data\":{\"message\":\"Visit Amazon!\",\"url\":\"http://www.amazon.com/\"},\"time_to_live\":125,\"dry_run\":false}"} Published. MessageId=1ca8d7d1-c261-5bfc-8689-9db269c4e46c

    在您的 Android 设备上,您应该会看到一条推送通知消息显示在 Android 应用程序中,类似以下内容: