ミッションたぶんPossible

どこにでもいるシステムエンジニアのなんでもない日記です。たぶん。

C2DMで訳の分からないエラーで苦戦した

 ここ1ヶ月くらい仕事でAndroid開発をやってます。C2DMってのは要はAndroidでPush通知を実現する為のもんなんですが、これがAndroid初心者にはなかなかハードルが高いシロモノでして、なんとか必至こいて動くところまでこぎ着けたんですが、その翌日には何故かまた動かなくなってる始末。なんなんだ一体!?


 しょうがないからしばらく放置して別の作業進めて、他のものが全部片付いていよいよ逃げ切れなくなったので再チャレンジをしたところ、Androidクライアント側でC2DMサーバからの通知を受信したした時点でエラーが出ている事が発覚。


C2DMの実験(失敗) - isseium's blog


 上記の記事のエラーと全く同じものがlogcatに吐かれてました。「query db caught」だの「java.lang.IllegalArgumentException: the bind value at index 2 is null」だのと訳が分かりません。これをヒントにGoogle先生に訪ねたところ、「ぁあ?てめぇジャップごときが調子こいてんじゃねーよ!土下座して英語で聞きな。キャニュースピークイングリッシュ?HAHHA-!!」とおっしゃるので平身低頭なんとかたしない英語でお尋ね申し上げたところ、「Googleアカウントはサーバとクライアント、おんなじものを使ったらダメって言わなかったかい?君たちはいつもそうだ、自分たちがちゃんと確認しなかったことを僕らのせいにする。わけがわからないよ。」と教えて下さいまして。


 C2DMはサービスを使う前にアプリケーション単位で登録する必要があります。この際Googleアカウント、つまりGMailアドレスを使うんですが、C2DM登録に使ったアカウントとAndroidにそれぞれ登録してあるアカウントが同じの場合には、クライアントでC2DMからのメッセージを受け取った際にエラーが起こってしまうようです。そんなの分かるか!しょうがないから自分のアカウントを使ってテストしたところ、あっけなくC2DMサーバからのメッセージを受信出来るようになりました。


 ちなみに上手く行った翌日また動かなくなってたのは、テスト用の筐体(SHARP-IS03)が2台あり、一方のGoogleアカウントをC2DMの登録に用いていたため、テストに使った筐体によって動いたり動かなかったりしたようです。…アホくさ。