gpt4 book ai didi

java - WebView - 使用凭据的正确方法

转载 作者:太空宇宙 更新时间:2023-11-04 13:05:34 25 4
gpt4 key购买 nike

我构建了一个密码管理应用程序。我将用户名和密码存储在数据库中。我想允许我的用户登录他们保存密码的网站 - 所以我使用 WebView 。但是,当我加载应用程序时,网站不会记住我的密码,就像 Chrome 保存您的用户名和密码并自动记住它们一样。它的出现是因为我尝试登录的网站不记得我的凭据。我使用 google 搜索 API 通过 google 搜索找到了正确的网站 - 它是动态找到的,而不是永久的。
我正在寻找一种自动填充密码的方法。怎么解决呢?

我的应用程序的代码是这样的:

package com.example.tehem.webviewapp;

import android.net.http.SslError;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.view.Menu;
import android.view.MenuItem;

import android.webkit.HttpAuthHandler;
import android.webkit.SslErrorHandler;
import android.webkit.WebView;
import android.webkit.WebViewClient;


public class MainActivity extends AppCompatActivity {

public static final String username = "username" (read from database),
password = "password"(read from database),
address = "http://www.ebay.com/"(read from database, found from a search);

WebView webView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = (WebView) findViewById(R.id.webView);


webView.setWebViewClient(new WebViewClient() {
public void onReceivedHttpAuthRequest(WebView view,
HttpAuthHandler handler, String host, String realm) {
webView.setHttpAuthUsernamePassword(host, realm, username, password);
handler.proceed(username, password);

}
public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
handler.proceed() ;
}

});
webView.loadUrl(address);


}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu);
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}

return super.onOptionsItemSelected(item);
}

}

我的 XML 页面是这样写的:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".MainActivity">

<WebView

android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+id/webView"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="181dp" />

</RelativeLayout>

当然,我在 AndroidManifest.XML 中允许互联网授权:

<uses-permission android:name="android.permission.INTERNET"/> 

最佳答案

我不是 webview 小部件及其使用方法方面的专家,但据我所知,您需要保留 cookie

根据documentation我们将使用 cookie 管理器来保存浏览器 cookie。

The CookieSyncManager is used to synchronize the browser cookie store between RAM and permanent storage. To get the best performance, browser cookies are saved in RAM. A separate thread saves the cookies between, driven by a timer.

onCreate()
CookieSyncManager.createInstance(this);

onResume()
CookieSyncManager.getInstance().startSync();

onPause()
CookieSyncManager.getInstance().stopSync();

更新答案

当您的目标 Lollipop 和 CookieSyncManager 已弃用时,根据文档,我们不再需要此方法,我们可以直接使用方法 flush() CookieManager

To manually force a sync you can use the CookieManager method flush() which is a synchronous replacement for sync()

所以结果将是

if (android.os.Build.VERSION.SDK_INT >= 21) {
CookieManager.getInstance().flush();
}else {
// use old methods
}

关于java - WebView - 使用凭据的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34480916/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com