AndroidMarketのリンクURLを考えてみる

いくつも記述があるのが気持ち悪い。
Androidアプリのリンクを貼るときにリンクタグをどう書くのがいいのか。

https」より「http」で記述しておくほうが,PCとAndroid両方のマーケットを兼用して切り替えて表示してくれる。
AndroidMarket側ではクライアントの判別をどうやって行ってるのか。

「http」にアクセスすると302でリダイレクトされている

「http」でアクセスしても「https」にリダイレクトされるので最終的には「https」にアクセスするようになる。

$ curl -L --head --user-agent 'Mozilla/5.0 (Linux; U; Android 2.1-update1; ja-jp; HTCX06HT Build/ERE27) AppleWebKit/530.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/530.17' 'http://market.android.com/details?id=com.google.android.apps.androidify'
HTTP/1.1 302 Moved Temporarily
Content-Type: text/html; charset=UTF-8
Location: https://market.android.com/details?id=com.google.android.apps.androidify
Date: Sat, 23 Apr 2011 04:46:12 GMT
Expires: Sat, 23 Apr 2011 04:46:12 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE
Transfer-Encoding: chunked

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Strict-Transport-Security: max-age=2592000
Content-Length: 47984
Date: Sat, 23 Apr 2011 04:46:13 GMT
Expires: Sat, 23 Apr 2011 04:46:13 GMT
Cache-Control: private, max-age=0
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block
Server: GSE

ユーザーエージェント,リファラを変更してもAndroid向けのマーケットの描画に必要なHTMLやXMLなどは取得できない。

Android側で別アクティビティが起動されている

Android側で logcat しながら,ブラウザでWEBアクセスを行うと以下のIntentな処理が行われている。

I/ActivityManager(   96): Starting: Intent { act=android.intent.action.VIEW cat=[android.intent.category.BROWSABLE] dat=http://market.android.com/details?id=com.google.android.apps.androidify flg=0x3000000 cmp=com.android.vending/.AssetInfoActivity } from pid 12544

adb shell を利用して該当インテントにURL文字列をデータとして渡せば,AndroidMarketアプリ画面を表示できる。

$ adb shell am start -n com.android.vending/.AssetInfoActivity -a android.intent.action.VIEW -c android.intent.category.BROWSABLE -d http://market.android.com/details?id=com.google.android.apps.androidify

この処理では「http」でも「https」でも同様に起動できるので,ここの直前のAndroid端末側で切り替えてるのだろうと。