簡體   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