

适用于 Xamarin 的 AWS 移动 SDK 现已包含在。 适用于 .NET 的 AWS SDK本指南参考了适用于 Xamarin 的 Mobile SDK 的存档版本。

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

# 发送推送通知 (Xamarin iOS)
<a name="sns-send-push-notifications-ios"></a>

本文档介绍了如何使用 Amazon Simple Notification Service (SNS) 以及适用于 .NET 和 Xamarin 的 AWS Mobile SDK 将推送通知发送到 Xamarin iOS 应用程序。

## 项目设置
<a name="project-setup"></a>

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

在开始本教程前，必须先完成有关[设置适用于 .NET 和 Xamarin 的 AWS Mobile SDK](setup.md) 的说明中的所有步骤。

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

按照[设置适用于 .NET 和 Xamarin 的 AWS Mobile SDK](setup.md) 中第 2 步的说明操作，将下述策略附加到您应用程序的角色中。这样可为您的应用程序提供访问 SNS 的适当权限：

1. 转到 [IAM 控制台](https://console.aws.amazon.com/iam/home)，然后选择您要配置的 IAM 角色。

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

**警告**  
不建议在生产环境中SNSFull使用 Amazon Access。我们在此处使用它是为了让您快速启动并运行。有关为 IAM 角色指定权限的更多信息，请参阅 [IAM 角色权限概述](https://docs.aws.amazon.com/IAM/latest/UserGuide/policies_permissions.html)。

### 获得 Apple iOS 开发人员计划成员资格
<a name="obtain-membership-in-the-apple-ios-developer-program"></a>

您需要在物理设备上运行您的应用程序以接收推送通知。要在设备上运行您的应用程序，您必须拥有 [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) 文档。

### 创建 iOS 证书
<a name="create-an-ios-certificate"></a>

首先，您需要创建一个 iOS 证书。然后，您需要创建为推送通知而配置的预置配置文件。为此，请执行以下操作：

1. 转至 [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. 单击**继续**。

1. 单击 **Submit (提交)**。

1. 单击**完成**。

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

1. 向下滚动到 **Push Notifications** 部分。单击 **Development SSL Certificate** 下的 **Create Certificate**。

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

1. 返回到**证书、身份和配置文件**页面。单击 **Provisioning Profiles** 下的 **All**。

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

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

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

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

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

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

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

有关预配置为推送通知而配置的配置文件的更多信息，请参阅 Apple 的[配置推送通知](https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppDistributionGuide/ConfiguringPushNotifications/ConfiguringPushNotifications.html#//apple_ref/doc/uid/TP40012582-CH32-SW1)文档。

### 使用证书在 SNS 控制台中创建平台 ARN
<a name="use-certificate-to-create-platform-arn-in-sns-console"></a>

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

1. 转至 [SNS Console](https://console.aws.amazon.com/sns/v2/home)，单击屏幕左侧的 **Applications (应用程序)**。

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

1. 输入 **Application Name**。

1. 对于 **Push notification platform**，选择 **Apple Development**。

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

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

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

1. 选择您刚创建的平台应用程序，然后复制应用程序 ARN。在后续步骤中，您将需要此信息。

### 将 Pack NuGet age for SNS 添加到您的项目中
<a name="add-nuget-package-for-sns-to-your-project"></a>

按照[设置适用于.NET 和 Xamarin 的 AWS 移动软件开发工具](setup.md)包中说明的第 4 步，将亚马逊简单通知 NuGet服务包添加到您的项目中。

## 创建 SNS 客户端
<a name="create-an-sns-client"></a>

```
var snsClient = new AmazonSimpleNotificationServiceClient(credentials, region);
```

## 为您的应用程序注册远程通知
<a name="register-your-application-for-remote-notifications"></a>

要注册应用程序，请调用 RegisterForRemoteNotifications 您的 UIApplication对象，如下所示。将以下代码放在 AppDelegate .cs 中，在出现以下提示的地方插入您的平台应用程序 ARN：

```
public override bool FinishedLaunching(UIApplication app, NSDictionary options) {
// do something
var pushSettings = UIUserNotificationSettings.GetSettingsForTypes (
  UIUserNotificationType.Alert |
  UIUserNotificationType.Badge |
  UIUserNotificationType.Sound,
  null
);
app.RegisterUserNotifications(pushSettings);
app.RegisterForRemoteNotifications();
// do something
  return true;
}

public override void RegisteredForRemoteNotifications(UIApplication application, NSData token) {
  var deviceToken = token.Description.Replace("<", "").Replace(">", "").Replace(" ", "");
  if (!string.IsNullOrEmpty(deviceToken)) {
    //register with SNS to create an endpoint ARN
    var response = await SnsClient.CreatePlatformEndpointAsync(
    new CreatePlatformEndpointRequest {
      Token = deviceToken,
      PlatformApplicationArn = "YourPlatformArn" /* insert your platform application ARN here */
    });
  }
}
```

## 将消息从 SNS 控制台发送到端点
<a name="send-a-message-from-the-sns-console-to-your-endpoint"></a>

1. 转到 [SNS 控制台 >“Applications (应用程序)”](https://console.aws.amazon.com/sns/v2/home)。

1. 依次选择您的平台应用程序和端点，然后单击 **Publish to endpoint**。

1. 在文本框中键入文本消息，然后单击 **Publish message** 发布消息。