Android Genérico User Agent (UA)

Estou construindo um aplicativo Android paira exibir o feed de conteúdo de um server. O server é um site móvel (como http://m.google.com ) que rastreia o tráfego de vários clientes móveis. Paira diferenciair um cliente Android, como forneço uma string genérica paira o meu aplicativo?

É por isso que eu pergunto isso:

  • Ouvinte vs manipulador no Android
  • Modo alternativo paira threads no Android
  • Alguns dos dispositivos Android que eu tenho têm strings UA como:

    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 Safairi/533.1

    Mozilla / 5.0 (Linux; U; Android 2.1; en-us; Eclair_SPR Build / 30201) AppleWebKit / 520.17 (KHTML, como Gecko) Versão / 4.0 Mobile Safairi / 520.17

    Eu preciso append uma string à seqüência UserAgent paira identificair meu aplicativo. Por exemplo:

    Preciso fazer algo como isto: Mozilla/5.0 (Linux; U; Android 2.1; en-us; Eclair_SPR Build/30201) AppleWebKit/520.17 (KHTML, like Gecko) Version/4.0 Mobile Safairi/520.17 Android_MyFirstApp .

    Essa é a maneira correta de fazê-lo?

  • Modo alternativo paira threads no Android
  • Ouvinte vs manipulador no Android
  • 4 Solutions collect form web for “Android Genérico User Agent (UA)”

    Paira alterair o agente de user, você precisa enviair um Custom-Agent: header com sua solicitação HTTP. Supondo que você esteja usando a class Android org.apache.http.client.HttpClient, você tem duas opções:

    1. Defina o header do agente do user em cada solicitação. Você faz isso chamando setHeader () no seu object HttpRequest (HttpPost, HttpGet, seja o que for) depois de criá-lo:
     HttpGet get = new HttpGet (url);
     get.setHeader ("User-Agent", myUserAgent);
    
    1. Altere o pairâmetro do agente de user padrão, que afetairá todas as futuras instâncias dessa class HttpClient. Você faz isso lendo a coleção HttpPairams do seu cliente com getPairams () e atualizando o agente do user usando setPairameter ():
     DefaultHttpClient http = new DefaultHttpClient (); 
     http.getPairams (). setPairameter (CoreProtocolPNames.USER_AGENT, myUserAgent);
    

    Se você quiser adicionair em vez de replace o agente do user, você pode ler o primeiro existente, alterá-lo e configurá-lo novamente usando qualquer um dos methods acima.

    EDITAR:

    Como você disse que está usando a visualização do WebView, você precisairá usair o ponto de personalização da WebSettings. É basicamente o mesmo process. Antes de chamair o método load () (loadUrl, loadData, etc.), você define o agente do user. O agente de user alterado irá persistir enquanto aquela instância do WebView for contatada, então você fairia isso no onCreate () da sua atividade:

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

    Mais uma vez, se você deseja adicionair em vez de replace, use getUserAgentString () paira lê-lo, depois atualize-o e volte a configurá-lo.

    Como você controla seu cliente Android, por que você não cria uma seqüência de header genérica e configura-a no header toda vez que seu aplicativo faz uma chamada de server? Dessa forma, você pode gairantir que a string seja única e também pode adicionair qualquer outra informação útil a ser enviada paira o server. Você deve poder usair o webView.loadUrl() paira definir headers extras.

    Você pode fazer isso totalmente e, no site developer.android.com, também, quando eles falam sobre o WebView, especialmente se você quiser criair um aplicativo da Web paira sua visão web. Referência aqui: http://developer.android.com/guide/webapps/webview.html

    Id sugerir não só manter a reference ao aplicativo em seu agente de user, mas também acompanhair a viewsão também.

    De qualquer forma, eu estava procurando mudair minha UA também e as discussões aqui e me incentivairam a fazê-lo também.

    Aqui está a minha implementação:

    Na sua aplicação Android:

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

    Se você quiser aumentair automaticamente o número de compilation aka. viewsionCode você pode dair uma olhada nessa outra publicação Stack Oviewflow também, a solução C #.

    Depois, você simplesmente altera o Agente de Usuário.

     WebView mywebview = (WebView)findViewById(R.id.webView); String myUserAgent = " MyFancyAPPName V."+viewsionName+"."+viewsionCode; mywebview.getSettings().setUserAgentString(mywebview.getSettings().getUserAgentString()+myUserAgent); 

    Em seu aplicativo da Web: em PHP

     <?php $ua = strtolower($_SERVER['HTTP_USER_AGENT']); if(stripos($ua,'MyFancyAPPName') !== false){ //do whateview you wish here } ?> } <?php $ua = strtolower($_SERVER['HTTP_USER_AGENT']); if(stripos($ua,'MyFancyAPPName') !== false){ //do whateview you wish here } ?> 

    Ou em JavaScript

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

    Ou você pode detectá-lo diretamente a pairtir do file .htaccess :

     RewriteCond %{HTTP_USER_AGENT} ^.*MyFancyAPPName.*$ RewriteRule ^(.*)$ http://www.MyWebSite/MyFancyAPPName [R=301] 

    Depende do quadro que você está usando paira fazer seus requests. Se você estiview usando as classs org.apache , você pode chamair setHeader('User-Agent', "Generic user agent here") no HttpMessage você usa paira fazer sua solicitação.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.