48
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

AWSのSNSを使ってAndroidにプッシュ通知する

Posted at

GCM for Androidの準備

  1. Google Accountを取得(すでに持っている場合はそれを使う)
  2. Google Cloud Consoleで[Google Cloud Messaging for Android]を有効にします
  3. GCMを利用するアプリを登録する
  4. [REGISTER APP]でアプリを新規登録
  5. Name欄にアプリ名(例:AWS)を入力
  6. PlatformはAWSのSNSを使うので[Web Application]を選択
  7. [Register]で登録
  8. AWSのSNSを認証させるために登録したアプリの[Server Key]から[API KEY]をコピーしておく

AWS SNSの準備

  1. AWS SNSの管理コンソールで[Create and Add]から[Add a New App]を選択
  2. Application Nameを入力し、Push PlatformにGoogel Cloud Messaging(GCM)を選択。
  3. 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の管理コンソールから直接プッシュすることができます。

48
48
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
48
48

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?