前人未踏の領域へ アプリ開発編

Android, iOSアプリ開発に関する調査メモ置き場。ほとんどAndroid。はてなダイアリーから移行したため古い記事にはアプリ以外も含まれます。

Javaによる GCM Cloud Connection Server接続

タグ:Google Cloud Messaging、Cloud Connection Server

GCMを勉強中か理解していて、CCSに対応する人向けのお話。

Webアプリ開発上がりのAndroidプログラマーにとってXMPP接続しろっていう要件はなかなかに大変。
XMPPって何ってところから始まるので。どうやら主にインスタントメッセンジャーなどで使われるプロトコルらしい。
サードパーティーアプリケーションサーバーってサーバーなのクライアントなのってところでまた混乱。

結論をいうとCCSサーバーがXMPPのサーバーとして振る舞うので、
端末だけでなくサードパーティーサーバー側もクライアントとして接続すれば良いようだ。

JavaXMPPクライアントライブラリというとSmackが有名なようで、GoogleのGCMのドキュメントにも
smackの例が出てくるくらいなので素直にそいつを使う。
http://www.igniterealtime.org/projects/smack/index.jsp

以下はXMPPサーバーに接続してログインするまで。

	// Create the configuration for this new connection
	ConnectionConfiguration config = new ConnectionConfiguration(
			"gcm.googleapis.com", 5235);
	// TLS接続を初期化
	config.setSASLAuthenticationEnabled(true);
	config.setSocketFactory(SSLSocketFactory.getDefault());
	SASLAuthentication.supportSASLMechanism("PLAIN", 0);
	
	final Connection connection = new XMPPConnection(config);
	connection.connect();
	// Log into the server
        String USER_NAME = "{sender_id}@gcm.googleapis.com"
        String PASSWORD = "{api_key}"
	connection.login(USER_NAME, PASSWORD);//sender_id, api_keyを設定

きっと多分これでログインできる。
"多分"なのはCCSサーバーの利用は現在Googleへの申請が必要で、
申請後10日程経過しているが何も応答が無く、そのため認証が通らないからである。


ちなみに、初めてXMPPに取り組む場合、Android公式サイトのCCSのページを
軽く読んだらXMPPについて先に学んだ方が理解が早まると思う。

スタンザやらsmack、to, message,message_type、ペイロードなど聞き慣れない概念、用語が多いが
これらはXMPPの世界のお話だからである。(ack/nackはXMPPの世界とは無関係な雰囲気)

なお、XMPP書籍は日本語ではオライリー本1択の模様。

【重要な追加情報】
CCSの申請フォームから申請して1か月以上応答がなかった。
とある確かな筋の情報によると「GCM Project ID」には「Project Number」を入力しないと申請対応が後回しになるらしい。ということで再申請。

10/1日追記
Googleからの申請通過メールを受信後、上記の方法で接続できる事を確認
だが既にJava用のサンプルコードがアップされてた。
http://developer.android.com/google/gcm/ccs.html#smack