Android WebView重定向到具有深层链接的活动

时间:2020-06-15 13:30:49

标签: android webview deeplink

我有带有自动登录功能的Webview应用程序。 用户名和密码保存在sharedpreference中,并用于登录。如果用户名和密码正确,则可以正常工作。

然后,我想输入错误的密码。 我为错误的密码创建了rediret URL(https://example.org/noauth.html),但如果使用Webview,则深层链接不起作用。这不是公开活动。当我使用浏览器模拟它可以正常工作时,错误的密码会自动打开密码输入表单活动。

清单

<activity
    android:name=".SaveLoginActivity"
    android:label="@string/saveActivity">
    <intent-filter android:label="SaveLogin">
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.BROWSABLE"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="https"
            android:host="example.org"
            android:pathPrefix="/noauth.html"/>
    </intent-filter>
</activity>

主要活动

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

    loadData();

    if(haveNetwork()){

        webView = (WebView)findViewById(R.id.exampleorg);
        webView.setWebViewClient(new WebViewClient() {

            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                //check domain
                if(url.contains("example.org")) {
                    return false;
                }

                Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
                startActivity(intent);
                return true;
            }

        });

        //insert username & password to URI parameters
        Uri.Builder builder = new Uri.Builder();
        builder.scheme("https")
                .authority("example.org")
                .appendPath("login.php")
                .appendQueryParameter("u", user)
                .appendQueryParameter("p", pass);
        String myUrl = builder.build().toString();

        webView.loadUrl(myUrl);

        WebSettings webSettings = webView.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webView.setWebChromeClient(new WebChromeClient());

    } else if(!haveNetwork()){

        Toast.makeText(MainActivity.this, "INTERNET NOT AVAILABLE!", Toast.LENGTH_LONG).show();
        finish();

    }

}

//get username and password from shared preference
public void loadData() {
    SharedPreferences sharedPreferences = getSharedPreferences(SHARED_PREFS, MODE_PRIVATE);
    user = sharedPreferences.getString(USERNAME, "");
    pass = sharedPreferences.getString(PASSWORD, "");
}

0 个答案:

没有答案