Android
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****************"