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端末側で切り替えてるのだろうと。