12

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

明らかに、同じデバイス上の Android Chrome には別のより優れた UA があります。、しかし、たとえばQRコードリーダーアプリが、無効なUAを持つ組み込みのAndroidブラウザーではなく、Chromeを開くことを期待することはできません。

デバイスとブラウザ間で Android を確実に検出するための良いトリック (javascript 呼び出し?) はありますか?

編集:Galaxy S IIIと同じ問題のように見えます、同じUser-Agent文字列:Android Phone Browser Detection

4

4 に答える 4

6

Android Web ブラウザーの設定で [デスクトップ バージョンを表示] を選択したようです。オフにすると、ユーザー エージェントは Android と一緒になります。これは ICS の機能のようです。HTC のせいではありません。Google で間違ったユーザー エージェントを指定して、多くの異なる電話で発生することを確認してください。

于 2013-03-12T13:39:58.113 に答える
1

この特定のタスクについては、サーバー側で wurflを使用することをお勧めします。

非常に簡単なことを行うことで、Android を検出できます。

$requestingDevice = $wurflManager->getDeviceForHttpRequest($_SERVER);
if ($requestingDevice->getCapability("device_os") == "Android") {
    //the magic
}
于 2013-03-09T02:04:01.590 に答える
0

あなたの問題から私が理解したのは、一部のデバイスでユーザーエージェントを取得しており、それを拒否するデバイスのいくつかでそれを拒否していることです。したがって、Androidデバイスにアプリケーションがあり、Webサービスを介してサーバーを呼び出しており、そこからユーザーエージェントを抽出しようとしていると想定しています。ここで私が見ることができる解決策は、Androidアプリケーションでユーザーエージェントパラメーターをコードから追加することです。これにより、HTTPヘッダーに投稿され、サーバーから簡単に抽出できます

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

私は同じ問題を抱えていましたが、この方法で解決しました。

于 2013-03-12T05:25:03.857 に答える