通过 UserAgent 判断是否在我们自己的安卓APP中

之前 写过一篇 根据 UserAgent 判断网页是在浏览器、或在微信、或在APP中 (http://www.miaoqiyuan.cn/p/useragent-in-where),那篇文章能通过 UserAgent 判断出 是否在微信、浏览器或者其他APP中,如果需要判断是否在我们自己开发的APP中,就无能为力了。

WebView 提供了 setUserAgentString,可以任意修改 UserAgent。我们只需要在 UserAgent 中增加 自定义的 字符串,就可以在网页中通过JS判断是否在我们自己的APP内。

MainActivity.java 的代码如下:

package cn.miaoqiyuan.MyApp;

import android.net.http.SslError;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.webkit.SslErrorHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView webView = (WebView) findViewById(R.id.webView);

        //修改User-Agent,比如 MyApp,版本号2.0
        WebSettings webConf = webView.getSettings();
        webConf.setUserAgentString(webConf.getUserAgentString() + " MyApp/2.0<Android>");

        //不使用浏览器打开
        webView.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                //返回值是true的时候控制去WebView打开,为false调用系统浏览器或第三方浏览器
                view.loadUrl(url);
                return true;
            }

            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) {
            	//出现错误页,显示报错
                String data = "<br /><br /><br /><br /><br /><center>无法连接服务器</center>";
                view.loadUrl("javascript:document.body.innerHTML=\"" + data + "\"");
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                //页面加载完毕
                super.onPageFinished(view, url);
            }
        });
        
        //支持JavaScript
        webView.getSettings().setJavaScriptEnabled(true);

        //加载网页APP地址,只要界面做的像APP就可以了
        webView.loadUrl("http://m.abc.com/");
    }
}

判断也很简单,JS或者服务器端脚本都可以进行判断:

var inMyApp = /MyApp\/(\d\.\d)/.exec(navigator.userAgent)
if( inMyApp ){
    console.log("Yes, Version:" + inMyApp[1]); //不在APP内
    //Yes, Version:2.0
}else{
    console.log("No"); //不在APP内
    //No
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注