AWS Mobile SDK for Unityのサンプル SNSExample を使ってPush通知を登録&送信(AWS SNSにエンドポイント登録して、Publish to endpoint)するまでです。
iOSとAndroidの両方でPush通知を行います。
AndroidはFirebaseを使って、FCM経由で通知させます。
AWS(Cognito,SNS)の設定
AWS Cognitoおよび、AWS SNSの設定は他のサイトに詳しく説明があるので割愛しますが、ざっくり以下の対応が必要です。
・Cognitoは”フェデレーテッドアイデンティティの管理”から、”新しいIDプール”を作成する必要があります。
・AWS SNSでApplicationを追加する必要があります。SNSでApplicationを追加する場合、AndroidはAPIキー、iOSはP12ファイル(開発をプロダクションそれぞれ)が必要となります。
Applicationを登録すると降り出されるEndpoints ARN(iOS開発用、iOS商用、Android)の3つが必要です。(テストだけならiOSはテスト用のEndpoints ARNだけでOK)
公式ドキュメント&SDKダウンロード
http://docs.aws.amazon.com/mobile/sdkforunity/developerguide/setup-unity.html
↑SDKはこのページの中の”download the AWS Mobile SDK for Unity”リンクからDLできます。
http://docs.aws.amazon.com/mobile/sdkforunity/developerguide/sns.html
AWS SDKをインポートする
ダウンロードしたAWS Uniry SDKを展開し、パッケージをインポートします。
AWSSDK.SimpleNotificationService.3.3.0.20.unitypackage
インポートすると、Project/Examples/SNSExampleにサンプルのシーンがあるので開きます。
Hierarchy/SNSExample のInspectorに必要な内容を埋めます。
Identity Pool IdはAWS CognitoにてIDを振り出しします。
Android/iOS Application ArnはAWS SNSでEndpointを取得します。
Google Console Project Idは Firebaseコンソールの 設定>クラウドメッセージング から確認できます。
Regionを設定する項目が2つありますが、アジアパシフィック(東京)の場合には”ap-northeast-1″を設定します。
Google Console Project Id
Unity(iOS,Android共通)の設定
Resourcesフォルダを作成します。
作成したResourcesフォルダ内にawsconfig.xml を作成します。
Resources/awsconfig.xml
<?xml version="1.0" encoding="utf-8"?> <aws region="ap-northeast-1" correctForClockSkew="true"> <logging logTo="UnityLogger" logResponses="Always" logMetrics="true" logMetricsFormat="JSON" /> <s3 useSignatureVersion4="true" /> </aws>
同様にResources/link.xmlを作成します。
Resources/link.xml
<linker> <assembly fullname="UnityEngine"> <type fullname="UnityEngine.Networking.UnityWebRequest" preserve="all" /> <type fullname="UnityEngine.Experimental.Networking.UploadHandlerRaw" preserve="all" /> <type fullname="UnityEngine.Experimental.Networking.UploadHandler" preserve="all" /> <type fullname="UnityEngine.Experimental.Networking.DownloadHandler" preserve="all" /> <type fullname="UnityEngine.Experimental.Networking.DownloadHandlerBuffer" preserve="all" /> </assembly> <assembly fullname="mscorlib"> <namespace fullname="System.Security.Cryptography" preserve="all"/> </assembly> <assembly fullname="System"> <namespace fullname="System.Security.Cryptography" preserve="all"/> </assembly> <assembly fullname="AWSSDK.Core" preserve="all"/> <assembly fullname="AWSSDK.CognitoIdentity" preserve="all"/> <assembly fullname="AWSSDK.SecurityToken" preserve="all"/> </linker>
公式ドキュメントに記載にある内容をベースに下記の様に修正するとうまく動きます。
<type fullname="UnityEngine.Experimental.Networking.UnityWebRequest" preserve="all" /> ↓↓↓ <type fullname="UnityEngine.Networking.UnityWebRequest" preserve="all" />
iTunes Connect,AppleDevelopper
割愛しますが、証明書周りの準備が面倒に感じました。
GooglePlayDevelopperConsole,Firebase
割愛しますが、AWS SNSの設定時にサーバーキー(トークン)が必要となります。
Unity側でのiOS用固有の設定
とくにありません。
開発環境でのテストの際には、”Push notification platform”の選択の際にApple Developmentを指定して作成したARNを設定する必要があります。
Unity側でのAndroid用固有の設定
Plugins/Android 配下に以下の2つのファイルを追加
android-support-v4.jar
google-play-services.jar
この2つのファイルはネットでDL先を探すがみつからず、ローカルな開発環境(Mac)の中で発見したファイルを使いました。
FCMを使う為のAndroidManifest.xmlの設定
FCM(Firebase)用の設定をAndroidManifest.xmlに追記します。
AndroidManifest.xml
<service android:name=".MyFcmListenerService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
Xcode側での設定
Capabilitiesの設定にて、”Push Notifications”をONにするのを忘れずに。
一斉通知を行う場合
この手順で出来るのは端末(Enpoint ARN)を指定したpush通知なので、一斉通知する為にはTopicsを作成し、Topicsに取得したEnpoint ARN登録する方法などが必要です。