

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

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

# 设置适用于 .NET 和 Xamarin 的 AWS Mobile SDK
<a name="setup"></a>

您可以设置 .NET 和 Xamarin 的 AWS Mobile SDK 并开始构建新项目，也可以将开发工具包与现有项目集成。您还可以克隆并运行[示例](https://github.com/awslabs/aws-sdk-net-samples/tree/master/XamarinSamples)，以便了解该 SDK 的工作原理。请按照以下步骤操作，设置并开始使用适用于 .NET 和 Xamarin 的 AWS Mobile SDK。

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

在使用适用于 .NET 和 Xamarin 的 AWS Mobile SDK 之前，您必须先执行以下操作：
+ 创建一个 [AWS 账户](https://aws.amazon.com/)。
+ 安装 [Xamarin](https://docs.microsoft.com/en-us/xamarin/get-started/installation/?pivots=windows)。

具备上述条件后，执行以下操作：

1. 使用 Amazon Cognito 获取 AWS 凭证。

1. 为您将在应用程序中使用的每项 AWS 服务设置所需权限。

1. 在 IDE 中创建一个新项目。

1. 安装适用于 .NET 和 Xamarin 的 AWS Mobile SDK。

1. 配置适用于 .NET 和 Xamarin 的 AWS Mobile SDK。

## 第 1 步：获取 AWS 凭证
<a name="step-1-obtain-aws-credentials"></a>

要在应用程序中调用 AWS，您必须先获取 AWS 凭证。为此，您需要使用 Amazon Cognito（一项 AWS 服务），以允许您的应用程序访问软件开发工具包中的服务，而不必在应用程序中嵌入您的私有 AWS 凭证。

要开始使用 Amazon Cognito，您必须创建一个身份池。身份池用于存储特定于您账户的信息，并通过如下所示的唯一身份池 ID 来识别：

```
"us-east-1:00000000-0000-0000-0000-000000000000"
```

1. 登录 [Amazon Cognito 控制台](https://console.aws.amazon.com/cognito/home)，依次选择 **Manage Federated Identities (管理联合身份)** 和 **Create new identity pool (创建新的身份池)**。

1. 输入身份池的名称，然后选中相应复选框，以启用对未经身份验证的身份的访问权限。选择 **Create Pool**，以创建您的身份池。

1. 选择**允许**以创建两个与您的身份池关联的默认角色，一个用于未经身份验证的用户，另一个用于经过身份验证的用户。这些默认角色会向 Amazon Cognito Sync 和 Amazon Mobile Analytics 提供身份池访问权限。

通常，您只对一个应用程序使用一个身份池。

身份池创建完毕后，您需创建一个 `CognitoAWSCredentials` 对象（将其传递给您的身份池 ID），然后将其传递给 AWS 客户端的构造函数，以获取 AWS 凭证，具体操作方法如下：

```
CognitoAWSCredentials credentials = new CognitoAWSCredentials (
    "us-east-1:00000000-0000-0000-0000-000000000000", // Your identity pool ID
    RegionEndpoint.USEast1 // Region
);

// Example for |MA|
analyticsManager = MobileAnalyticsManager.GetOrCreateInstance(
  credentials,
  RegionEndpoint.USEast1, // Region
  APP_ID // app id
);
```

## 第 2 步：设置权限
<a name="step-2-set-permissions"></a>

您必须为您要在应用程序中使用的每项 AWS 服务设置权限。首先，您需要了解 AWS 查看应用程序中用户的方式。

如果有人使用您的应用程序并调用 AWS，则 AWS 会为此用户分配一个身份。您在第 1 步中创建的身份池就是 AWS 存储这些身份的地方。其中有两种类型的身份：经过身份验证的身份和未经身份验证的身份。经过身份验证的身份属于已通过公共登录提供商（例如，Facebook、Amazon、Google）进行身份验证的用户。未经身份验证的身份属于来宾用户。

每个身份都与一个 AWS Identity and Access Management 角色相关联。在第 1 步中，您创建了两个 IAM 角色，一个用于经过身份验证的用户，另一个用于未经身份验证的用户。每个 IAM 角色都有一个或多个附加到自身的策略，用于指定分配给相应角色的身份可以访问哪些 AWS 服务。例如，以下策略示例会授予对 Amazon S3 存储桶的访问权限：

```
{
  "Statement": [
    {
      "Action": [
        "s3:AbortMultipartUpload",
        "s3:DeleteObject",
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::MYBUCKETNAME/*",
      "Principal": "*"
    }
  ]
}
```

要为您要在应用程序中使用的 AWS 服务设置权限，只需修改附加到相应角色的策略即可。

1. 转到 [IAM 控制台并选择“Roles (角色)”](https://console.aws.amazon.com/iam/home)。在搜索框中键入您的身份池名称。选择要配置的 IAM 角色。如果您的应用程序允许经过身份验证和未经身份验证的用户，则您需要为这两个角色授予权限。

1. 单击**附加策略**，选择所需的策略，然后单击**附加策略**。您为 IAM 角色创建的默认策略会提供对 Amazon Cognito Sync 和 Mobile Analytics 的访问权限。

有关如何创建策略或从现有策略列表中选择策略的更多信息，请参阅 [IAM 策略](https://docs.aws.amazon.com/IAM/latest/UserGuide/PoliciesOverview.html)。

## 步骤 3：创建新的 项目
<a name="step-3-create-a-new-project"></a>

### Windows
<a name="windows"></a>

您可以使用 Visual Studio 来开发您的应用程序。

### OS X
<a name="os-x"></a>

您可以使用 Visual Studio 开发应用程序。使用 Xamarin 进行 iOS 开发需要访问 Mac 才能运行您的应用程序。有关更多信息，请参阅[在 Windows 上安装 Xamarin.iOS](https://docs.microsoft.com/en-us/xamarin/ios/get-started/installation/windows/?pivots=windows)。

**注意**  
来自 JetBrains的跨平台商业 IDE [Rider](https://www.jetbrains.com/help/rider/Xamarin.html) 在 Windows 和 Mac 平台上都支持 Xamarin。

## 第 4 步：安装适用于.NET 和 Xamarin 的 AWS Mobile SDK
<a name="step-4-install-the-sdk-xamarin"></a>

### Windows
<a name="id1"></a>

#### 方法 1：使用 Package Manager 控制台安装
<a name="option-1-install-by-using-the-package-manager-console"></a>

适用于.NET 和 Xamarin 的 AWS Mobile SDK 由一组.NET 程序集组成。要安装适用于.NET 和 Xamarin 的 AWS Mobile SDK，请在 Package Manager 控制台中为每个程序包运行 install-package 命令。例如，要安装 Cognito Identity，请运行以下命令：

```
Install-Package AWSSDK.CognitoIdentity
```

所有项目都需要 AWS Core Runtime 和 Amazon Cognito 程序包。下表完整列出了每项服务对应的程序包名称。


****  

| 服务 | 软件包名称 | 
| --- | --- | 
|  AWS Core Runtime  |  AWSSDK.Core  | 
|  Amazon Cognito Sync  |  AWSSDK.CognitoSync  | 
|  Amazon Cognito Identity  |  AWSSDK.CognitoIdentity  | 
|  Amazon DynamoDB  |  AWSSDK.dynamo DBv2  | 
|  Amazon Mobile Analytics  |  AWSSDK.MobileAnalytics  | 
|  Amazon S3  |  AWSSDK.S3  | 
|  Amazon SNS  |  AWSSDK.SimpleNotificationService  | 

要添加预发行程序包，请在安装程序包时添加 `-Pre` 命令行参数，方法如下所示：

```
Install-Package AWSSDK.CognitoSync -Pre
```

您可以在适用于.NET 的 AWS 软件开发工具包 NuGet或[适用于.NET [的 AWS 软件开发工具包](https://www.nuget.org/packages?q=+aws-sdk-v3) GitHub存储库中找到 AWS 服务包的](https://github.com/aws/aws-sdk-net#nuget-packages)完整列表。

#### 方法 2：使用 IDE 安装
<a name="option-2-install-by-using-your-ide"></a>

 **在 Visual Studio 中** 

1. 右键单击该项目，然后单击 “**管理 NuGet包**”。

1. 搜索您要添加到项目中的程序包名称。要包含预售 NuGet 套餐，请选择 “**包括预**售”。您可以在上的 AWS [开发工具包包中找到 AWS 服务包的](https://www.nuget.org/packages?q=+aws-sdk-v3)完整列表 NuGet。

1. 依次选择此程序包和**安装**。

### Mac (OS X)
<a name="mac-os-x"></a>

 **在 Visual Studio 中** 

1. 右键单击软件包文件夹，然后选择 **Add Packages (添加软件包)**。

1. 搜索您要添加到项目中的程序包名称。要包含预发行 NuGet 包，请选择 “**显示预发行**包”。您可以在上的 AWS [开发工具包包中找到 AWS 服务包的](https://www.nuget.org/packages?q=+aws-sdk-v3)完整列表 NuGet。

1. 选中所需软件包旁边的复选框，然后选择 **Add Package (添加软件包)**。

**重要**  
如果您使用可移植类库进行开发，则还必须将 AWSSDK .Core NuGet 包添加到所有源自可移植类库的项目中。

## 第 5 步：配置适用于.NET 和 Xamarin 的 AWS Mobile SDK
<a name="step-5-configure-the-sdk-xamarin"></a>

### 设置日志记录
<a name="set-logging"></a>

您可以使用 `Amazon.AWSConfigs` 类和 `Amazon.Util.LoggingConfig` 类，配置日志记录设置。这些类可在通过 Visual Studio 中的 Nuget Package Manager 提供的 `AWSSdk.Core` 程序集中找到。您可以将日志记录设置代码放置在 `OnCreate` 文件 (适用于 Android 应用程序) 或 `MainActivity.cs` 文件 (适用于 iOS 应用程序) 的 `AppDelegate.cs` 方法中。您还应将 `using Amazon` 和 `using Amazon.Util` 语句添加到 .cs 文件中。

按以下所示配置日志记录设置：

```
var loggingConfig = AWSConfigs.LoggingConfig;
loggingConfig.LogMetrics = true;
loggingConfig.LogResponses = ResponseLoggingOption.Always;
loggingConfig.LogMetricsFormat = LogMetricsFormatOption.JSON;
loggingConfig.LogTo = LoggingOptions.SystemDiagnostics;
```

当您登录时 SystemDiagnostics，框架会在内部将输出打印到 System.Console。如果您想记录 HTTP 响应，请设置 `LogResponses` 标记。值可以是 “始终”、“从不” 或 OnError。

您也可以使用 `LogMetrics` 属性，记录 HTTP 请求的性能指标。日志格式可通过 `LogMetricsFormat` 属性来指定。有效值包括 JSON 或 standard。

### 设置区域端点
<a name="set-the-region-endpoint"></a>

为所有服务客户端配置默认区域，如下所示：

```
AWSConfigs.AWSRegion="us-east-1";
```

这会为软件开发工具包中的所有服务客户端设置默认区域。您可以在创建服务客户端的实例时明确指定区域，以覆盖此设置，如下所示：

```
IAmazonS3 s3Client = new AmazonS3Client(credentials,RegionEndpoint.USEast1);
```

### 配置 HTTP 代理设置
<a name="configure-the-http-proxy-settings"></a>

如果您的网络位于代理之后，则您可以配置 HTTP 请求的代理设置，如下所示。

```
var proxyConfig = AWSConfigs.ProxyConfig;
proxyConfig.Host = "localhost";
proxyConfig.Port = 80;
proxyConfig.Username = "<username>";
proxyConfig.Password = "<password>";
```

### 校正时钟偏差
<a name="correct-for-clock-skew"></a>

此属性通过确定正确的服务器时间并重新发出时间正确的请求，判断软件开发工具包是否应校正客户端时钟偏差。

```
AWSConfigs.CorrectForClockSkew = true;
```

如果服务调用导致异常且软件开发工具包已判断出本地时间和服务器时间之间存在差异，则可以设置此字段。

```
var offset = AWSConfigs.ClockOffset;
```

要详细了解时钟偏差，请参阅 AWS 博客上的[时钟偏差校正](https://blogs.aws.amazon.com/net/post/Tx2HM54KL5LMTGI/Clock-skew-correction)。

## 后续步骤
<a name="next-steps"></a>

设置适用于 .NET 和 Xamarin 的 AWS Mobile SDK 之后，您可以：
+  **开始使用。**阅读[开始使用适用于 .NET 和 Xamarin 的 AWS Mobile SDK](getting-started-xamarin.md)，以快速了解有关如何在适用于 .NET 和 Xamarin 的 AWS Mobile SDK 中使用和配置服务的说明。
+  **了解服务主题。**了解适用于 .NET 和 Xamarin 的 AWS Mobile SDK 中的每项服务及其工作原理。
+  **运行演示。**查看我们的[示例 Xamarin 应用程序](https://github.com/awslabs/aws-sdk-net-samples/tree/master/XamarinSamples)，以便了解常用案例。要运行应用程序示例，请设置适用于 .NET 和 Xamarin 的 AWS Mobile SDK（详见上文），然后按各个示例中 README 文件内的说明操作。
+  **学习 APIs.** 查看 [\$1 sdk-xamarin-ref \$1\$1](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/)。
+  **提问**：在 [AWS 移动软件开发工具包论坛](https://forums.aws.amazon.com/forum.jspa?forumID=88)上发布问题[或在上提出问题 GitHub](https://github.com/awslabs/aws-sdk-xamarin/issues)。