Amazon Simple Notification Service - 适用于 Unity 的 AWS Mobile SDK

AWS SDK for .NET 现在随附适用于 Unity 的 AWS Mobile SDK。本指南引用适用于 Unity 的 Mobile SDK 的存档版本。有关更多信息,请参阅什么是适用于 Unity 的 AWS Mobile SDK?

Amazon Simple Notification Service

使用 Amazon Simple Notification Service (SNS) 和 Unity SDK,您可以编写接收移动推送通知的 iOS 和 Android 应用程序。有关 SNS 的信息,请参阅 Amazon Simple Notification Service

本主题将指导您完成配置适用于 Unity 的 AWS SDK 的示例应用程序 SNSExample.unity,以通过 Amazon SNS 接收移动推送通知。

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

先决条件

需要满足以下先决条件。

设置 SNS 权限

当您创建一个 Cognito 身份池时,会生成两个 IAM 角色:

  • Cognito/_<Identity-Pool-Name>Auth_DefaultRole – 经过身份验证的用户的默认 IAM 角色

  • Cognito/_<Identity-Pool-Name>Unauth_DefaultRole – 未经身份验证的用户的默认 IAM 角色

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

  1. 浏览到 IAM 控制台并选择要配置的 IAM 角色。

  2. 单击 Attach Policy,选择 AmazonSNSFullAccess 策略,然后单击 Attach Policy

注意

我们不建议在生产环境中使用 AmazonSNSFullAccess,在此使用是为了让您快速启动并运行。有关为 IAM 角色指定权限的更多信息,请参阅 IAM 角色权限概述

iOS 先决条件

  • Apple iOS 开发人员计划成员资格

  • 生成签名身份

  • 创建为推送通知而配置的预置配置文件

您需要在物理设备上运行您的应用程序以接收推送通知。要在设备上运行您的应用程序,您必须拥有 Apple iOS 开发人员计划成员资格。一旦您拥有了成员资格,就可以使用 Xcode 生成签名身份。有关更多信息,请参阅 Apple 的 App Distribution Quick Start 文档。接下来,您需要一个为推送通知而配置的预置配置文件。有关更多信息,请参阅 Apple 的 Configuring Push Notifications 文档。

Android 先决条件

  • 安装 Android SDK

  • 安装 JDK

  • android-support-v4.jar

  • google-play-services.jar

配置针对 iOS 的 Unity 示例应用程序

打开 Unity 编辑器并创建一个新项目。导入适用于 Unity 的 AWS SDK,方法是选择 Assets/Import Package/Custom Package,然后选择 aws-unity-sdk-sns-2.0.0.1.unitypackage。确保选中 Importing Package 对话框中的所有项目,然后单击 Import

Unity 配置

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

  1. Project 窗格中,导航到 Assets/AWSSDK/examples,然后打开 SNSExample 场景。

  2. Hierarchy 窗格中,选择 SNSExample。

  3. Inspector 窗格中,指定您的 Cognito 身份池 ID。

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

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

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

iOS 配置

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

  1. 在 Web 浏览器中,转至 Apple Developer Member Center,单击 Certificates, Identifiers & Profiles

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

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

  4. 向下滚动到 App Services 部分,并选择 Push Notifications

  5. 单击“Continue”按钮。

  6. 单击 Submit 按钮。

  7. 单击 Done 按钮。

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

  9. 向下滚动到 Push Notifications 部分。

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

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

  12. 回到 Certificates, Identifiers & Profiles Web 页面,单击 Provisioning Profiles 下的 All

  13. 单击右上角的 + 按钮以添加新的预置配置文件。

  14. 选择 iOS App Development,然后单击 Continue 按钮。

  15. 选择您的应用程序 ID,然后单击 Continue 按钮。

  16. 选择您的开发人员证书,然后单击 Continue 按钮。

  17. 选择您的设备,然后单击 Continue 按钮。

  18. 输入配置文件名称,然后单击 Generate 按钮。

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

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

  1. 选择 Xcode/Preferences 菜单项。

  2. 选择 Accounts 选项卡,选择您的 Apple ID,单击 View Details

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

SNS 配置

  1. 运行 KeyChain 访问应用程序,选择屏幕左下角的 My Certificates,右键单击生成的 SSL 证书以连接到 APNS,选择 Export,系统将提示您指定文件的名称和密码以保护证书。证书将保存在 P12 文件中。

  2. 在 Web 浏览器中,转至 SNS Console,单击屏幕左侧的 Applications

  3. 单击 Create platform application,以创建新的 SNS 平台应用程序。

  4. 输入 Application Name

  5. 对于 Push notification platform,选择 Apple Push Notification Service Sandbox (APNS_SANDBOX)

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

  7. 输入在导出 SSL 证书时指定的密码,然后单击 Load Credentials From File

  8. 单击 Create platform application

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

  10. 回到 Unity 编辑器中您的项目上,选择 Hierarchy 窗格中的 SNSExample,在 Inspector 窗格中,将平台应用程序 ARN 粘贴到标签为 iOS Platform Application ARN 的文本框中。

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

使用 Xcode

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

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

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

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

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

SNS Console 中,单击 Applications,选择您的平台应用程序,单击 Create Platform Endpoint,然后输入应用程序显示的设备令牌。

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

Unity 示例 (iOS)

该示例创建一个 CognitoAWSCredentials 实例来生成临时的有限范围凭证,以允许应用程序调用 AWS 服务。它还创建了一个 AmazonSimpleNotificationServiceClient 实例来与 SNS 进行通信。该应用程序显示两个按钮,其标签分别为 Register for NotificationUnregister

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

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

此示例现在配置为接收推送通知。您可以浏览到 SNS Console,单击页面左侧的 Applications,选择平台应用程序,选择终端节点,然后单击 Publish to endpoint。选择要使用的终端节点,然后单击 Publish to Endpoint。在文本框中键入文本消息,然后单击 Publish message 发布消息。

配置针对 Android 的 Unity 示例应用程序

打开 Unity 编辑器并创建一个新项目。导入适用于 Unity 的 AWS SDK,方法是选择 Assets/Import Package/Custom Package,然后选择 aws-unity-sdk-sns-2.0.0.1.unitypackage。确保选中 Importing Package 对话框中的所有项目,然后单击 Import

Unity 配置

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

  1. Project 窗格中,导航到 Assets/AWSSDK/examples,然后打开 SNSExample 场景。

  2. Hierarchy 窗格中,选择 SNSExample。

  3. Inspector 窗格中,指定您的 Cognito 身份池 ID。

  4. 请注意,有标签为 Android Platform Application ARNGoogle Console Project ID 的文本框,稍后您将生成这些信息。

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

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

  7. 将 android-support-v4.jar 和 google-play-services.jar 复制到 Project 窗格的 Assets/Plugins/Android 目录中。

有关在何处找到 android-support-v4.jar 的更多信息,请参阅 Android 支持库设置。有关如何查找 google-play-services.jar 的更多信息,请参阅适用于 Android 设置的 Google API

Android 配置

首先,添加一个新的 Google API 项目:

  1. 在 Web 浏览器中,转至 Google Developers Console,单击 Create Project

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

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

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

  2. 在页面左侧的边栏中,选择 APIs & auth

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

  4. 单击 Enable API

最后,获取 API 密钥:

  1. 在 Google Developers Console 中,选择 APIs & auth > Credentials

  2. Public API access 下,单击 Create new key

  3. Create a new key 对话框中,单击 Server key

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

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

SNS 配置

  1. 在 Web 浏览器中,转至 SNS Console,单击屏幕左侧的 Applications

  2. 单击 Create platform application,以创建新的 SNS 平台应用程序。

  3. 输入 Application Name

  4. 对于 Push notification platform,选择 Google Cloud Messaging (GCM)

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

  6. 单击 Create platform application

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

  8. 回到 Unity 编辑器中您的项目上,选择 Hierarchy 窗格中的 SNSExample,在 Inspector 窗格中,将平台应用程序 ARN 粘贴到标签为 Android Platform Application ARN 的文本框,将项目编号粘贴到标签为 Google Console Project ID 的文本框。

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

Unity 示例 (Android)

该示例创建一个 CognitoAWSCredentials 实例来生成临时的有限范围凭证,以允许应用程序调用 AWS 服务。它还创建了一个 AmazonSimpleNotificationServiceClient 实例来与 SNS 进行通信。

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

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

此示例现在配置为接收推送通知。您可以浏览到 SNS Console,单击页面左侧的 Applications,选择平台应用程序,选择终端节点,然后单击 Publish to endpoint。选择要使用的终端节点,然后单击 Publish to Endpoint。在文本框中键入文本消息,然后单击 Publish message 发布消息。