由于Cordova版本的云助理是一款原生与Web结合的Hybrid App,用户账号、密码等数据存储在WebView的LocalStorage中。
为了在原生版本覆盖Cordova版本时保留原用户信息,避免需要用户重新输入,实现自动登录,需要设法获取LocalStorage中的数据。
引入Cordova相关文件,创建CordovaWebView(但界面上不可见),添加JavascriptInterface用于给js提供接口onGetLocalData(String)
CordovaWebView cordovaWebView = new CordovaWebView(this);
cordovaWebView.addJavascriptInterface(this, "cordovaWebView");
@JavascriptInterface
public void onGetLocalData(String account) {
//解析用户数据,登录
}
加载getLocalData.html用于使用LocalStorage
cordovaWebView.loadUrl("file:///android_asset/www/getLocalData.html");
获取用户信息
页面加载时,使用window.localStorage.getItem()
方法获取所需数据,最后调用WebView暴露的原生onGetLocalData(String)
方法将获取到的数据返回给原生代码。
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<script>
var _LAST_USER_ = '_LAST_USER_';
var getUserInfo = function () {
var username = window.localStorage.getItem(_LAST_USER_);
if (username != null) {
username = username.substring(1, username.length - 1);
}
var _PASSWORD_ = '_PASSWORD_' + username + '_';
var password = window.localStorage.getItem(_PASSWORD_);
if (password != null) {
password = password.substring(1, password.length - 1);
}
var _ACCOUNT_ = '_ACCOUNT_' + username + '_';
var account = window.localStorage.getItem(_ACCOUNT_);
var localData = {};
if (account != null) {
account = JSON.parse(account);
localData.uid = account.uid;
localData.username = account.username;
localData.password = password;
localData.enableAutoLogin = account.enableAutoLogin;
localData.loginId = account.loginId;
localData.setting = account.setting;
}
window.cordovaWebView.onGetLocalData(JSON.stringify(localData));
}
</script>
</head>
<body onload="getUserInfo()">
</body>
</html>