我有带有自动登录功能的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, "");
}