2012-04-26

as3c2dm を使うときに、送信側が使うパラメータ

Adobe AIR で Android アプリを開発できるんですが、そのアプリに C2DM で通知しようとして手間取ったのでメモ。

as3c2dm というライブラリを使うのを想定しています。

結論から言うと、C2DM サーバに送る POST パラメータには、
  • data.parameters
  • data.tickerText
  • data.contentTitle
  • data.contentText
を含める必要があります。

アプリから Google のC2DM のサーバから Registration ID を受け取るときには、ActionScript で onRegisterd() 関数を定義しておきます。通常は、この関数の中でどっかのサーバに Registration ID を登録するような処理をします。

Java レベルでは BroadcastReceiver が、com.google.android.c2dm.intent.REGISTRATION というインテントを受け取ったら、onRegisterd() を呼び出します。

ところが、C2DM サーバからメッセージデータがプッシュされたとき(インテントは com.google.android.c2dm.intent.RECEIVE)の関数定義が、サンプルにはありません。onMessage() みたいなのを呼び出すこともない。で、ソースを見てみると...

public class C2DMBroadcastReceiver extends BroadcastReceiver {
     // ...
     @Override
     public void onReceive(Context context, Intent intent) {
          if (intent.getAction().equals(
            // ...
          } else if (intent.getAction().equals(
                    "com.google.android.c2dm.intent.RECEIVE")) {
               handleMessage(context, intent);
          }
     }
 
     // ...

     private void handleMessage(Context context, Intent intent) {
          try {
               // ...
               String parameters = intent.getStringExtra("parameters");
               CharSequence tickerText = intent.getStringExtra("tickerText");
               CharSequence contentTitle = intent.getStringExtra("contentTitle");
               CharSequence contentText = intent.getStringExtra("contentText");
// ...

待てやコラ ヽ(`Д´)ノ

この後、Notification オブジェクトを作って、端末に表示する処理が入っています。

なんで onRegstered() と同じレイヤで受けられるようになってないのか、唐突に tickerText じゃねーよなどと思ったわけです。が、事情をよく分かっていないのでなんとも。Notification とか Toast ってプラットフォームの機能なので、ActionScript からアクセスできないか、アクセスが大変なのかも知れません。