11

サーバーからのコンテンツ フィードを表示する Android アプリを作成しています。サーバーは、さまざまなモバイル クライアントからのトラフィックを追跡するモバイル Web サイト ( http://m.google.comなど) です。Android クライアントを区別するために、アプリに一般的な文字列を提供するにはどうすればよいですか?

これが私がそれを尋ねる理由です:

私が入手した一部の Android デバイスには、次のような UA 文字列があります。

Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; ADR6400L 4G Build/FRG83D) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

Mozilla/5.0 (Linux; U; Android 2.1; en-us; Eclair_SPR Build/30201) AppleWebKit/520.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/520.17

アプリを識別するために、UserAgent 文字列に文字列を追加する必要があります。例:

私はこのようなことをする必要があります: Mozilla/5.0 (Linux; U; Android 2.1; en-us; Eclair_SPR Build/30201) AppleWebKit/520.17 (KHTML, like Gecko) Version/4.0 Mobile Safari/520.17 Android_MyFirstApp.

これは正しい方法ですか?

4

5 に答える 5

11

ユーザー エージェントを変更するには、カスタムの User-Agent: ヘッダーを HTTP リクエストと共に送信する必要があります。Android org.apache.http.client.HttpClient クラスを使用していると仮定すると、次の 2 つのオプションがあります。

  1. リクエストごとにユーザー エージェント ヘッダーを設定します。これを行うには、作成後に HttpRequest (HttpPost、HttpGet など) オブジェクトで setHeader() を呼び出します。
HttpGet get = 新しい HttpGet(url);
get.setHeader("ユーザーエージェント", myUserAgent);
  1. デフォルトのユーザー エージェント パラメータを変更します。これは、その HttpClient クラスの今後のすべてのインスタンスに影響します。これを行うには、getParams() を使用してクライアントから HttpParams コレクションを読み取り、setParameter() を使用してユーザー エージェントを更新します。
DefaultHttpClient http = 新しい DefaultHttpClient();
http.getParams().setParameter(CoreProtocolPNames.USER_AGENT, myUserAgent);

ユーザー エージェントを置き換える代わりに追加する場合は、まず既存のものを読み取り、変更してから、上記のいずれかの方法を使用して元に戻すことができます。

編集:

WebView ビューを使用していると言ったので、そこで WebSettings カスタマイズ ポイントを使用する必要があります。基本的に同じプロセスです。load() メソッド (loadUrl、loadData など) を呼び出す前に、ユーザー エージェントを設定します。変更されたユーザー エージェントは、WebView のインスタンスが存在する限り保持されるため、Activity の onCreate() でこれを行います。

view = (WebView)findViewById(R.id.webview);
view.getSettings().setUserAgentString(myUserAgent);

繰り返しますが、置換ではなく追加する場合は、getUserAgentString() を使用して読み取り、更新してから再度設定します。

于 2011-04-14T20:24:08.590 に答える
1

Androidクライアントを制御しているので、一般的なヘッダー文字列を作成し、アプリがサーバー呼び出しを行うたびにヘッダーに設定してみませんか?これにより、文字列が一意であることを確認でき、サーバーに送信するその他の有用な情報を追加することもできます。webView.loadUrl()を使用して追加のヘッダーを設定できるはずです。

于 2011-04-14T20:40:02.267 に答える
1

特にWebビュー用のWebアプリを構築したい場合は、WebViewについて話すときにdeveloper.android.comでそれを提案することもできます。ここを参照してください: http://developer.android.com/guide/webapps/webview.html

ユーザーエージェントでアプリケーションへの参照を保持するだけでなく、バ​​ージョンも追跡することをお勧めします。

とにかく、私も自分の UA を変えたいと思っていました。

これが私の実装です:

Android アプリで:

String versionName="";
int versionCode=0;
try {
    versionName = getBaseContext().getPackageManager().getPackageInfo(getBaseContext().getPackageName(), 0 ).versionName;
    versionCode = getBaseContext().getPackageManager().getPackageInfo(getBaseContext().getPackageName(), 0 ).versionCode;
} catch (NameNotFoundException e) {
    e.printStackTrace();
}

ビルド番号 aka を自動インクリメントしたい場合。versionCode この他のスタック オーバーフローの投稿、C# ソリューションもご覧ください。

その後、ユーザー エージェントを変更するだけです。

WebView mywebview = (WebView)findViewById(R.id.webView);
String myUserAgent = " MyFancyAPPName  V."+versionName+"."+versionCode;

mywebview.getSettings().setUserAgentString(mywebview.getSettings().getUserAgentString()+myUserAgent);

Web アプリケーション: PHP で

<?php
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);

if(stripos($ua,'MyFancyAPPName') !== false){
    //do whatever you wish here
}
?>

またはJavaScriptで

var ua = navigator.userAgent.toLowerCase();
var isAndroid = ua.indexOf("MyFancyAPPName") > -1;
if(isAndroid) { 
    //do whatever you wish here
}

または、 .htaccessファイルから直接検出できます。

RewriteCond %{HTTP_USER_AGENT} ^.*MyFancyAPPName.*$
RewriteRule ^(.*)$ http://www.MyWebSite/MyFancyAPPName [R=301]
于 2012-01-12T14:54:22.910 に答える
0

リクエストを行うために使用しているフレームワークによって異なります。org.apacheクラスを使用している場合は、使用しsetHeader('User-Agent', "Generic user agent here")ているを呼び出してHttpMessageリクエストを行うことができます。

于 2011-04-14T20:14:12.547 に答える