GCM for Androidの準備
- Google Accountを取得(すでに持っている場合はそれを使う)
- Google Cloud Consoleで[Google Cloud Messaging for Android]を有効にします
- GCMを利用するアプリを登録する
- [REGISTER APP]でアプリを新規登録
- Name欄にアプリ名(例:AWS)を入力
- PlatformはAWSのSNSを使うので[Web Application]を選択
- [Register]で登録
- AWSのSNSを認証させるために登録したアプリの[Server Key]から[API KEY]をコピーしておく
AWS SNSの準備
- AWS SNSの管理コンソールで[Create and Add]から[Add a New App]を選択
- Application Nameを入力し、Push PlatformにGoogel Cloud Messaging(GCM)を選択。
- Google Cloud Messaging (GCM) CredentialsでAPI Keyの入力を求められるので、GCM準備時にコピーしたAPI Keyを入力する。
サンプルアプリの動作の検証
用意されているサンプル(AndroidMobilePushApp)で動作を調べる。
サンプルはここからダウンロードできます。
####GCMへの登録部分
MessageReceivingService.java
private void register() {
new AsyncTask(){
protected Object doInBackground(final Object... params) {
String token;
try {
token = gcm.register(getString(R.string.project_number));
Log.i("registrationId", token);
}
catch (IOException e) {
Log.i("Registration Error", e.getMessage());
}
return true;
}
}.execute(null, null, null);
}
GCMインスタンスのregister()にGoogle Apiのproject numberを渡せば登録してtokenが取得できるようです。
project NumberはGoogle Cloud Consoleのトップに書かれています。
AndroidManifest.xmlでパーミッションを登録が必要です。
AndroidManifest.xml
<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
<uses-permission android:name="com.google.android.c2dm.permission.REGISTER" />
####プッシュメッセージを受け取る部分
AndroidManifest.xml
<receiver
android:name="com.amazonaws.androidtest.ExternalReceiver"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<action android:name="com.google.android.c2dm.intent.REGISTER" />
<category android:name="com.amazonaws.androidtest" />
</intent-filter>
</receiver>
ExternalReceiver
public class ExternalReceiver extends BroadcastReceiver {
public void onReceive(Context context, Intent intent) {
if(intent!=null){
Bundle extras = intent.getExtras();
if(!AndroidMobilePushApp.inBackground){
MessageReceivingService.sendToApp(extras, context);
}
else{
MessageReceivingService.saveToLog(extras, context);
}
}
}
}
intent-filterを設定するだけでいいみたいです。あとは受け取ったBroadCastのintentからメッセージを取得するだけ。
上の2つの部分を自分のアプリに組み込めば、プッシュ通知を受け取る仕組みは出来上がりです。簡単!
##Androidへ通知
Rubyで通知するプログラムです。
push.rb
application_arn = <APPLICATION ARN> # 管理コンソールから
token = <TOKEN> # GCM登録時に発行されるtoken
sns = AWS::SNS.new(
:access_key_id => <ACCESS KEY ID>,
:secret_access_key => <SECRET ACCESS KEY>,
:region => <REGION>
)
client = sns.client
response = client.create_platform_endpoint(
:platform_application_arn => application_arn,
:token => token
)
endpoint_arn = response[:endpoint_arn]
client.publish(:target_arn => endpoint_arn, :message => 'hogehoge')
もっと手軽に試したければ、AWSの管理コンソールから直接プッシュすることができます。