読者です 読者をやめる 読者になる 読者になる

2hours

1日2時間でなにができるかな

GCM(Google Cloud Messaging for Android)をとりあえず使ってみる

Android

流行り(?)乗っかってGCMを使ってみようかと思います。
簡単に手順だけをメモ代わりに書いてます。

GCM有効化


Google APIs Consoleにアクセス
https://code.google.com/apis/console



左のメニューから「Service」を選択



Google Cloud Messaging for Android」をONにする


In the Terms of Service page, accept the terms.

何か聞かれるらしいんだけど、今回は特に何もなかった。


API Key取得


左のメニューから「API Access」を選択



「Create new Server key」ボタンを押す。
ポップアップウィンドウが出るので、IP制限する必要があれば入れて、なければ空欄のまま「Create」ボタンを押す。


ライブラリダウンロード

Install the Helper Libraries

ということでライブラリが用意されているので有り難く使わせていただきます。

YOUR_SDK_ROOT/extras/google/gcm

にあるということだったんですが、なかったのでSDKマネージャーで落としてきます。
SDK Managerを開いて、「Extras」にある「Google Cloud Messaging for Android Library」をインストール。


とりあえず動かしてみる


サンプルを動かす

YOUR_SDK_ROOT/extras/google/gcm/samples/gcm-demo-client

にサンプルソースがあるので、とりあえずこれを動かしてみる。
以下動かす為にやったこと。



ライブラリ読み込み

  1. メニューから「プロジェクト」→「プロパティ」→「Javaのビルド・パス」を開く。
  2. 「ライブラリ」タブを選択し、「jar追加」でlibsフォルダのgcm.jarを追加。


GCMIntentService.java
サーバーから受け取ったメッセージを表示するようにonMessageをこんな感じに変更。

Bundle extras = intent.getExtras();
String message = getString(R.string.gcm_message)+" = "+extras.getString("message");


CommonUtilities.java
SERVER_URLにテスト用サーバーのURL(http://d.hatena.ne.jp/good-speed/gcmsampleのような)を指定。
SENDER_IDにプロジェクトIDを指定。

プロジェクトIDはAPI Consoleにアクセスした時のURLに書いてある。

For example, if the URL is:
https://code.google.com/apis/console/?pli=1#project:12345679012:overview
Then the project number is 12345679012.

変更も出来るのかな?
https://developers.google.com/console/help/#creatingdeletingprojects



ServerUtilities.java

今回もサーバーサイドはPHPにするので以下の点を修正。

54行目

String serverUrl = SERVER_URL + "/register";

String serverUrl = SERVER_URL + "/register.php";


register.php

サーバーに登録用のPHPを用意する。
と言っても今回は特別なにする訳でもないので、C2DMの時に使ったID拾ってファイルに書き出すだけ。
通常はIDをDBに登録するなりしておいて、対象IDに対してメッセージを送信する(んだろうなと)。

<?php

$fp = fopen("register.txt", "a");
fwrite($fp, $_POST['regId']);
fclose($fp);

print('registration end');

とりあえずビルドして動かしてみる


登録だけ完了。



送信側

メッセージ入力画面:index.html

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <form action="post.php" method="post">
      <p>Google Cloud Messaging for Android</p>
      <input type="text" name="message" size="100" value="" />
      <input type="submit" value="send" />
    </form>
  </body>
</html>


送信処理:post.php

<?php
require_once "HTTP/Request.php";

// RegistrationIDを指定して送信
$regid = "";  // ここにregister.phpで取得したID
$apikey = ""; // ここにAPI Key

$rq = new HTTP_Request("https://android.googleapis.com/gcm/send");
$rq->setMethod(HTTP_REQUEST_METHOD_POST);
$rq->addHeader("Authorization", "key=".$apikey);
$rq->addPostData("registration_id", $regid);
$rq->addPostData("collapse_key", "1");
$rq->addPostData("data.message", $_POST['message']);

if (!PEAR::isError($rq->sendRequest())) {
    print "\n" . $rq->getResponseBody();
} else {
    print "\nError has occurred";
}

?>
<hr />
<input type="button" value="back" onclick="javascript:history.back();" />

送信してみる


index.htmlにアクセスして送信!



できた!