2011年8月28日日曜日

C2DMをつかってみた

Android 2.2以降からC2DMというAndroidアプリにPushでメッセージを送信する機能を試してみる。
Appengineなら"Channel API"てのもPush通知に使えるみたいだけど、またこんど。

C2DM使うにはまず登録が必要
http://code.google.com/intl/ja/android/c2dm/signup.html

適当にフォームに入力して、少し待つ"AC2DM invitation"という件名のメールがきた。

"Please note that by default, all new sender accounts are held to a development-only quota.
This quota is sufficient for development and exploratory purposes."

ということで、今回登録されたのは開発のみに利用できるということだが特に問題ない。

ちなみに商用サービスで使うには、なにやら利用規模を見積もってメールでやりとりしないといけないみたいです。
"Before you launch a C2DM-enabled application to a large audience,
please reply to this email to discuss a production-level quota,
including estimates on the number of devices and average messages per device."

jumpnote、およびchrometophoneというアプリのソースが公開されていて参考になるみたい
http://code.google.com/p/jumpnote/
http://code.google.com/p/chrometophone/

アプリですが、chrometophoneを参考にすることとして
ここにあった
http://code.google.com/p/chrometophone/source/browse/trunk/android/c2dm/com/google/android/c2dm/

C2DMBaseReceiver.java
C2DMBroadcastReceiver.java
C2DMessaging.java

を利用します。

C2DMBaseReceiverを継承した、C2DMReceiverを作成。
こんな感じ。

public class C2DMReceiver extends C2DMBaseReceiver {
	
    public C2DMReceiver() {
        super(PushMessage.SENDER_ID);
    }
    
    // 登録時の処理
    @Override
    public void onRegistered(
		Context context, String registration_id) {
    	Log.i("C2DMReceiver#onRegistered", registration_id);
    }
    
    // 登録解除時の処理
    @Override
    public void onUnregistered(Context context) {
    	Log.i("C2DMReceiver#onUnregistered","onUnregistered");
    }
    
    // エラー時の処理
    @Override
    public void onError(Context context, String errorId) {
    	Log.i("C2DMReceiver#onError", errorId);
    }
    
    // サーバーからメッセージを受け取ったときの処理
    @Override
    public void onMessage(Context context, Intent intent) {
    	Log.i("C2DMReceiver#onMessage","onMessage");
        Bundle extras = intent.getExtras();
        if (extras != null) {
            String data1 = (String) extras.get("data1");
            String data2 = (String) extras.get("data2");
            Log.i("data1",data1);
            Log.i("data2",data2);
        }
    }
}


こんな感じの画面を表示するActivityを作成してそれぞれのボタンは以下のような実装。
SENDER_IDはC2DMに登録したものを指定。
        Button register = (Button) findViewById(R.id.register);
        register.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View view) {
				// C2DMサーバーへ登録リクエスト
				C2DMessaging.register(PushMessage.this, SENDER_ID);
			}
        });
        
        Button unregister = (Button) findViewById(R.id.unregister);
        unregister.setOnClickListener(new OnClickListener(){
			@Override
			public void onClick(View view) {
				// C2DMサーバーへ解除リクエスト
				C2DMessaging.unregister(PushMessage.this);
			}
        });


つぎにAndroidManifest.xmlにパーミッションやサービスの設定を記述。
これもchrometophoneのものを参考にして自分の環境にあわせて適当に。
XMLがうまくここに書けなかった。。
http://code.google.com/p/chrometophone/source/browse/trunk/android/AndroidManifest.xml

今回apkはエミュレータにインストール。
エミュレータ上でGoogleアカウントにサインインしてないとregistration_idの取得ができなかったので
サインインをした。

さて動作確認ですが、サーバ側の実装はしていないのでcurlをつかってメッセージ送信してみます。
最初にAuth tokenを取得しなくてはいけないようです。
curl https://www.google.com/accounts/ClientLogin \
--data-urlencode Email=***sender account email*** \
--data-urlencode Passwd=***password*** \
-d accountType=GOOGLE \
-d source=Google-cURL-Example \
-d service=ac2dm
Email,Passwdはsenderとして登録したアカウントのもので置き換え実行すると以下のような値が取得できた。
SID=xxxxxxxxxxxxxxxx
LSID=xxxxxxxxxxxxxxxx
Auth=xxxxxxxxxxxxxxxx

このAuthをつかってメッセージ送信する。
curl --header "Authorization: GoogleLogin auth=*** auth token***" "https://android.apis.google.com/c2dm/send" \
-d registration_id=*** id **** \
-d data.data1=HelloPush \
-d data.data2=HelloPush123 \
-d collapse_key=something -k
registration_idはアプリで登録ボタン押下したときに取得したログに表示されたものを利用。
こんな感じで実行したら、メッセージ届きました。

パラメータの詳細とかはここ。
http://code.google.com/intl/ja/android/c2dm/index.html#push

C2MDをとりあえず使えたということで、ここまで。

Androidアプリ作成でコンパイルエラー?

久々の記事投稿となりました。

新規のAndroidアプリプロジェクトを作成したら以下のようなメッセージが表示されて動かなかった。
"error generating final archive debug certificate expired on"

ちょっと調べてみると、どうやら「~/.android/debug.keystore」ファイルを作り直す必要がある模様。
作り直すのは簡単で上記ファイルを削除してeclipse上でproject->cleanしたら解決しました。

久しぶりに新規のプロジェクトをつくって色々試してみようと思ったらハマってしまった。。

2010年12月19日日曜日

Google 日本語入力 正式版を公開

"いま"とか"きょう"で実際の時間や日付が出たり,西暦から和暦変換できたりは使えるな。
以前からできたのかだろうか?

モバイル Google マップ 3D


3D表示試してみたいが、試せる端末がないや。

2010年9月24日金曜日

XperiaはHT-03Aと扱いが違うな

電話帳移行ガイドとかあるんですね
http://bit.ly/cYSKCm

Gmailの連絡先にインポートして連絡先同期するより
SDから直接インポートしたほうがよいんですかね?


「海外でご利用になる際のアクセスポイントの設定」なんかもあります。

いつの間にかHT-03Aもヘルプが少しは充実してました。

2010年8月18日水曜日

#cm6 rc3 起動アニメーションが変わったな



あと目に見えるところではGmailアプリが使いやすくなっている。
動きもまあ軽快で良い感じ。

2010年8月11日水曜日

KaoMashがモバイルアスキーで紹介されました

記事はこちら
とても詳しく使い方を紹介して頂いています。

たくさんの便利なアプリが紹介されていて内容もよくまとまっています。
アプリをお探しの方は一度訪れてみてはいかがでしょうか。
mobile ASCII のサイトはこちら
Android端末からのアクセスにも対応しているようです。
mobile ASCII for Androidでは、Androidユーザーに役立つアプリ情報を中心に、関連する記事を発信します。また、このサイトをAndroid端末で閲覧した場合、各アプリの記事にはAndroid marketへのリンクが貼られていますので、とても便利です!