Amazon SNSのモバイルプッシュを使ってGCM経由でプッシュ通知する方法のめも
#GCMの設定
SNSからGCMを経由してプッシュ通知するため、まずはGCMの設定を行います。
Google Developer ConsoleでGCMを有効に設定します。
-
Google Developer Consoleでプロジェクトを選択(または作成)
GCMの設定ファイル取得
1.以下のサイトにアクセスします
設定ファイル取得
2. パッケージにAndroidアプリのルートパッケージを設定し(ここでは"gcm.play.android.samples.com.gcmquickstart"を設定)、"Choose and configure services"をクリックします
3."ENABLE GOOGLE CLOUD MESSAGING"をクリックします
4."Server API Key"と"Sender ID"は後ほど利用するので保存しておきます。"Generate configuration files"をクリックします
- Sender ID:クライアントアプリにメッセージを送信するアプリケーションサーバの認証に使用する
- API Key:
5."Download google-services.json"をクリックして設定ファイルをダウンロードします
GCMのregist token取得
参照:Try Cloud Messaging for Android
注:最新のAndroid StudioとGoogle Play Servicesが必要です。
- google-servicesリポジトリをチェックアウトします
$ git clone https://github.com/googlesamples/google-services.git
- AndroidStudioでプロジェクトを開きます(google-services/android/gcm)
- 以下のソースを編集します
- gcm.play.android.samples.com.gcmsender.GcmSender.java 30行目
public static final String API_KEY = "[Server API Key]";
- res/values/strings.xml 9行目
<string name="gcm_defaultSenderId">[Sender ID]</string>
- Server API Key、Sender IDは前節のGoogle Developer Consoleで取得した値を設定します
ちなみに、サンプルアプリは起動時に"/topics/global"を購読しています。gradlewコマンドではプッシュ通知するメッセージのみを渡すと"/topics/global"というTopicにパブリッシュするので、サンプルアプリを起動した端末でプッシュ通知を受け取ることができます。
Topicではなく、特定の端末にプッシュ通知するには第二引数に[regist token]を渡します。
./gradlew run -Pargs="こんにちは,[regist token]"
このコマンドを実行すると、[regist token]の端末にのみメッセージをパブリッシュできます。
Topicについての詳細はImplementing Topic Messagingを参照してください。
##registration tokenの取得
「GCMのサンプルアプリケーションの実行」で以下のようなログが出力されます。このRegistration TokenがGCMからのregistration tokenとなります。
08-07 12:01:37.960 13513-13567/gcm.play.android.samples.com.gcmquickstart I/RegIntentService﹕ GCM Registration Token: xxxxx
registration token取得のソースコードは以下になります。InstanceIDを利用してトークンを取得します。getInstance
の引数にはContext
を渡します。R.string.gcm_defaultSenderId
の値はstring.xmlに設定した[Sender ID]です。
InstanceID instanceID = InstanceID.getInstance(this);
String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
GoogleCloudMessaging.INSTANCE_ID_SCOPE, null)
##メッセージ受信
PUSH通知されたメッセージを受信するにはGcmListenerService
を拡張します。
onMessageReceived
メソッドをオーバーライドしてプッシュ通知受信後の処理を記述します。
@Override
public void onMessageReceived(String from, Bundle data) {
String message = data.getString("message");
Log.d(TAG, "From: " + from);
Log.d(TAG, "Message: " + message);
/**
* Production applications would usually process the message here.
* Eg: - Syncing with server.
* - Store message in local database.
* - Update UI.
*/
/**
* In some cases it may be useful to show a notification indicating to the user
* that a message was received.
*/
sendNotification(message);
}
-
./gradlew run -Pargs="こんにちは"
を実行すると、以下のようなログが出力されます
08-12 11:02:24.612 2954-17735/gcm.play.android.samples.com.gcmquickstart D/MyGcmListenerService﹕ From: /topics/global
08-12 11:02:24.612 2954-17735/gcm.play.android.samples.com.gcmquickstart D/MyGcmListenerService﹕ Message: こんにちは
-
./gradlew run -Pargs="こんにちは,[regist token]"
を実行すると、以下のようなログが出力されます
08-12 11:28:04.964 30196-2379/gcm.play.android.samples.com.gcmquickstart D/MyGcmListenerService﹕ From: [Sender ID]
08-12 11:28:04.964 30196-2379/gcm.play.android.samples.com.gcmquickstart D/MyGcmListenerService﹕ Message: こんにちは
##GCMクライアントの詳細
GCMクライアント(Android)の詳細については以下のURLを参考にしてください。
Implementing GCM Client on Android
#プッシュ通知
##手動で通知
管理コンソールから手動でプッシュ通知を送ってみます。
- Application Name:任意の値(今回はSampleGCMを設定)
- Push Notification Platform:Google Cloud Messaging(GCM)
- API Key:GCMの設定で取得したServer API Key
- Applicationが作成されました
- 作成したApplicationを選択して[Create Platform Endpoint]をクリック
- Device tokenに「GCMのregist token取得」で取得したregist tokenを設定し、[Add endpoint]をクリックします。(User dataはエンドポイントに関連付ける任意の値でAmazon SNSはこの値を使用しません)
- デバイスを登録したら、SampleGCMのARNのリンクをクリックして「Application Details」を表示します
- 登録したTokenを選択して[Publish to Endpoint]をクリックします
- [JSON message generator]をクリックします
- [Message]を入力して[Generate JSON]をクリック
- GCM用のJSONが生成されるので、[Publish message]をクリックしてメッセージを送信します
- 端末にプッシュ通知がきます
##Javaで通知
AWS SDK for Javaを利用して端末にプッシュ通知を行います。
- サンプルアプリケーションをダウンロードします
- 1を解凍し、snsmobilepush/SNSSamplesをIDEで開きます
- 以下を編集します
- API Key:GCMのAPI Key
- アプリケーション名:GCMを利用可能に設定したプロジェクト名
String serverAPIKey = "[API Key]";
String applicationName = "[プロジェクト名]";
String registrationId = "[regist token]";
4.AwsCredentials.propertiesを編集します
accessKey=[Amazon SNSを利用可能なAWSのアクセスキー]
secretKey=[Amazon SNSを利用可能なAWSのシークレットキー]
5.SNSMobilePush.java(66行目)のコメントを外します
sample.demoAndroidAppNotification();
6.com.amazonaws.sns.samples.mobilepush.SNSMobilePushを実行すると端末にプッシュ通知がきます