繁体   English   中英

Android webview 检测特定页面变化

[英]Android webview detect specific page change

我有一个带有用户身份验证的 android webview 应用程序,该应用程序允许用户通过收集设备的 android id 来注册他们的设备。 当用户运行移动应用程序时,它将检查移动设备是否已注册,然后验证与注册设备关联的登录详细信息。 所有工作都按设计进行,没有问题。

我的问题是当 PHP session 过期时,用户将被引导到登录页面。 如果用户关闭应用程序并重新打开它,它将记录用户,而无需重新输入登录详细信息。 由于公司政策,PHP session 超时无法更改。

我想知道我是否可以检测到登录页面 URL 更改并发送设备 android id 与登录页面 URL 类似的应用程序启动过程。 因此,当 PHP session 过期时,用户将自动重新登录,而无需重新输入登录凭据。

这是我正在使用的当前代码,一些不相关的代码已被删除以减少代码行。 这是我的第一个 android 应用程序,我在移动编程方面的经验非常有限,而且我最近几天一直在寻找没有任何运气。 高度赞赏帮助和指导。

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

    boolean isConnct = false;
    // code here to check internet connection

    // end of internet connection code

    if (isConnct){
        // internet is ok
        final WebView webView = (WebView)findViewById(R.id.webView);

        webView.setWebViewClient(new WebViewClient(){
            @Override
            public void onPageFinished(WebView view, String url) {
                findViewById(R.id.imageLoading1).setVisibility(ImageView.GONE);
                findViewById(R.id.webView).setVisibility(webView.VISIBLE);
            }

            @Override
            public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){
                // show error message
            }

        });
        // using setWebChromeClient to enable javascript
        webView.setWebChromeClient(new WebChromeClient() {
            @Override
            public boolean onJsConfirm(WebView view, String url, String message, final JsResult result) {
                // js confirm code
            }

            @Override
            public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                // js alert code
            }
        });
        // enable javascript and other settings
        String url = "https://www.domainname/login/" + android.provider.Settings.Secure.getString(getContentResolver(), Secure.ANDROID_ID);
        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setDomStorageEnabled(true);
        webSettings.setAllowFileAccess(true);
        webSettings.setLoadWithOverviewMode(true);
        webSettings.setUseWideViewPort(true);
        webSettings.setBuiltInZoomControls(true);
        webSettings.setDisplayZoomControls(false);
        webSettings.setSupportZoom(true);
        webSettings.setDefaultTextEncodingName("utf-8");
        webView.loadUrl(url);
    } else {
        // show error message
    }
}

尝试覆盖WebViewClient中的shouldOverrideUrlLoading方法,检查您的登录 URL 并从那里开始您的自动登录

另一种方法是检查 cookies 到期时间,您可以为此使用CookieManager.getInstance()

这就是我最终做的事情,它似乎按预期工作,当 PHP session 到期时,注册的设备将被重定向到索引页面,新的 Z21D6F40CFB511982E4424E0E250A9557 没有重新输入用户凭据。

如果有注销按钮,那么您需要考虑为注销添加不同的程序,以允许用户注销并重定向到登录页面。

webView.setWebViewClient(new WebViewClient(){
                @Override
                public void onPageFinished(WebView view, String url) {
                    //hide loading image
                    findViewById(R.id.imageLoading1).setVisibility(ImageView.GONE);
                    //show webview
                    findViewById(R.id.webView).setVisibility(webView.VISIBLE);
                }

                @Override
                public void onReceivedError(WebView view, int errorCode, String description, String failingUrl){
                    // show error message
                }

                @Override
                public boolean shouldOverrideUrlLoading(WebView view, String url) {
                    if (url.contentEquals("https://www.domainme/login")){
                        String url2 = "https://www.domainme/login/" + android.provider.Settings.Secure.getString(getContentResolver(), Secure.ANDROID_ID);
                        webView.loadUrl(url2);
                        return true;
                    }else {
                        return false;
                    }
                }

// code truncated

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM