You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android壳应用如何捕获网页登录凭证并通过SharedPreferences实现自动登录?

Android壳应用实现Web自动登录方案

完全可以用SharedPreferences实现这个需求,它是Android官方推荐的轻量键值对存储方案,非常适合保存登录凭证这类小数据。核心是通过WebView的JS交互能力捕获网页输入框内容,具体实现步骤如下:

1. 配置WebView支持JS交互

先开启WebView的JavaScript支持,同时添加JS桥接接口,用于接收网页传递的登录凭证:

// 初始化WebView基础设置
webView.getSettings().setJavaScriptEnabled(true);
// 添加JS交互接口,命名为AndroidBridge
webView.addJavascriptInterface(new LoginBridge(), "AndroidBridge");

2. 实现JS接口接收并保存凭证

创建内部类作为JS与Android的交互桥梁,在方法内调用SharedPreferences存储用户名和密码:

class LoginBridge {
    @JavascriptInterface
    public void saveCredentials(String username, String password) {
        // 用私有模式创建SharedPreferences实例,文件名LoginPrefs
        SharedPreferences prefs = getSharedPreferences("LoginPrefs", MODE_PRIVATE);
        prefs.edit()
            .putString("username", username)
            .putString("password", password)
            .apply();
    }
}

3. 注入JS捕获网页输入框内容

在WebView加载完登录页面后,注入JS代码监听登录按钮点击事件,获取输入框的值并传给Android端:

webView.setWebViewClient(new WebViewClient() {
    @Override
    public void onPageFinished(WebView view, String url) {
        super.onPageFinished(view, url);
        // 假设网页用户名输入框id为"user-input",密码框id为"pwd-input",登录按钮id为"login-btn"
        String injectJs = "document.getElementById('login-btn').addEventListener('click', function() {" +
                          "var user = document.getElementById('user-input').value;" +
                          "var pwd = document.getElementById('pwd-input').value;" +
                          "AndroidBridge.saveCredentials(user, pwd);" +
                          "});";
        // 执行注入的JS代码
        webView.evaluateJavascript(injectJs, null);
    }
});

如果网页输入框没有固定id,也可以通过元素属性定位:

// 定位页面首个文本输入框和密码输入框
var user = document.querySelector('input[type="text"]').value;
var pwd = document.querySelector('input[type="password"]').value;

4. 重启应用时自动完成登录

在应用启动或回到前台时,读取SharedPreferences中的凭证,注入JS自动填充并提交登录:

@Override
protected void onResume() {
    super.onResume();
    SharedPreferences prefs = getSharedPreferences("LoginPrefs", MODE_PRIVATE);
    String savedUser = prefs.getString("username", null);
    String savedPwd = prefs.getString("password", null);
    
    if (savedUser != null && savedPwd != null) {
        // 自动填充并触发登录的JS代码
        String autoLoginJs = "document.getElementById('user-input').value = '" + savedUser + "';" +
                             "document.getElementById('pwd-input').value = '" + savedPwd + "';" +
                             "document.getElementById('login-btn').click();";
        webView.evaluateJavascript(autoLoginJs, null);
    }
}

关键注意事项

  • 安全优化:密码不要明文存储,建议用AES等加密算法加密后再存入SharedPreferences
  • 风险规避:JS接口只保留必要的凭证传输方法,避免暴露敏感的Android系统能力
  • 兼容性:如果后续Web应用登录页结构修改,需要同步调整JS代码中的元素定位逻辑

内容的提问来源于stack exchange,提问作者Robert Dimaggio

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 21:20:44