Google-Cloud-Messaging--Titanium- モジュールを作る

# 概要

Google Cloud Messaging (GCM) とは，Android アプリに向けてプッシュ通知を行うためのサービスです．

http://developer.android.com/intl/ja/guide/google/gcm/index.html

以前は C2DM というサービスがあったようなのですが，それが 2012 年 6 月頃に廃止され，GCM という新バージョンに移行したそうです．

この辺は "c2dm gcm" とかでググれば色々情報が出てきます．

で，その新機能を，Titanium で作成する Android アプリからも自作モジュールを使って利用出来ました，ということでその作業ログです．

「よく分からんがこうやったら出来た」的解説の嵐ですがご容赦下さい… orz

Mac OS X 10.7.5 と Ubuntu 12.04 amd64 の両方でやってみましたがどちらでもいけました．

解説は Ubuntu の方で行きます．

作ったモジュールを利用する方法はまた後に．

# 準備

Android SDK Manager のインストール，Titanium Studio のインストールなどは済んでおり，gcc や make なんかは使える状態になっていることを前提とします．Ubuntu なら `sudo apt-get install build-essential` しとけばいいよ．

Titanium SDK は 2.1.1.GA を使います．

Android SDK Manager は `/home/USERNAME/android-sdk-linux/` にあるとします．

Android SDK Manager で，Google Cloud Messaging for Android Library のパッケージをインストールしておきます．

![Android SDK Manager スクリーンショット](http://kaosfield.net/img/20121202_gcm.png "Android SDK Manager スクリーンショット")

あと，Android NDK が必要です．http://developer.android.com/intl/ja/tools/sdk/ndk/index.html ここからダウンロードして展開して，`/home/USERNAME/android-ndk-r8c/` に置いておきます．私が落としたのは r8c というバージョンでした．

# モジュール作成

## 下準備

まずはモジュール作成の一連の作業をするためのディレクトリを適当に作ってそこに移動します．

```sh
cd
mkdir gcm
cd gcm
pwd #=> /home/USERNAME/gcm
```

https://github.com/Guti/Google-Cloud-Messaging--Titanium- から，ソースコードと timodule.xml などを参考にするためにリポジトリを取ってきます．

```sh
git clone git://github.com/Guti/Google-Cloud-Messaging--Titanium-.git
```

こいつの大元となるリポジトリ https://github.com/liccowee/Google-Cloud-Messaging--Titanium- があるのですが，そっちは止まってたので新しい・今現在生きている感じのする方 (Guti さん作の方) を取って来ました．v0.6 が現状最新です．

## プロジェクト編集

Titanium のモジュール作成のためのプロジェクトを作成します．

```sh
~/.titanium/mobilesdk/linux/2.1.1.GA/titanium.py create \
 --platform=android --type=module --id=com.activate.gcm \
 --android=/home/USERNAME/android-sdk-linux --name=gcmmodule
```

これで gcmmodule というプロジェクトが出来ました．このプロジェクト名，ハイフンを使うとビルドがコケました (gcm-module に最初してた)．Java のクラス名の制約だと思います．あと大文字もよくないんだった気がします (確かめてません)．

この作業はコンソールではなく Titanium Studio でやってもいいかもしれません．

また，Titanium SDK のバージョンが 2.1.1.GA 以外の人は，ここでのオプションを変えれば大丈夫なんじゃないかなぁと思います．確かめたいです．

で，プロジェクトに移動してちょこちょこ書き換えをします．

```sh
cd gcmmodule
```

build.properties に Android NDK の情報を追記．

```sh
vim build.properties
```

```text
  titanium.platform=/home/USERNAME/.titanium/mobilesdk/linux/2.1.1.GA/android
  android.platform=/home/USERNAME/android-sdk-linux/platforms/android-8
  google.apis=/home/USERNAME/android-sdk-linux/add-ons/addon-google_apis-google-8
+ android.ndk=/home/USERNAME/android-ndk-r8c
```

manifest を編集して，バージョンを 0.6 にしておく．

```sh
vim manifest
```

```text
- version: 0.1
+ version: 0.6
```

timodule.xml を編集する…べきなんだろうけど権限に関する設定とか完全に分かるようになるのはちとしんどいので，申し訳ないがここはコピペで orz

```sh
cp ~/gcm/Google-Cloud-Messaging--Titanium-/timodule.xml ./
```

次にソースコードを，こちらも拝借してきます．

Android SDK Manager でインストールした Google Cloud Messaging for Android Library パッケージに含まれる src と，clone してきたリポジトリに含まれる src を使います．

```sh
rm -rf src # プロジェクト作成時にデフォルトで作成された src があるので消しておく

cp -r ~/android-sdk-linux/extras/google/gcm/gcm-client/src ./
cp -r ~/gcm/Google-Cloud-Messaging--Titanium-/src ./
# ※コピーする順番が変わってもいいのかどうか調べてない
# 　この順番でやればとりあえず出来た
```

これでビルドのための準備完了です．

## ビルド

`ant` コマンドでビルドするだけです．

ant が無い場合は，http://ant.apache.org/bindownload.cgi から拾ってきてとりあえずどっかに置いておけばいいです．パスの設定とかはキニシナイ．

あと，Ubuntu だとこのまま ant を走らせても `gperf` コマンドが無いよ，って言ってくると思うので `sudo apt-get install gperf` しておきます．

そしたら，

```sh
ant
# ant -buildfile build.xml # きちんとこう書いてもいい
# ~/apache-ant-1.8.4/bin/ant # パスの設定が出来てない場合も気にせずフルで打ち込もう
```

これで足りないものが無ければ

```text
(省略)
BUILD SUCCESSFULL
Total time: * seconds
```

と出て，`dist` ディレクトリ内に `com.activate.gcm-android-0.6.zip` が出来ているはずです．それで成功です．

エラーが出てしまう場合は…　頑張って下さい orz　良かったらエラーが出た状況を教えて下さい．

# 今後のこと

後はこれを展開すると modules ディレクトリが出てきて，それをアプリのプロジェクトにコピーして…　という感じで使っていきます．

しかし，それは先述した通り後ほど．このエントリが長くなりすぎた．

# TODO

* Titanium SDK のバージョンを 2.1.1.GA 以外でもちゃんと試しておく．特に 3.x Beta で．
* timodule.xml の設定を自分で書けるようにする．
* src の内容物を自分で作れるようにする．
* 情報がすぐに古くなりそうなので今回 clone したリポジトリをしばらく追いかける．

# 参考

* http://developer.appcelerator.com/question/139181/gcm-in-titanium
* http://stackoverflow.com/questions/11399404/appcelerator-use-gcm-to-get-a-notification-have-that-notification-open-the-app
* https://github.com/Guti/Google-Cloud-Messaging--Titanium- (基本的にここのチュートリアルを再現した感じです)