Android GCMでメッセージを送る
Androidでプッシュ通知でショートメッセージをおくる仕組みは以前はC2DMというものでしたが、2012年6月26日にデプリケイトされGCM(Google Cloud Messaging for Android)というものに変わりました。
まだまだ途中ではありますが、やってみた経過を書いておきます。
まずは、GCMを利用する準備で、GCM sender IDというものを入手します。
下記のページを参考にして取得します。
http://developer.android.com/guide/google/gcm/gs.html
つまづきやすいポイントを書いておくと
https://code.google.com/apis/console/
にアクセスして、gcmをONにすると、プロジェクトが作れ、そのプロジェクトの後につく番号が、sender IDです。
例)下記でいえば9779407********、***は伏せ字ですが整数です。 https://code.google.com/apis/console/#project:9779407********
左のメニューのAPI Accessをクリックすると
Key for browser apps (with referers)
とあるところの
例)*****は伏せ字ですが、アルファベットの羅列です。 API key: AIzaSyBYyErqLDowHFlZ***********************
が、Webアプリケーション側で利用するAPIキーです。
とりあえず、sender IDとAPIキーは必要になります。
では、次にアプリを作りましょう。
下記のチュートリアルを参考にします。
http://developer.android.com/guide/google/gcm/demo.html
アプリを一から作るのは大変なので、Googleさんがサンプルを用意してくれているのをコピペで作ってみます。
AndroidManifest.xmlとか結構作るの気を使いますよね~。
よい見本にもなります。
SDKマネージャーで、
Extras > Google Cloud Messaging for Android Library
をインストールします。
すると、
Android SDKのディレクトリ以下に/extras/google/gcm/samples/gcm-demo-client/
にサンプルアプリがありますので、これを使ってみます。
/src/com/google/android/gcm/demo/app/CommonUtilities.java
を開くと、ここに定数で先ほどのsender IDとサーバー側アプリケーションのURLを入れる場所があります。
//例)サーバー側アプリケーションのURLを変更 static final String SERVER_URL = "http://****.php"; //例)Sender IDを変更 static final String SENDER_ID = "9779407********";
というように変更します。
これを、エミュレーターで実行すると
From GCM:error(ACCOUNT_MISSING)
となってしまいます。
ふぇぇーとなりますが、これはGoogleのアカウントがこのエミュレーターにアサインされていないからでした。
Googleアカウントがある実機などで試すと、うまくいきます。
下記のような画面になります。
GCMに無事登録されたようです!
デバッガなどでregIDという値をコピペしておきます。
regIDは大変長いです。
例)regIDの例 ***は伏せ字です 実際はもっと長いアルファベットの羅列です 'APA91bHqwcC6ztIHr2TZcr2Fmp_eWcqS0E****************************'
そして、Webサーバー側のアプリケーションを用意します。
今回は、下記でご紹介のあったPHPのサンプルを流用させて頂きます。有難うございました。
http://d.hatena.ne.jp/azukinohiroki/20120628/1340868610
<?php $url = 'https://android.googleapis.com/gcm/send'; $registration_id = 'APA91bHqwcC6ztIHr2TZcr2Fmp_eWcqS0E*********************'; //regIDをここに記述します $message = 'Hello, GCM!!'; $header = array( 'Content-Type: application/x-www-form-urlencoded;charset=UTF-8', 'Authorization: key=AIzaSyBYyErqLDowHFlZ***********************', //API keyはここ ); $post_list = array( 'registration_id' => $registration_id, 'collapse_key' => 'update', 'data.message' => $message, ); $post = http_build_query($post_list, '&'); $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_FAILONERROR, 1); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_HTTPHEADER, $header); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_TIMEOUT, 5); $ret = curl_exec($ch); var_dump($ret); ?>
上記をURLから実行すると、IDが帰ってきて、Android端末にもメッセージが届けば成功です!
とりあえずはやったー(^_^)
string(38) "id=0:13433901****************"