Amazon SNSを使ってAndroid端末にPush通知を送る

Amazon SNSというサービスがありまして、これを使うと、管理画面やAPI経由でAndroid, iPhone, Kindleといった端末にPush通知を送ったり、メールで通知をしたりすることが簡単にできます。
Amazon SNS (メッセージ通知サービス Amazon Simple Notification Service) | アマゾン ウェブ サービス(AWS 日本語)

必要があって本日初めて使ったので、サンプルアプリケーションをビルドして実際に試すまでをやってみました。

GCM(Google Clout Messaging)のproject_idとAPI Keyを入手する

Googleアカウントはお持ちだと思いますが、Push通知をするためにGCMのproject_idとAPI Keyというものが必要になります。
こちらの記事が参考になります。
1. GCM をはじめよう - ソフトウェア技術ドキュメントを勝手に翻訳
project_idというのは、
プロジェクトを作成し、コンソールを開くと、
https://code.google.com/apis/console/#project:1234567890
という形式のURLになりますが、このproject:から後ろの数値のことです。

AWSアカウントを作る

AWSアカウントがないとダメです。クレジットカードの登録が必要かと思いますが、1ヶ月100万プッシュ通知までは無料らしいので、個人で使っていてオーバーすることはまずないのではないでしょうか。
万が一超えてしまっても、1ドル / 100万件なので安心です。

アプリを作成する

"Add a New App"を押して、アプリケーションを作成します。
f:id:kuro_m88:20140215000531p:plain
図のように、Application Name, Push Platform(GCMを選択), API Key(GCMのAPI Key)を入力し、Add New Appを押します。
f:id:kuro_m88:20140215000553p:plain

サンプルアプリのソースコードをダウンロードする

サンプルアプリのソースコードは、
https://s3.amazonaws.com/codesamples/sns/latest/snsmobilepush.zip
にあります。
これを解凍し、今回はAndroidで動作することを確かめるので、その中のAndroidMobilePushAppというディレクトリのみを使います。

Eclipseにインポート

前述のディレクトリをプロジェクトととしてインポートします。
Android SDKのバージョンは22以上でないとダメです。
また、Goolge Play servicesという追加パッケージもインストールしておきます。
(※Google Cloud Messaging for Android Libraryは非推奨になりました。)
Google Play servicesのライブラリもプロジェクトにインポートします。
Androidmanifest.xmlのバージョンを使用するAPIのバージョンに合わせます。
res/strings.xmlのproject_numberに先ほど取得したGCMのproject_idを書き込みます。

<string name="project_number">1234567890</string>

端末にインストール

アプリをビルドし、端末にインストールします。

アプリを起動

USBケーブルはPCとつないだまま(Eclipseに端末のログが表示される状態)にして、
アプリを起動すると、画面にidが表示され、

同時に、PC側に表示されるログの中に

02-14 16:53:32.996: I/displaying message(10219): registration_id=AoYg6bHQ4gb_svk7rxjSHuLBTCulIvBGdwXsEyKDy9-Ro6ouNFo0YAPEmu2WAyWlv05xFEIP9OSOEkH7dgJgJBZHZzqaExrud-    p1VFN8t_oivEEhoI3idVWny13DxBPM6uaDzipPfdsoaPeL8VsWL9-7wbDmAabr

というようなものがあるはずです。
この、registration_idをコピーしておきます。

Amazon SNSに端末を登録する

実際のアプリケーションではAPIを利用して登録しますが、今回は手動で行います。
先ほどのAmazon SNSのアプリのページでAdd Endpointsを押します。
f:id:kuro_m88:20140215000629p:plain
Device Tokenの所に、registration_idを入力します。
f:id:kuro_m88:20140215000757p:plain
これで端末が登録されました。

実際にPush配信する

Push配信する準備ができました。
f:id:kuro_m88:20140215001859p:plain
送信したいEndpoint(ここでは1つです)にチェックを入れ、Publishボタンを押します。
f:id:kuro_m88:20140215001912p:plain
送信内容を入力し、送信すると…

めでたく端末に同じ内容が表示されました!