タグ:Google Cloud Messaging、Cloud Connection Server
GCMを勉強中か理解していて、CCSに対応する人向けのお話。
Webアプリ開発上がりのAndroidプログラマーにとってXMPP接続しろっていう要件はなかなかに大変。
XMPPって何ってところから始まるので。どうやら主にインスタントメッセンジャーなどで使われるプロトコルらしい。
サードパーティーアプリケーションサーバーってサーバーなのクライアントなのってところでまた混乱。
結論をいうとCCSサーバーがXMPPのサーバーとして振る舞うので、
端末だけでなくサードパーティーサーバー側もクライアントとして接続すれば良いようだ。
JavaでXMPPクライアントライブラリというと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の世界とは無関係な雰囲気)
【重要な追加情報】
CCSの申請フォームから申請して1か月以上応答がなかった。
とある確かな筋の情報によると「GCM Project ID」には「Project Number」を入力しないと申請対応が後回しになるらしい。ということで再申請。
10/1日追記
Googleからの申請通過メールを受信後、上記の方法で接続できる事を確認
だが既にJava用のサンプルコードがアップされてた。
http://developer.android.com/google/gcm/ccs.html#smack