Android специфика обнаружения веб-просмотра c изменение страницы - PullRequest
0 голосов
/ 06 августа 2020

У меня есть приложение android webview с аутентификацией пользователя, приложение позволяет пользователям регистрировать свои устройства, собирая android id устройства. Когда пользователь запускает мобильное приложение, оно проверяет, зарегистрировано ли мобильное устройство, а затем проверяет данные для входа, связанные с зарегистрированным устройством. Все работает, как задумано, без проблем.

Моя проблема в том, что по истечении сеанса PHP пользователи будут перенаправлены на страницу входа. Если пользователь закроет приложение и снова откроет его, он зарегистрирует пользователя без повторного ввода данных для входа. PHP тайм-аут сеанса не может быть изменен из-за политики компании.

Я хотел бы знать, могу ли я обнаружить изменение URL-адреса страницы входа и отправить устройство android id с URL-адресом страницы входа, аналогичным в процесс запуска приложения. Итак, когда сеанс PHP истечет, пользователи будут автоматически входить в систему без необходимости повторно вводить свои учетные данные.

Вот текущий код, который я использую, некоторые нерелевантные коды были удалены, чтобы уменьшить строки кода. Это мое первое приложение 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
    }
}

Ответы [ 2 ]

0 голосов
/ 07 августа 2020

Это то, что я в итоге сделал, и, похоже, он работает, как ожидалось, когда PHP сеанс истекает, зарегистрированные устройства будут перенаправлены на страницу индекса с новым сеансом без повторного ввода учетных данных пользователя.

Если есть кнопка выхода, вам необходимо рассмотреть возможность добавления другой процедуры для выхода, чтобы пользователи могли выходить из системы и перенаправляться на страницу входа.

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

}
0 голосов
/ 06 августа 2020

попробуйте переопределить метод shouldOverrideUrlLoading в WebViewClient, проверьте URL-адрес входа и запустите автоматический вход оттуда

другой подход - проверка срока действия файлов cookie, вы можете использовать CookieManager.getInstance () для этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...