2013-02-01 7 views
14

サーバーでAndroidを検出する明白な方法は、User-Agent HTTPヘッダーから "Android"文字列を検索することです。しかし、 - これは一部のデバイス(HTC Evoなど)では動作しないという苦情がありましたが、Androidとしては検出されません。私のHTC Evo 3Dウェブブラウザでは、whatsmyuseragent.comから、Mozilla/5.0(X11; Linux x86_64)AppleWebKit/534.24(GeckoのようなKHTML)Chrome/11.0.696.34 Safari/534.24が提供されています。 Androidの文字列やバージョンはありません。それはそれを変更するデバイス上のセキュリティソフトウェア、またはHTC固有の問題である可能性があります。同じデバイス上WebサーバーでAndroidを検出できない

明らかにAndroidのChromeは別のものを持って、より良いUA:のMozilla/5.0(Linuxでは、Androidの4.0.3; HTC EVO 3D X515mは/ IML74Kのビルド)のAppleWebKit/535.19(KHTML、ヤモリなど)クローム/ 18.0を。 1025.166 Mobile Safari/535.19しかし、私はそれだけではうまくいきません。 QRコードリーダーアプリは、無効なUAを持つ内蔵AndroidブラウザではなくChromeを開きます。

デバイスやブラウザ間でAndroidを確実に検出するための優れたトリック(javascriptコール?)はありますか?

編集: はギャラクシーS III、同じUser-Agent文字列と同じ問題のようになります。Android Phone Browser Detection

+0

問題は解決しませんが、User-Agentと一緒にブラウザの解像度を探すことができますか? – RMalke

+1

多分追加の情報を与えるだろうが、私は、異なるユーザーID /解像度/いくつかの別のヘッダーの組み合わせでデバイスデータベースの管理を開始する代わりに、いくつかの準備ができて弾力のあるソリューションを使用したいと思います。 – JaakL

答えて

8

Androidウェブブラウザの設定で「デスクトップ版を表示」を選択したようです。電源を切ると、ユーザーエージェントはAndroidを搭載しています。これはICSの機能のようですが、HTCは非難されるべきではありません。私が間違ったユーザーエージェントのためにgoogleしているのは、それが多くの異なる電話機で起こることです。

2

この特定のタスクのために、私はwurflサーバー側を使用することをお勧めかもしれません。

あなたは非常にシンプルな何かをすることによって、アンドロイドを検出することができます:私はあなたの問題から理解何

$requestingDevice = $wurflManager->getDeviceForHttpRequest($_SERVER); 
if ($requestingDevice->getCapability("device_os") == "Android") { 
    //the magic 
} 
+1

wurflがUser-Agentよりも優れたものを使うなら、私は本当に懐疑的です。私はt.wurflでテストしました。comとdevice_osを明らかにしていない – JaakL

+0

私はあなたの意味を理解しています - 私の研究は、 'orientation'が 'ontouchstart'と同様に定義されていることを示しています - そして、それはユーザエージェントからのiphone、blackberry、それはおそらくアンドロイドだと推測される - しかし、残念ながら、彼らは彼らが適切なUAを送信していない場合、あなたが得ることができるように正確です:( –

0

はあなたには、いくつかのデバイス上でユーザーエージェントを取得し、それを与えることを拒否し、デバイスの数にされています。だから私は、いくつかのwebserviceを介してあなたのサーバーを呼び出すアンドロイドデバイス上のアプリケーションを持っていると仮定しており、そこからユーザエージェントを抽出しようとしています。だから何ソリューション、私はここで見ることができますアンドロイドのアプリケーションである、それはHTTPヘッダに、サーバから掲載されますので、コードからのようなユーザーエージェントのパラメータを追加し、あなたが簡単に

HttpClient httpclient = new DefaultHttpClient(); 
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Android"); 

ていることに抽出することができ、私は同じ問題を抱えていたが、私このように解決されました。

+0

彼は質問に何度か、ブラウザでAndroidデバイスを検出したい – crazylpfan

+0

次に、アンドロイドデバイスであることを確認するアンドロイドネイティブビルドバージョンを呼び出すwebviewで小さなユーティリティを作成します。Android.os.Build.VERSION。 –

+1

ユースケースは実際にはアプリケーションダウンロード用のQRコードです。 Webブラウザを使用したQRリーダーは正しく検出されません。そのための特別なユーティリティは無意味です。 – JaakL

1

ユーザエージェントを確認することは、常にユーザのデバイスを確実に判断するために推奨されています(少なくともデフォルト設定では)。おそらく、あなたの検索をもっと頑強にしようとするかもしれませんか? Mozillaは、文字列"Mobi"を代わりに検索することを提案しています。

+2

私は、ユーザーエージェントのサンプルを提供しました: "Mozilla/5.0(X11; Linux x86_64)AppleWebKit/534.24(KHTML、Geckoのような)Chrome/11.0.696.34 Safari/534.24"。 Mobi、Androidなどはありません – JaakL