簡単に言うとGoogleが提供する対Android向けプッシュ通知サービスです。
http://developer.android.com/google/gcm/index.html
今回私はGAE(Google App Engine for Java)サーバで使用してみました。
検索してみると結構PHPとかGAE以外でやっている方が多かったのでメモしておきます。
■実装の手順
流れとしては
1.プロジェクトを用意する
2.API(Google Cloud Messaging)をONにする
3.API Keyを取得(メモ)する
4.Androidアプリにjarの組込やプログラムをセッティングする
5.サーバ(GAE)にPushする機能をプログラムする。
GAEではないですが、全体の流れとしてはこちらが参考になります。
今回は他サイトとの差分ではないですが、5番のGAEの部分だけ取り上げます。
■ライブラリの取得
実はGAE上で簡単にGCMを使うためにライブラリが用意されています。
ゼロベースで作っても良いかもしれませんが、あるものは使いましょう。
Android SDK ManagerでGoogle Cloud Messaging for Androidを取得していない場合はExtrasから取得して下さい。
取得すると
[Android SDKパス]\extras\google\gcm\gcm-server\dist\
にgcm-server.jarが入っているのでGAEプロジェクトのWEB-INF/libとかに追加。
次にWEB-INF/libにjson_simple-x.x.jarが無い場合は
[Android SDKパス]\extras\google\gcm\gcm-server\lib\
のjson_simple-x.x.jarを同様に追加して下さい。
gcm-server.jarはただのライブラリ、json_simple-x.x.jarは追加しないと
java.lang.NoClassDefFoundError: org/json/simple/parser/ParseException
が発生するので、それ対策です。
■ライブラリの改変
んで、後はプログラムだけと言いたいところなんですがごめんなさい。
最新版はどうか分かりませんが、2013/02の時点ではgcm-server.jarに問題があって
一部改変しないと日本語を通知した場合文字化けが起こります。
ということで改変しましょう。
gcm-server.jarを展開してSender.javaというクラスを開きます。
改変するのはその中のpostメソッド
byte[] bytes = body.getBytes();
という処理ですが、
私の場合は484行目にありました。こいつを
byte[] bytes = body.getBytes("utf-8");
としてやります。
それが出来たら改変は終わりなのでjarに戻してあげましょう。
(WEB-INF/libに設定も忘れずに)
■Push通知のプログラミング!
後はPush通知のプログラムだけです。
Sender sender = new Sender(gcmApiKey);
Message.Builder builder = new Message.Builder();
builder.collapseKey(collapse_key);
builder.timeToLive(time_to_live);
builder.addData("message", data);
Message message = builder.build();
try {
MulticastResult result = sender.send(message, registrationIds, 5);
} catch (IOException e) {
e.printStackTrace();
}
gcmApiKeyはGCMで取得したAPIKey
collapse_keyは通知グループ名(String) いくつか送った時に同じ通知グループ名は一つにまとめられるようです
time_to_liveは通知メッセージが送れない時にどのくらいの時間(intで秒指定)キープするか
dataは通知するメッセージ(String)
registrationIdsはregistrationIdのString型のListです。
なので、上記を実装して、registrationIdはアプリとかで事前に取得してDB化しておき、
必要に応じて通知したい端末のregistrationId向けに上記処理を行うという感じになるかと思います。
registrationIdってどうやって取得するの?っていうのは前述のこちらが参考になりますの
Activityの実装で説明されています。