一般にAndroidタブレットを検出するにはどうすればよいですか。ユーザーエージェント?


103

私は至る所を見てきました。タブレットサイトのテストには、Motorola Zoomを使用しています。問題は、Android Useragentが一般的なUseragentであり、タブレットAndroidとモバイルAndroidの間に違いがないことです。Xoom Useragentのような特定のデバイスだけをターゲットにしたくはありません。近い将来、Androidが複数のタブレットデバイスに搭載される可能性が高くなるからです。

私たちはUmbraco CMSを使用しており、51Degrees.mobiソリューションを使用することを検討してきましたが、現時点ではこれは私たちのニーズに対しては機能しません。多分将来に。私は51DegreesとUmbracoの一部の人々がUmbracoへの統合を行うことを知っていますが、最終プロジェクトはおそらく数か月間は出ません。
したがって、なぜAndroidタブレットのUseragent文字列を検出し、現在のようにモバイルサイトにダイレクトしないようにするのか。

Androidタブレットの一般的な検出方法を知っている人がいる場合は、特定のデバイスではなく非常に役立ちます。


2
私は推測しているだけですが、おそらく表示解像度がどれほど高いかを確認する方法はありますか?
フォノン、2011年

@Phonon、はい、Javascriptを使用してres値をサーバーに返信しようとしています。私たちは__doPostBackを試みていますが、それは私たちの価値を送り返していないようです。非表示の入力値があり、クライアント側を示していますが、サーバー側には戻されていません。
ClosDesign 2011年

ここであなたを助けることができるかどうかわかりません。
フォノン

回答:


112

問題は、Androidユーザーエージェントが一般的なユーザーエージェントであり、タブレットAndroidとモバイルAndroidの間に違いがないことです。

これは誤りです。モバイルAndroidでは、User-Agentヘッダーに「モバイル」文字列があります。タブレットAndroidはサポートしていません。

しかし、言及する価値があるレポート「モバイル」のuserAgentでのサファリ、後者はそのかなりの数のタブレットがあることを区別するためにのみ/固体の方法ではありませんが、モバイルとタブレットの間では。


3
あなたは正しいです。Androidを含む文字列を探していました。Androidと!mobileを含む文字列を検索する必要がありました。これについてティム・ブレイの記事を見つけました。
ClosDesign 2011年

6
@yoavf:XOOMのAndroid 3.1アップデートで修正されたようです。私はXOOMを所有していて、それをテストしただけです-「モバイル」はありません。
CommonsWare

27
この答えは完全に正しくはありません。最新のKindle Fireでさえ、かなりの数のタブレットがあり、userAgent文字列で「モバイル」Safariを報告しています。userAgentと解像度検出の可能なサポートの組み合わせでない限り、現時点ではタブレットと電話を確実に検出する方法はないようです。
vernonk

22
嘘!samsungギャラクシータブは明白なタブレットですが、ユーザーエージェントに「モバイル」が含まれています
puchu 2012

1
「モバイル」の追加はAndroid 4にあったと思います。4より前のデバイスはまだたくさんあります... Android 2.xの場合は電話を想定し、3.xの場合はタブレットを想定します(ただし、いくつかの誤検知があります)。 ...それ以外の場合は、モバイルでテストできます...
Tracker1

20

@Carlos:彼の記事でTim Brayはこれを推奨しています(Googleによる別の投稿もそうです)が、残念ながらすべてのタブレットメーカーによって適用されているわけではありません。

...ラージフォームファクターデバイスのメーカーは、ユーザーエージェントから「モバイル」を削除することをお勧めします...

私が見たほとんどのAndroidタブレットのユーザーエージェント文字列は、Samsung Galaxy Tabなどのモバイルサファリを使用しています。

Mozilla / 5.0(Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO)AppleWebKit / 533.1(KHTML、like Gecko)バージョン/4.0 Mobile Safari / 533.1

現在、Androidタブレットを検出するためにデバイス名を確認しています。市場にいくつかのモデルがある限り、それは問題ありませんが、すぐにこれは醜い解決策になるでしょう。

少なくともXOOMの場合、モバイル部分はなくなっているようです:

Mozilla / 5.0(Linux; U; Android 3.0; en-us; Xoom Build / HRI39)AppleWebKit / 534.13(KHTML、like Gecko)バージョン/4.0 Safari / 534.13

ただし、現時点ではAndorid 3.xを搭載したタブレットしかないため、Android 3で確認するだけで十分です。


1
チェックしたデバイスのリストとコーディングを投稿してください。
LTech 2013

12

「モバイル」ユーザーエージェントも検出するほうがよい

User-Agentで「android」を検出してタッチスクリーンの最適化などのAndroid固有の機能を実装することもできますが、主なメッセージは次のとおりです。モバイルサイトがUAスニッフィングに依存している場合は、「mobile」という文字列を検出してくださいUser-Agentの「android」ではなく「android」。これにより、モバイルユーザーとタブレットユーザーの両方に適切にサービスを提供できます。

ブラウザ経由でAndroidデバイスを検出する

 < script language="javascript"> <!--
     var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase()));
              if (mobile) {
                  alert("MOBILE DEVICE DETECTED");
                  document.write("<b>----------------------------------------<br>")
                  document.write("<b>" + navigator.userAgent + "<br>")
                  document.write("<b>----------------------------------------<br>")
                  var userAgent = navigator.userAgent.toLowerCase();
                  if ((userAgent.search("android") > -1) && (userAgent.search("mobile") > -1))
                         document.write("<b> ANDROID MOBILE <br>")
                   else if ((userAgent.search("android") > -1) && !(userAgent.search("mobile") > -1))
                       document.write("<b> ANDROID TABLET <br>")
              }
              else
                  alert("NO MOBILE DEVICE DETECTED"); //--> </script>

3
これは完全に機能します。これにiPadとiPhone / iPod用に追加しました。 else if (userAgent.search("ipad") > -1) document.write("<b> iPad <br>") else if ((userAgent.search("iphone") > -1)||(userAgent.search("ipod") > -1)) document.write("<b> iPhone or iPod <br>")
スペンサーコール

mozilla / 5.0(linux; u; android 2.2; en-gb; gt-p1000 build / froyo)で動作する方法サムスンギャラクシータブレットのために?
LTech 2013

8

Xoomだけをターゲットにしたくないので、このスクリプトを試すことができます。Xoomはありませんが、動作するはずです。

function mobile_detect(mobile,tablet,mobile_redirect,tablet_redirect,debug) {
var ismobile = (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(navigator.userAgent.toLowerCase()));
var istablet = (/ipad|android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(navigator.userAgent.toLowerCase()));

if (debug == true) {
    alert(navigator.userAgent);
}

if (ismobile && mobile==true) {
    if (debug == true) {
        alert("Mobile Browser");
    }
    window.location = mobile_redirect;
} else if (istablet && tablet==true) {
    if (debug == true) {
        alert("Tablet Browser");
    }
    window.location = tablet_redirect;
}
}

githubにプロジェクトを作成しました。チェックしてみてください-https://github.com/codefuze/js-mobile-tablet-redirect。何か問題があれば気軽に問題を提出してください!


1
これは、ICS(4.0)などのAndroidバージョン> 3.0では機能しません。受け入れられた答えは正しいと思います-「モバイルサファリ」がユーザーエージェントにあるかどうかを確認してください。
スマン

他のKindleについては不明ですが、Kindle Fire 1のユーザーエージェント文字列には「kindle」がありません。「android」も含まれていません。唯一の手がかりは「シルク」と「シルク加速」という言葉です。
mklement0

6

ユーザーエージェントでAndroidを検出したら、これがタブレットとスマートフォンのブラウザーを区別する方法です(これはPythonを使用していますが、他のプログラミング言語でも同様に簡単です)。

if ("Android" in agent):
  if ("Mobile" in agent):
    deviceType = "Phone"
  else:
    deviceType = "Tablet"

更新:以下のコメントのとおり、AndroidでのChromeの使用を反映します。


エージェントで「モバイル」を探すだけではどうですか。
エレンタンテキン2012

それでもうまくいくかもしれませんが、「モバイル」だけを検索するのは危険だと思います。「HTCモバイル」などの名前のデバイスが存在する可能性があります。これが推奨されるアプローチだと思います。
スマン

1
GoogleがChrome for Androidをリリースしたので、あなたのアプローチは少し問題になるかもしれません。なぜなら、Android上のChromeは、標準のAndroidブラウザーが実行している通常の「Mobile Safari」ではなく、それ自体を「Chrome Mobile」として報告するためです。公式の推奨事項:developer.google.com/chrome/mobile/docs/user-agent
Eren Tantekin

4

このサイトのエージェント文字列に基づく:

http://www.webapps-online.com/online-tools/user-agent-strings

この結果が出ました:
最初:

すべてのタブレットデバイスには次の機能があり
ます。1.タブレット
2. iPad

第二:

すべての電話デバイスには次の機能があり
ます。1.モバイル
2.電話

第三:

タブレットと電話のデバイスには次のものがあり
ます。1. Android

レベルごとに検出できる場合、結果は90%正しいと思います。SharePointデバイスチャネルと同様。


2

これが私が使うものです:

public static boolean onTablet()
    {
    int intScreenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;

    return (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE) // LARGE
    || (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE + 1); // Configuration.SCREENLAYOUT_SIZE_XLARGE
    }

2

一部のタブレットで「モバイル」が省略されているかどうかはわかりませんが、Samsung Galaxy Tabを含む多くのタブレットでことは不可能モデルの仕様を確認するに頼ることなく、Androidタブレットは、Androidの携帯電話との間で検出すること、彼らのユーザーエージェントで携帯を持っています。このIMHOは、デバイスリストを毎月更新および拡張する予定がない限り、時間の無駄です。

残念ながら、ここでの最善の解決策は、これについてGoogleに不満を述べ、Android向けChromeを修正してもらい、モバイルデバイスとタブレットを識別するためのテキストを追加することです。文字列の特定の場所にM OR Tの1文字を挿入するだけでも十分ですが、それはあまりにも理にかなっていると思います。


1

XoomのユーザーエージェントにXoomという単語があります:Mozilla / 5.0(Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66)AppleWebKit / 534.13(KHTML、like Gecko)Version / 4.0 Safari / 534.13

Galaxy Tabのユーザーエージェントには「モバイル」があります:Mozilla / 5.0(Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO)AppleWebKit / 533.1(KHTML、like Gecko)Version / 4.0 Mobile Safari / 533.1

そのため、Xoomを検出するのは簡単ですが、特定のAndroidバージョンがモバイルかどうかを検出するのは困難です。


1

最近のほとんどのタブレットは、ハニカム3.xを実行しています。デフォルトでは、3.xを実行する電話はありません。現在2.xを実行しているほとんどのタブレットは容量が少なく、いずれにしてもモバイルサイトで表示するほうが良い場合があります。私はそれが完璧ではないことを知っています。しかし、それはモバイルの欠如よりもはるかに正確だと思います。


1
Androidのタブレットのみのリリースであり、オープンソースではなかったため、実際には電話で3.xを実行することもできません。
エレンタンテキン2012

1

モバイルAndroidのユーザーエージェント文字列に「mobile」が含まれている場合がありますが、タブレットでOpera Mobile for Androidを使用している場合はどうなりますか?ユーザーエージェント文字列には「モバイル」が含まれていますが、タブレットサイズのサイトを表示しているはずです。「モバイル」だけでなく「オペラ」が前に付いていない「モバイル」をテストする必要があります

あるいは、Opera Mobileのことを忘れてしまうかもしれません。


1
Opera mobileはユーザー文字列で「mobile」を使用せず、「mobi」を使用します。こちらをご覧ください
イアンスタンウェイ

2
モバイル向けOpera Mobileのユーザーエージェント文字列には「Opera Mobi」が含まれていますが、タブレット向けOpera Mobileのユーザーエージェント文字列には「Opera Tablet」が含まれています。
田川


1

「モバイル」の不在を使用する場合は、ほぼ正しいです。ただし、モバイルキーワードを送信しないHTC Sensation 4G(Android 2.Xでは4.3インチ)があります。

個別に扱いたくなる理由は、iframes等によるものです。


0

51Degreesベータ版、1.0.1.6、および最新の安定版リリース1.0.2.2(2011年4月28日)に、タブレット用のスニッフィング機能が追加されました。基本的には次の行に沿って:

string capability = Request.Browser["is_tablet"];

これがお役に立てば幸いです。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.