

適用於 Xamarin 的 AWS Mobile SDK 現在已包含在 中 適用於 .NET 的 AWS SDK。本指南參考 Mobile SDK for Xamarin 的封存版本。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 設定適用於 .NET 和 Xamarin 的 AWS Mobile SDK
<a name="setup"></a>

您可以設定適用於 .NET 和 Xamarin 的 AWS Mobile SDK，並開始建立新的專案，也可以將 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 服務可讓您的應用程式存取 SDK 中的服務，而不必在應用程式中內嵌私有 AWS 登入資料。

若要開始使用 Amazon Cognito，您需要建立身分集區。身分集區是專屬於您 帳戶的資訊存放區，由如下所示的唯一身分集區 ID 識別：

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

1. 登入 [Amazon Cognito 主控台](https://console.aws.amazon.com/cognito/home) ，選擇**管理聯合身分**，然後選擇**建立新的身分集區**。

1. 輸入身分集區的名稱，然後選取核取方塊以啟用對未驗證身分的存取。選擇**建立集**區以建立您的身分集區。

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 主控台，然後選擇角色](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 Identity 套件。以下是每個服務的完整套件名稱清單。


****  

| 服務 | 套件名稱 | 
| --- | --- | 
|  AWS Core 執行期  |  AWSSDK.Core  | 
|  Amazon Cognito Sync  |  AWSSDK.CognitoSync  | 
|  Amazon Cognito 身分  |  AWSSDK.CognitoIdentity  | 
|  Amazon DynamoDB  |  AWSSDK.DynamoDBv2  | 
|  Amazon Mobile Analytics  |  AWSSDK.MobileAnalytics  | 
|  Amazon S3  |  AWSSDK.S3  | 
|  Amazon SNS  |  AWSSDK.SimpleNotificationService  | 

若要包含發行前套件，請在安裝套件時包含`-Pre`命令列引數，如下所示：

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

您可以在 [ NuGet 上的 AWS 開發套件套件](https://www.nuget.org/packages?q=+aws-sdk-v3)或適用於 .[NET GitHub 儲存庫的 AWS 開發套件](https://github.com/aws/aws-sdk-net#nuget-packages)中找到 AWS 服務套件的完整清單。

#### 選項 2：使用您的 IDE 安裝
<a name="option-2-install-by-using-your-ide"></a>

 **在 Visual Studio 中** 

1. 在專案上按一下滑鼠右鍵，然後按一下**管理 NuGet 套件**。

1. 搜尋您要新增至專案的套件名稱。若要包含 prelease NuGet 套件，請選擇**包含 Prelease**。您可以在 [ NuGet 的 AWS 開發套件套件中找到 AWS](https://www.nuget.org/packages?q=+aws-sdk-v3) 服務套件的完整清單。

1. 選擇套件，然後選擇 **Install (安裝)**。

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

 **在 Visual Studio 中** 

1. 在套件資料夾上按一下滑鼠右鍵，然後選擇**新增套件**。

1. 搜尋您要新增至專案的套件名稱。若要包含 prelease NuGet 套件，請選擇**顯示發行前套件**。您可以在 [ NuGet 的 AWS 開發套件套件中找到 AWS](https://www.nuget.org/packages?q=+aws-sdk-v3) 服務套件的完整清單。

1. 選取您想要的套件旁的核取方塊，然後選擇**新增套件**。

**重要**  
如果您使用可攜式類別程式庫進行開發，您還必須將 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`類別來設定記錄設定。您可以在`AWSSdk.Core`組件中找到這些項目，可透過 Visual Studio 中的 Nuget Package Manager 取得。您可以在 Android 應用程式的 `MainActivity.cs` 檔案中，或 iOS 應用程式的 `AppDelegate.cs`檔案中，將記錄設定程式碼放在 `OnCreate` 方法中。您也應該將 `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`旗標。這些值可以是 Always、Never 或 OnError。

您也可以使用 `LogMetrics` 屬性記錄 HTTP 請求的效能指標。您可以使用 `LogMetricsFormat` 屬性來指定日誌格式。有效值為 JSON 或標準。

### 設定區域端點
<a name="set-the-region-endpoint"></a>

設定所有服務用戶端的預設區域，如下所示：

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

這會設定 SDK 中所有服務用戶端的預設區域。您可以在建立服務用戶端執行個體時明確指定區域，以覆寫此設定，如下所示：

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

### 設定 HTTP Proxy 設定
<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>

此屬性會判斷正確的伺服器時間，並以正確的時間重新發出請求，以判斷 SDK 是否應該修正用戶端時鐘扭曲。

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

如果服務呼叫導致例外狀況，且 SDK 判斷本機和伺服器時間之間存在差異，則會設定此欄位。

```
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。**檢視 [\$1sdk-xamarin-ref\$1\$1](https://docs.aws.amazon.com/sdkfornet/v3/apidocs/)。
+  **提問**：在 [AWS Mobile SDK 論壇](https://forums.aws.amazon.com/forum.jspa?forumID=88)上張貼問題或在 [ GitHub 上開啟問題](https://github.com/awslabs/aws-sdk-xamarin/issues)。