

適用於 Unity 的 AWS Mobile SDK 現在已包含在 中 適用於 .NET 的 AWS SDK。本指南參考適用於 Unity 的 Mobile SDK 封存版本。如需詳細資訊，請參閱[什麼是適用於 Unity 的 AWS Mobile 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,以透過 Amazon SNS 接收行動推播通知。

您可以使用 SNSExample.unity 範例建立 iOS 和 Android 應用程式。iOS 和 Android 之間的組態步驟不同，請閱讀以下適用於您目標平台的適當區段。

## 先決條件
<a name="prerequisites"></a>

使用此解決方案需要下列先決條件。

### 設定 SNS 的許可
<a name="set-permissions-for-sns"></a>

當您建立 Cognito 身分集區時，會產生兩個 IAM 角色：
+ Cognito/\$1<Identity-Pool-Name>Auth\$1DefaultRole - 已驗證使用者的預設 IAM 角色
+ Cognito/\$1<Identity-Pool-Name>Unauth\$1DefaultRole - 未驗證使用者的預設 IAM 角色

您必須新增許可，才能存取這些角色的 Amazon SNS 服務。若要執行此作業：

1. 瀏覽至 [IAM 主控台](https://console.aws.amazon.com/iam/home)，然後選取要設定的 IAM 角色。

1. 按一下**連接政策**，選取 AmazonSNSFullAccess 政策，然後按一下**連接政策**。

**注意**  
不建議在生產環境中使用 AmazonSNSFullAccess，我們在此處使用它來允許您快速啟動和執行。如需指定 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 [的應用程式分佈 Quick Start](https://developer.apple.com/library/mac/documentation/IDEs/Conceptual/AppStoreDistributionTutorial/Introduction/Introduction.html#//apple_ref/doc/uid/TP40013839) 文件。接下來，您將需要為推送通知設定的佈建設定檔，以取得詳細資訊，請參閱 Apple 的設定[推送通知](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 開發套件
+ 安裝 JDK
+ android-support-v4.jar
+ google-play-services.jar

## 設定適用於 iOS 的 Unity 範例應用程式
<a name="configuring-the-unity-sample-app-for-ios"></a>

開啟 Unity 編輯器並建立新的專案。匯入適用於 Unity 的 AWS 開發套件套件，方法是選取**資產**/**匯入套件**/**自訂套件**，然後選取 aws-unity-sdk-sns-2.0.0.1.unitypackage。確定已選取**匯入套件**對話方塊中的所有項目，然後按一下**匯入**。

### Unity 組態
<a name="unity-configuration"></a>

執行下列步驟來設定 Unity 專案：

1. 在**專案**窗格中，導覽至 **Assets**/**AWSSDK**/**examples** 並開啟 SNSExample 場景。

1. 在**階層**窗格中，選取 SNSExample。

1. 在**檢測器**窗格中，指定您的 Cognito 身分集區 ID。

1. 請注意，**iOS 平台應用程式 ARN** 有一個文字方塊，稍後您將產生該資訊。

1. 選取**檔案**/**建置設定**，在**建置設定**對話方塊中，按一下**建置清單中場景**下的**新增目前**按鈕方塊，將目前場景新增至建置。

1. 在**平台**下選取 **iOS** 並按一下**玩家設定...**按鈕，在 Unity 編輯器的**檢查器窗格中**，按一下 iPhone 圖示並向下捲動至**識別**區段，並指定**套件識別符**。

### iOS 組態
<a name="ios-configuration"></a>

執行下列步驟來設定範例以設定 iOS 特定設定：

1. 在 Web 瀏覽器中，前往 [Apple 開發人員成員中心](https://developer.apple.com/membercenter/index.action)，按一下**憑證、識別符和設定檔**。

1. 按一下 **iOS 應用程式**下的**識別符**，按一下網頁右上角的加號按鈕以新增 iOS 應用程式 ID，然後輸入應用程式 ID 描述。

1. 向下捲動至**新增 ID 尾碼**區段，然後選取**明確應用程式 ID**，然後輸入您的套件識別碼。

1. 向下捲動至**應用程式服務**區段，然後選取**推送通知**。

1. 按一下**繼續**按鈕。

1. 按一下**提交**按鈕。

1. 按一下**完成**按鈕。

1. 選取您剛建立的應用程式 ID，然後按一下**編輯**按鈕。

1. 向下捲動至**推送通知**區段。

1. 按一下開發 SSL **憑證下的建立**憑證按鈕。 ****

1. 依照指示建立憑證簽署請求 (CSR)、上傳請求，以及下載將用於與 Apple Notification Service (APNS) 通訊的 SSL 憑證。

1. 返回**憑證、識別符和設定檔**網頁，按一下**佈建設定檔**下的**全部**。

1. 按一下右上角的加號按鈕，新增佈建設定檔。

1. 選取 **iOS 應用程式開發**，然後按一下**繼續**按鈕。

1. 選取您的應用程式 ID，然後按一下**繼續**按鈕。

1. 選取您的開發人員憑證，然後按一下**繼續**按鈕。

1. 選取您的裝置，然後按一下**繼續**按鈕。

1. 輸入設定檔名稱，然後按一下**產生**按鈕。

1. 下載並按兩下佈建檔案以安裝佈建設定檔。

新增設定檔後，您可能需要重新整理 Xcode 中的佈建設定檔。在 Xcode 中：

1. 選取 **Xcode**/**Preferences** 選單項目。

1. 選取**帳戶**索引標籤，選取您的 Apple ID，然後按一下**檢視詳細資訊**。

1. 按一下對話方塊左下角的重新整理按鈕，以重新整理您的佈建設定檔，並確保顯示新的設定檔。

### SNS 組態
<a name="sns-configuration"></a>

1. 執行 KeyChain 存取應用程式，選取畫面左下角的**我的憑證**，在產生的 SSL 憑證上按一下滑鼠右鍵以連線至 APNS，然後選取**匯出**，系統會提示您指定檔案的名稱和密碼來保護憑證。憑證將儲存在 P12 檔案中。

1. 在 Web 瀏覽器中，前往 [SNS 主控台](https://console.aws.amazon.com/sns/v2/home)，然後按一下畫面左側**的應用程式**。

1. 按一下**建立平台應用程式**以建立新的 SNS 平台應用程式。

1. 輸入**應用程式名稱**。

1. 針對**推送通知平台選取 Apple 推送通知服務沙盒 (APNS\$1SANDBOX)**。 ****

1. 按一下**選擇檔案**，然後選取您在匯出 SSL 憑證時建立的 P12 檔案。

1. 輸入匯出 SSL 憑證時指定的密碼，然後按一下**從檔案載入憑證**。

1. 按一下**建立平台應用程式**。

1. 選取您剛建立的平台應用程式，並複製應用程式 ARN。

1. 返回 Unity Editor 中的專案，在**階層**窗格中選取 **SNSExample**，然後在**檢查器**窗格中，將平台應用程式 ARN 貼到標記為 **iOS 平台應用程式 ARN** 的文字方塊中。

1. 選取**檔案**/**建置設定**，然後按一下**建置**按鈕，這會建立 Xcode 專案。

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

1. 開啟 Xcode 專案，然後在專案導覽器中選取專案。

1. 確認套件識別符已正確設定

1. 確認您的 Apple 開發人員帳戶已在 **團隊**中指定 - 這是佈建設定檔生效的必要項目。

1. 建置專案並在您的裝置上執行。

1. 點選**註冊通知**，點選**確定**以允許通知，應用程式會顯示您的裝置字符

在 [SNS 主控台](https://console.aws.amazon.com/sns/v2/home)中，按一下**應用程式**，選取您的平台應用程式，然後按一下**建立平台端點**，然後輸入應用程式顯示的裝置字符。

此時，您的應用程式、APNS 和 NSN 已完全設定。您可以選取平台應用程式、選取端點，然後按一下**發佈至端點**，將推播通知傳送至您的裝置。

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

此範例會建立 CognitoAWSCredentials 執行個體，以產生暫時性的有限範圍登入資料，允許應用程式呼叫 AWS 服務。它也會建立 AmazonSimpleNotificationServiceClient 執行個體，以與 SNS 通訊。應用程式會顯示兩個標示**為註冊通知**和**取消註冊**的按鈕。

當點選**註冊通知**按鈕時，會呼叫 `RegisterDevice()`方法。 會`RegisterDevice()`呼叫 `UnityEngine.iOS.NotificationServices.RegisterForNotifications`，指定要使用的通知類型 （警示、聲音或徽章）。它也會對 APNS 進行非同步呼叫，以取得裝置字符。由於未定義回呼，`CheckForDeviceToken`因此 會重複呼叫 （最多 10 次） 以檢查裝置字符。

擷取字符`AmazonSimpleNotificationServiceClient.CreatePlatformEndpointAsync()`時，呼叫 來建立 SNS 平台應用程式的端點。

範例現在已設定為接收推送通知。您可以瀏覽至 [SNS 主控台](https://console.aws.amazon.com/sns/v2/home)，按一下頁面左側**的應用程式**，選取平台應用程式，選取端點，然後按一下**發佈至端點**。選取要使用的端點，然後按一下**發佈至端點**。在文字方塊中輸入文字訊息，然後按一下**發佈訊息**以發佈訊息。

## 設定適用於 Android 的 Unity 範例應用程式
<a name="configuring-the-unity-sample-app-for-android"></a>

開啟 Unity 編輯器並建立新的專案。匯入適用於 Unity 的 AWS 開發套件套件，方法是選取**資產**/**匯入套件**/**自訂套件**，然後選取 aws-unity-sdk-sns-2.0.0.1.unitypackage。確定已選取**匯入套件**對話方塊中的所有項目，然後按一下**匯入**。

### Unity 組態
<a name="id3"></a>

執行下列步驟來設定 Unity 專案：

1. 在**專案**窗格中，導覽至 **Assets**/**AWSSDK**/**examples** 並開啟 SNSExample 場景。

1. 在**階層**窗格中，選取 SNSExample。

1. 在**檢測器**窗格中，指定您的 Cognito 身分集區 ID。

1. 請注意，**Android 平台應用程式 ARN** 和 **Google 主控台專案 ID** 有一個文字方塊，稍後您將產生該資訊。

1. 選取**檔案**/**建置設定**，在**建置設定**對話方塊中，按一下**建置清單中場景**下的**新增目前**按鈕方塊，將目前場景新增至建置。

1. 在**平台**下選取 **Android** 並按一下**玩家設定...** 按鈕，在 Unity 編輯器的**檢查器窗格中**，按一下 Android 圖示並向下捲動至**識別**區段，並指定**套件識別符**。

1. 將 android-support-v4.jar 和 google-play-services.jar 複製到**專案**窗格中的 **Assets**/**Plugins**/**Android** 目錄。

如需尋找 android-support-v4.jar 位置的詳細資訊，請參閱 [Android Support Library Setup](https://developer.android.com/tools/support-library/setup.html)。如需如何尋找 google-play-services.jar 的詳細資訊，請參閱適用於 [Android 設定的 Google APIs](https://developers.google.com/android/guides/setup)。

### Android 組態
<a name="android-configuration"></a>

首先新增新的 Google API 專案：

1. 在 Web 瀏覽器中，前往 [Google 開發人員主控台](https://console.developers.google.com)，按一下**建立專案**。

1. 在**新增專案**方塊中，輸入專案名稱，記下專案編號 （稍後需要），然後按一下**建立**。

接著，為您的專案啟用 Google Cloud Messaging (GCM) 服務：

1. 在 Google 開發人員主控台中，應該已選取您的新專案，否則請在頁面頂端的下拉式清單中選取它。

1. 從頁面左側的側邊列中選取 **APIs & 驗證**。

1. 在搜尋方塊中，輸入「Google Cloud Messaging for Android」，然後按一下下面的 **Google Cloud Messaging for Android** 連結。

1. 按一下**啟用 API**。

最後取得 API 金鑰：

1. 在 Google 開發人員主控台中，選取 **APIs & 驗證 > ****登入**資料。

1. 在**公有 API 存取**下，按一下**建立新金鑰**。

1. 在**建立新的金鑰**對話方塊中，按一下**伺服器金鑰**。

1. 在產生的對話方塊中，按一下**建立**並複製顯示的 API 金鑰。

您將使用 API 金鑰稍後執行身分驗證。

### SNS 組態
<a name="id4"></a>

1. 在 Web 瀏覽器中，前往 [SNS 主控台](https://console.aws.amazon.com/sns/v2/home)，然後按一下畫面左側**的應用程式**。

1. 按一下**建立平台應用程式**以建立新的 SNS 平台應用程式。

1. 輸入**應用程式名稱** 

1. 選取**推送通知平台**的 **Google Cloud Messaging (GCM)** 

1. 將 API 金鑰貼到標記為 **API 金鑰**的文字方塊中。

1. 按一下**建立平台應用程式** 

1. 選取您剛建立的平台應用程式，並複製應用程式 ARN。

1. 返回 Unity Editor 中的專案，在**階層**窗格中的**檢查器**窗格中選取 **SNSExample**，然後將平台應用程式 ARN 貼到標記 **Android 平台應用程式 ARN** 的文字方塊中，並將您的專案編號貼到標記 **Google 主控台專案 ID** 的文字方塊中。

1. 將 Android 裝置連接到電腦，選取**檔案**/**建置設定**，然後按一下**建置和執行。**

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

此範例會建立 CognitoAWSCredentials 執行個體，以產生暫時性的有限範圍登入資料，允許應用程式呼叫 AWS 服務。它也會建立 AmazonSimpleNotificationServiceClient 執行個體，以與 SNS 通訊。

應用程式會顯示兩個標示**為註冊通知**和**取消註冊**的按鈕。當點選**註冊通知**按鈕時，會呼叫 `RegisterDevice()`方法。 會`RegisterDevice()`呼叫 `GCM.Register`，其會向 GCM 註冊應用程式。GCM 是在範例程式碼中定義的類別。它會進行非同步呼叫，以向 GCM 註冊應用程式。

當呼叫回呼時`AmazonSimpleNotificationServiceClient.CreatePlatformEndpointAsync`，系統會呼叫 來建立平台端點以接收 SNS 訊息。

範例現在已設定為接收推送通知。您可以瀏覽至 [SNS 主控台](https://console.aws.amazon.com/sns/v2/home)，按一下頁面左側**的應用程式**，選取平台應用程式，選取端點，然後按一下**發佈至端點**。選取要使用的端點，然後按一下**發佈至端點**。在文字方塊中輸入文字訊息，然後按一下**發佈訊息**以發佈訊息。