

适用于 Unity 的 AWS 移动 SDK 现已包含在 适用于 .NET 的 AWS SDK。本指南引用适用于 Unity 的 Mobile SDK 的存档版本。有关更多信息，请参阅 [适用于 Unity 的 AWS 移动 SDK 是什么？](what-is-unity-plugin.md)。

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

# Amazon Simple Notification Service
<a name="sns"></a>

使用 Amazon Simple Notification Service (SNS) 和 Unity SDK，您可以编写接收移动推送通知的 iOS 和 Android 应用程序。有关 SNS 的信息，请参阅 [Amazon Simple Notification Service](https://aws.amazon.com/sns/)。

本主题将引导您配置适用于 Unity 的 AWS 开发工具包示例应用程序 SNSExample .unity，使其通过亚马逊 SNS 接收移动推送通知。

你可以使用 SNSExample .unity 示例创建 iOS 和安卓应用程序。iOS 和 Android 的配置步骤不同，请阅读下面对应于您的目标平台的部分。

## 先决条件
<a name="prerequisites"></a>

需要满足以下先决条件。

### 设置 SNS 权限
<a name="set-permissions-for-sns"></a>

当您创建一个 Cognito 身份池时，会生成两个 IAM 角色：
+ Cognito/\$1 <Identity-Pool-Name>Auth\$1 DefaultRole -经过身份验证的用户的默认 IAM 角色
+ Cognito/\$1 <Identity-Pool-Name>Unauth\$1 DefaultRole -未经身份验证的用户的默认 IAM 角色

必须为这些角色添加访问 Amazon SNS 服务的权限。要实现此目的，应按照以下步骤进行：

1. 浏览到 [IAM 控制台](https://console.aws.amazon.com/iam/home)并选择要配置的 IAM 角色。

1. 单击 “**附加策略**”，选择 Amazon SNSFull 访问策略，然后单击 “**附加策略**”。

**注意**  
不建议在生产环境中使用 Amazon A SNSFull ccess，我们在这里使用它来帮助您快速启动并运行。有关为 IAM 角色指定权限的更多信息，请参阅 [IAM 角色权限概述](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_permissions.html)。

### iOS 先决条件
<a name="ios-prerequisites"></a>
+ Apple iOS 开发人员计划成员资格
+ 生成签名身份
+ 创建为推送通知而配置的预置配置文件

您需要在物理设备上运行您的应用程序以接收推送通知。要在设备上运行您的应用程序，您必须拥有 [Apple iOS 开发人员计划成员资格](https://developer.apple.com/programs/ios/)。一旦您拥有了成员资格，就可以使用 Xcode 生成签名身份。有关更多信息，请参阅 Apple 的 [App Distribution Quick Start](https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/Introduction/Introduction.html#//apple_ref/doc/uid/TP40013839) 文档。接下来，您需要一个为推送通知而配置的预置配置文件。有关更多信息，请参阅 Apple 的 [Configuring Push Notifications](https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringPushNotifications/ConfiguringPushNotifications.html#//apple_ref/doc/uid/TP40012582-CH32-SW1) 文档。

### Android 先决条件
<a name="android-prerequisites"></a>
+ 安装 Android SDK
+ 安装 JDK
+ android-support-v4.jar
+ google-play-services.jar

## 配置针对 iOS 的 Unity 示例应用程序
<a name="configuring-the-unity-sample-app-for-ios"></a>

打开 Unity 编辑器并创建一个新项目。通过选择**资产** /导入包/ **自定义包并选择 aws-unity-sdk-sns -2.0.0.1.unitypackage 来**导入**适用于 Unity 的 AWS 开发工具包包**。确保选中 **Importing Package** 对话框中的所有项目，然后单击 **Import**。

### Unity 配置
<a name="unity-configuration"></a>

执行以下步骤来配置 Unity 项目：

1. 在 “**项目**” 窗格中，导航到 “**资源**/**AWSSDK**/**示例**”，然后打开 SNSExample 场景。

1. 在 “**层次结构**” 窗格中，选择 SNSExample。

1. 在 **Inspector** 窗格中，指定您的 Cognito 身份池 ID。

1. 请注意，有一个标签为 **iOS Platform Application ARN** 的文本框，稍后您将生成该信息。

1. 选择 **File**/**Build Settings**，在 **Build Settings** 对话框中，单击 **Scenes in Build** 列表框下的 **Add Current** 按钮将当前场景添加到该生成中。

1. 在 **Platform (平台)** 下，选择 **iOS**，单击 **Player Settings... (播放器设置...)** 按钮，在 Unity 编辑器的 **Inspector Pane (检查器窗格)** 中，单击 iPhone 图标并向下滚动到 **Identification (身份证明)** 部分，并指定一个 **Bundle Identifier (服务包标识符)**。

### iOS 配置
<a name="ios-configuration"></a>

执行以下步骤配置示例来配置 iOS 特定设置：

1. 在 Web 浏览器中，转至 [Apple Developer Member Center](https://developer.apple.com/membercenter/index.action)，单击 **Certificates, Identifiers & Profiles**。

1. 单击 **iOS Apps** 下的 **Identifiers**，单击 Web 页面右上角的加号按钮以添加一个新的 iOS 应用程序 ID，然后输入应用程序 ID 描述。

1. 向下滚动到 **Add ID Suffix** 部分，选择 **Explicit App ID**，然后输入您的服务包标识符。

1. 向下滚动到 **App Services** 部分，并选择 **Push Notifications**。

1. 单击“**Continue**”按钮。

1. 单击 **Submit** 按钮。

1. 单击 **Done** 按钮。

1. 选择您刚刚创建的应用程序 ID，然后单击 **Edit** 按钮。

1. 向下滚动到 **Push Notifications** 部分。

1. 单击 **Development SSL Certificate** 下的 **Create Certificate** 按钮。

1. 按照说明创建证书签名请求 (CSR)、上传请求、下载将用于与 Apple Notification Service (APNS) 通信的 SSL 证书。

1. 回到 **Certificates, Identifiers & Profiles** Web 页面，单击 **Provisioning Profiles** 下的 **All**。

1. 单击右上角的 \$1 按钮以添加新的预置配置文件。

1. 选择 **iOS App Development**，然后单击 **Continue** 按钮。

1. 选择您的应用程序 ID，然后单击 **Continue** 按钮。

1. 选择您的开发人员证书，然后单击 **Continue** 按钮。

1. 选择您的设备，然后单击 **Continue** 按钮。

1. 输入配置文件名称，然后单击 **Generate** 按钮。

1. 下载预置文件后双击以安装预置配置文件。

添加新预置配置文件后，您可能需要在 Xcode 中刷新“预置配置文件”。在 Xcode 中：

1. 选择 **Xcode**/**Preferences** 菜单项。

1. 选择 **Accounts** 选项卡，选择您的 Apple ID，单击 **View Details**。

1. 单击对话框左下角的刷新按钮，以刷新您的预置配置文件并确保显示新配置文件。

### SNS 配置
<a name="sns-configuration"></a>

1. 运行 KeyChain 访问应用程序，选择屏幕左下角的**我的证书**，右键单击您为连接到 APNS 而生成的 SSL 证书，然后选择**导出**，系统将提示您指定文件名称和保护证书的密码。证书将保存在 P12 文件中。

1. 在 Web 浏览器中，转至 [SNS Console](https://console.aws.amazon.com/sns/v2/home)，单击屏幕左侧的 **Applications**。

1. 单击 **Create platform application**，以创建新的 SNS 平台应用程序。

1. 输入 **Application Name**。

1. 对于 **Push notification platform**，选择 **Apple Push Notification Service Sandbox (APNS\$1SANDBOX)**。

1. 单击 **Choose File**，选择导出 SSL 证书时创建的 P12 文件。

1. 输入在导出 SSL 证书时指定的密码，然后单击 **Load Credentials From File**。

1. 单击 **Create platform application**。

1. 选择您刚创建的平台应用程序，然后复制应用程序 ARN。

1. 在 Unity 编辑器中返回您的项目，**SNSExample**在 “**层次结构**” 窗格的 “Ins **pector**” 窗格中进行选择，然后将平台应用程序 ARN 粘贴到标有 iO **S 平台应用程序 AR** N 的文本框中。

1. 选择 **File**/**Build Settings**，单击 **Build** 按钮，这将创建一个 Xcode 项目。

### 使用 Xcode
<a name="using-xcode"></a>

1. 打开 Xcode 项目，在“Project Navigator”中选择项目。

1. 验证服务包标识符是否设置正确。

1. 确保在 **Team** 中指定了 Apple 开发人员账户 – 这是使您的预置配置文件生效所必需的。

1. 生成项目并在设备上运行。

1. 单击 **Register for Notification**，单击 **OK** 以允许通知，应用程序将显示您的设备令牌。

在 [SNS Console](https://console.aws.amazon.com/sns/v2/home) 中，单击 **Applications**，选择您的平台应用程序，单击 **Create Platform Endpoint**，然后输入应用程序显示的设备令牌。

此时，您的应用程序 APNS 和 NSN 完全配置完毕。您可以选择您的平台应用程序，选择终端节点，然后单击 **Publish to endpoint** 以便将推送通知发送到您的设备。

### Unity 示例 (iOS)
<a name="unity-sample-ios"></a>

该示例创建了一个 Cognito AWSCredentials 实例来生成允许应用程序调用 AWS 服务的临时有限范围证书。它还会创建用于与 SNS 通信的 AmazonSimpleNotificationServiceClient 实例。该应用程序显示两个按钮，其标签分别为 **Register for Notification** 和 **Unregister**。

点击 **Register for Notifications (注册通知)** 按钮时将调用 `RegisterDevice()` 方法。`RegisterDevice()` 调用 `UnityEngine.iOS.NotificationServices.RegisterForNotifications`，以指定使用哪些通知类型（警报、声音或徽章）。它还对 APNS 进行异步调用以获取设备令牌。因为没有定义回调，所以 `CheckForDeviceToken` 被重复调用 (多达 10 次) 以检查设备令牌。

当检索到令牌时，调用 `AmazonSimpleNotificationServiceClient.CreatePlatformEndpointAsync()` 来为 SNS 平台应用程序创建终端节点。

此示例现在配置为接收推送通知。您可以浏览到 [SNS Console](https://console.aws.amazon.com/sns/v2/home)，单击页面左侧的 **Applications**，选择平台应用程序，选择终端节点，然后单击 **Publish to endpoint**。选择要使用的终端节点，然后单击 **Publish to Endpoint**。在文本框中键入文本消息，然后单击 **Publish message** 发布消息。

## 配置针对 Android 的 Unity 示例应用程序
<a name="configuring-the-unity-sample-app-for-android"></a>

打开 Unity 编辑器并创建一个新项目。通过选择**资产** /导入包/ **自定义包并选择 aws-unity-sdk-sns -2.0.0.1.unitypackage 来**导入**适用于 Unity 的 AWS 开发工具包包**。确保选中 **Importing Package** 对话框中的所有项目，然后单击 **Import**。

### Unity 配置
<a name="id3"></a>

执行以下步骤来配置 Unity 项目：

1. 在 “**项目**” 窗格中，导航到 “**资源**/**AWSSDK**/**示例**”，然后打开 SNSExample 场景。

1. 在 “**层次结构**” 窗格中，选择 SNSExample。

1. 在 **Inspector** 窗格中，指定您的 Cognito 身份池 ID。

1. 请注意，有标签为 **Android Platform Application ARN** 和 **Google Console Project ID** 的文本框，稍后您将生成这些信息。

1. 选择 **File**/**Build Settings**，在 **Build Settings** 对话框中，单击 **Scenes in Build** 列表框下的 **Add Current** 按钮将当前场景添加到该生成中。

1. 在 **Platform (平台)** 下，选择 **Android**，单击 **Player Settings... (播放器设置...)** 按钮，在 Unity 编辑器的 **Inspector Pane (检查器窗格)** 中，单击 Android 图标并向下滚动到 **Identification (身份证明)** 部分，并指定一个 **Bundle Identifier (服务包标识符)**。

1. 将 android-support-v 4.jar 和 google-play-services .jar 复制到 “**项目**” 窗格的 Ass **et** s/ **P** lugins/ **Android** 目录中。

有关在哪里可以找到 android-support-v 4.jar 的更多信息，请参阅 [Android Support 库设置](https://developer.android.com/tools/support-library/setup.html)。有关如何查找 google-play-services .jar 的更多信息，请参阅[谷歌 APIs 安卓版安装程序](https://developers.google.com/android/guides/setup)。

### Android 配置
<a name="android-configuration"></a>

首先，添加一个新的 Google API 项目：

1. 在 Web 浏览器中，转至 [Google Developers Console](https://console.developers.google.com)，单击 **Create Project**。

1. 在 **New Project** 框中，输入项目名称，记下项目编号 (稍后您会用到它)，然后单击 **Create**。

接下来，为您的项目启用 Google Cloud Messaging (GCM) 服务：

1. 在 Google Developers Console 中，您的新项目应当已经被选中，如果没有，则在页面顶部的下拉菜单中选中。

1. 从页面左侧的侧栏中选择 **APIs & auth**。

1. 在搜索框中，键入“Google Cloud Messaging for Android”，单击下面的 **Google Cloud Messaging for Android** 链接。

1. 单击 **Enable API**。

最后，获取 API 密钥：

1. 在 Google 开发者控制台中，选择并**验证 APIs >** **凭据**。

1. 在 **Public API access** 下，单击 **Create new key**。

1. 在 **Create a new key** 对话框中，单击 **Server key**。

1. 在出现的对话框中，单击 **Create**，然后复制显示的 API 密钥。

稍后，您将使用此 API 密钥来执行身份验证。

### SNS 配置
<a name="id4"></a>

1. 在 Web 浏览器中，转至 [SNS Console](https://console.aws.amazon.com/sns/v2/home)，单击屏幕左侧的 **Applications**。

1. 单击 **Create platform application**，以创建新的 SNS 平台应用程序。

1. 输入 **Application Name**。

1. 对于 **Push notification platform**，选择 **Google Cloud Messaging (GCM)**。

1. 将 API 密钥粘贴到标记为 **API key** 的文本框中。

1. 单击 **Create platform application**。

1. 选择您刚创建的平台应用程序，然后复制应用程序 ARN。

1. 在 Unity 编辑器中返回您的项目，**SNSExample**在 “**层次结构**” 窗格的 “**检查**器” 窗格中进行选择，然后将平台应用程序 ARN 粘贴到标有 **Android 平台**应用程序 ARN 的文本框中，将您的项目编号粘贴到标有 **Google** 控制台项目 ID 的文本框中。

1. 将您的 Android 设备连接到计算机，选择 **File**/**Build Settings**，然后单击 **Build and Run**。

### Unity 示例 (Android)
<a name="unity-sample-android"></a>

该示例创建了一个 Cognito AWSCredentials 实例来生成允许应用程序调用 AWS 服务的临时有限范围证书。它还会创建用于与 SNS 通信的 AmazonSimpleNotificationServiceClient 实例。

该应用程序显示两个按钮，其标签分别为 **Register for Notification** 和 **Unregister**。点击 **Register for Notifications (注册通知)** 按钮时将调用 `RegisterDevice()` 方法。`RegisterDevice()` 调用 `GCM.Register`，这将向 GCM 注册应用程序。GCM 是在示例代码范围内定义的一个类。它执行异步调用来向 GCM 注册应用程序。

当调用回调时，调用 `AmazonSimpleNotificationServiceClient.CreatePlatformEndpointAsync` 来创建平台终端节点以接收 SNS 消息。

此示例现在配置为接收推送通知。您可以浏览到 [SNS Console](https://console.aws.amazon.com/sns/v2/home)，单击页面左侧的 **Applications**，选择平台应用程序，选择终端节点，然后单击 **Publish to endpoint**。选择要使用的终端节点，然后单击 **Publish to Endpoint**。在文本框中键入文本消息，然后单击 **Publish message** 发布消息。