HTTP要求に基づいてWebアプリケーションでモバイルブラウザを検出する標準的な方法
-
02-07-2019 - |
質問
エンタープライズe-コマースwebapp(Java / Servletベース)のモバイルブラウザサポートの道を歩み始めています。もちろん、多くの決定を下す必要がありますが、私にとっては、モバイルブラウザーを確実に検出し、それに応じて返されるコンテンツを決定できることが基本だと思われます。 httpリクエストに基づいてこの決定を(迅速に)行うための標準的な方法はありますか?理想的には、リクエストを行っている特定のブラウザおよびデバイスに関する詳細情報(画面サイズ、html機能など)を収集します。
また、既存の大規模なエンタープライズwebappを採用し、開発側からモバイルブラウザーサポートを設計するというこの道をたどった誰かから役立つ補足情報をいただければ幸いです。
[編集]私は確かにリクエストヘッダーを理解しており、標準ユーザーエージェントのデータベースに関する情報は非常に役立ちます。 「その他」のリクエストヘッダープロパティについて話している場合、同様の標準化された名前/値のリソースを含めることができれば大きな助けになります。
[編集]いくつかのユーザーは、検出を行うWebサービスへの回線経由の呼び出しを含むソリューションを提案しています。これは機能すると確信していますが、エンタープライズeコマースサイトには2つの理由で良いソリューションではありません。1)速度。サードパーティへのすべてのページ要求に対する回線経由の呼び出しは、パフォーマンスに大きな影響を与えます。 2)依存関係/法的。ウェブサイトの応答時間と主要な機能をサービスに結び付けますが、これは法律上およびリスク上の理由で恐ろしいことです。
解決
ユーザーエージェントをチェックするのは標準的な方法ではないでしょうか?モバイルブラウザの検出に使用できるユーザーエージェントのデータベースを次に示します。
他のヒント
@Davidの回答はWURFLを使用して言及しました。これはおそらく最良の選択肢です。ただし、(私の経験や他の経験から)成功率は通常約60%です。キャリアがUAを絶えず変更し、存在するデバイスプロファイルの量(60,000+?)があるため、必要なすべての適切なデータを取得するための完全な方法はありません。
デバイスDBに大きく依存する前に、少しだけ警告します。私が間違っていると推測した場合に備えて、セッションオプションを変更できるようにすることで、ユーザーのオプションを開いたままにしようと思います。
Modernizer を使用して、ブラウザの機能を検出できます
ユーザーエージェントを介してモバイルブラウザーを検出できましたが、PCプラットフォームでのブラウザー戦争は、ユーザーエージェントのスニッフィングは実際にはそれほど良いことではないことを示しています。
理想的には、メディアタイプに基づいて特定のスタイルを適用するか、ユーザーエージェント以外のヘッダーに基づいて異なる回答を送信する必要があります。たとえば、どの種類のコンテンツかを伝えるAccept-headerブラウザが好む。
今は、ブラウザスニッフィングを介してiPhoneおよびOperaで動作するサイトをコーディングするだけで十分かもしれませんが、GoogleのAndroidはすぐに登場し、iPhoneに近いブラウザ機能を持つ他の多くの携帯電話があります近い将来、これらのデバイスを最初からpossibelほどサポートしていないモバイルWebサイトを開発するのは無駄です。
モバイルデバイスを検出する正しい方法を数日間検索した後、単純に[愚か]にすることを決定し、インデックスページに[モバイルデバイスサイト]ボタンを配置します。離れて!!
モバイルブラウザを検出-さまざまなプログラミング言語のスニペット。
次の軽量のApache構成はかなり良い仕事をし、PCバージョンを好むならユーザーの好みを覚えています
<VirtualHost (your-address-binding)>
(your-virtual-host-configuration)
RewriteEngine On
RewriteCond %{QUERY_STRING} !ui=pc
RewriteCond %{HTTP_COOKIE} !ui=pc
RewriteCond %{HTTP_USER_AGENT} "^.*(iphone|ipod|ipad|android|symbian|nokia|blackberry| rim |opera mini|opera mobi|windows ce|windows phone|up\.browser|netfront|palm-|palm os|pre\/|palmsource|avantogo|webos|hiptop|iris|kddi|kindle|lg-|lge|mot-|motorola|nintendo ds|nitro|playstation portable|samsung|sanyo|sprint|sonyericsson|symbian).*<*>quot; [NC,OR]
RewriteCond %{HTTP_USER_AGENT} "^(alcatel|audiovox|bird|coral|cricket|docomo|edl|huawei|htc|gt-|lava|lct|lg|lynx|mobile|lenovo|maui|micromax|mot|myphone|nec|nexian|nook|pantech|pg|polaris|ppc|sch|sec|spice|tianyu|ustarcom|utstarcom|videocon|vodafone|winwap|zte).*<*>quot; [NC]
RewriteRule /(.*) http://bemoko.com/$1 [L]
RewriteCond %{QUERY_STRING} "ui=pc"
RewriteRule ^/ - [CO=ui:pc:(your-cookie-domain):86400:/]
RewriteCond %{QUERY_STRING} "ui=default"
RewriteRule ^/ - [CO=ui:default:(your-cookie-domain):86400:/]
</VirtualHost>
この@ http://bemoko.comの詳細な背景/training.team/help/team/pc-to-mobile-redirect
私は、uaprofとユーザーエージェントに基づく無料の検出システムを提案します。 http://www.mobilemultimedia.be UAprofは通常、同じuaprofに対して複数のユーザーエージェントが存在するため、使用可能な場合は検出の主キーにする必要があります。これを自分で管理したい場合は、データベース全体をダウンロードして自分でローカルに管理できるため、Wurflを選択する必要があります。
最近同様のニーズがあったとき、このコード HTTP_X_WAP_PROFILE
、 HTTP_ACCEPT
、および HTTP_USER_AGENT
を使用して、ブラウザーをモバイルまたは非モバイルとして識別します。これはPHPですが、必要なものにかなり簡単に変換できます(クラシックASPのVBScriptで実装しました)。
皮肉なことに、モバイルユーザーと非モバイルユーザーに特定のURLを提供することを決めたため、最終的にはコードを使用しなかったことが判明しましたが、テスト時には確実に機能しました...
ブラウザ、デバイス、使用可能な言語、使用可能な形式などのほとんどの情報をリクエストヘッダーから取得します。上記のユーザーエージェントは、リクエストヘッダーの一部です。
OK、これは非常に簡単な答えです-ユーザーに決定させるのはどうですか? APへのログイン時に、モバイルサイトへのリンクを提供します。モバイルサイトで、「メインサイトに戻る」リンクを提供します。 -モバイルデバイスでwww.fazolis.comを試してください-彼らはこれをうまくやっています。
次に、ブラウザサイトからモバイルサイトへのリンクで、「投票」を登録します。およびそのユーザーエージェント。モバイルサイトを希望する YOUR クライアントの信頼できるリストを作成できます。これらのモバイルデバイスの画面サイズの仕様に合わせてこれを使用すると、満足のいくユーザーエクスペリエンスを得るための非常に優れたロジックを構築できます。これほど基本的なものをネットワークソースに投稿することはありません。
ああ、あなたの「モバイルサイト」で-apを意味的にうまく記述すれば、モバイルとブラウザの両方に単一のサイトを提示できるのに対し、2つの別個のページセットを記述する必要があります。ちょっと考えてみてください-これは後で時間を節約するために余分に考えて努力する価値があります。
ここに掲載されていませんが、現在検討している別のオプションは www.detectmobilebrowser.com です。 a>
最も簡単な方法は、モバイルブラウザに関連付けられた通常のタグで配列を作成することです。少なくともほとんどのモバイルユーザーエージェントには、mobile、mini、nokia、java ME、android、iphone、mobile OSなどの単語が必要です。phpstrposを使用してユーザーエージェントと一致する場合は、ページの上部にモバイルボタンを印刷します。選択するユーザーを残します。たいていの場合、ズームまたはスクロールする必要があることを除いて、モバイルブラウザで同じエクスペリエンスが得られるため、フルサイトが大好きです。
以前に定義されたリスト、でユーザーエージェント文字列を確認する必要があります1つ
ウェブサービスを使用して、handsetdetection.comなどのモバイルブラウジングを検出できます。
事実は、useragentに頼るだけではモバイルブラウザを検出するのに十分ではないということです。
確かに、数年前に特定の文字列を検索して、それがノキアか何かであったと推測できましたが、今では非常に多くの携帯電話があり、非常に多くのものがより洗練されたものではないふりをしていますが必要です。
リンクテキストで素晴らしいサイトを見つけました。これは、MTVがすべてのモバイルWebに使用する同じソリューションに基づいています。サイト。それはデバイスに依存しないマークアップ言語を持っているので本当に良いですが、より重要なのは、isMobileDevice()のウェブサービス呼び出しを提供することです。
マニュアルを見て、「どのように機能するか」
これを顧客サイトに使用しましたが、正確に検出されないモバイルブラウザをまだ見つけていません。完全に盲目!
- デバイスと機能の検出を使用してモバイルWebでのユーザーエクスペリエンスを向上させる
- デバイス検出の紹介
- モバイルサイトのデザインへのアプローチ
- 何もしない
- 一般的なモバイルサイトの提供
- モバイルと適応を考慮した設計
- コンテンツの適応とデバイスのグループ化戦略
- デバイスのグループ化
- コンテンツの適応
- そもそも適応の必要性を最小限に抑える
- デバイス検出の一般的なアプローチ
- サーバー側の適応
- クライアント側の適応
- サーバー側ユーザーエージェント(UA)とヘッダールックアップ
- サーバー側のUA文字列とデバイスデータベースルックアップの組み合わせ
- サーバー側ユーザーエージェントプロファイル(UAProf)の検出
- JavaScriptテクノロジーに基づく検出
- CSSメディアタイプ
- CSSメディアクエリ
- 追加のベストプラクティス
- リダイレクト+手動リンク
- ランディングページ+手動リンク
- ダウンロード可能なサンプルページ
WURFL APIを使用してデバイスタイプを検出できます
http://wurfl.sourceforge.net/wurfl_schema.php
または Modernizer を使用して、ブラウザーの機能を検出します