一、前言
如果项目是进行了三端的开发,而且移动端使用了webview进行混合开发的话,在此时,我们登陆信息就需要拼接到url后面了。如果只是进行一次拼接,那这个很方便,直接在加载url的时候就把登陆信息(token 以下都写token)拼接到url里面进行load。但是如果想达到在进入网页的每一个页面都进行token的拼接呢?请继续看下去。
二、token拼接
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (request.getUrl().toString().contains("http")){
view.loadUrl(InjectParamsUtil.injectIsParams(request.getUrl().toString()));
}
return false;
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (url.contains("http")){
view.loadUrl(InjectParamsUtil.injectIsParams(url));
}
return false;
}
在前面我们讲解了webview的加载顺序,在第一次加载网页的时候,我们是直接拼参数进去加载的,并不会调用shouldOverrideUrlLoading()方法,但是用户在网页中进行了点击操作的时候,这个时候会先调用此方法,我们可以在此进行url的拼接。效果如下图所示。
在 shouldOverrideUrlLoading()方法中进行了参数拼接之后,重新load了拼接参数的url,更新到历史记录的就是拼接参数后的url,也就达到了用户每点击一个挑战连接url就会拼接token。
既然,需要每一个url都要进行token的拼接了,那么也就需要做登陆验证了,因为token就是你登陆的一个信息凭证。具体怎么进行登陆验证请查看下一篇博文webView系列(九)----登录验证
三、InjectParamsUtil类
public class InjectParamsUtil {
/**
* 注入参数
*
* @param url
* @return
*/
public static String injectIsParams(String url) {
if (url != null && !url.contains("access_token=")) {
if (url.contains("?")) {
return url + "&access_token=" + SPUtils.get(App.getInstance().getApplicationContext(), Constants.ACCESS_TOKEN, "");
} else {
return url + "?access_token=" + SPUtils.get(App.getInstance().getApplicationContext(), Constants.ACCESS_TOKEN, "");
}
} else {
String newUrl = "";
String newToken = "";
String oldToken = url.substring(url.indexOf("access_token=") + 13);
newToken = (String) SPUtils.get(App.getInstance().getApplicationContext(), Constants.ACCESS_TOKEN, "");
if (!TextUtils.isEmpty(oldToken)) {
newUrl = url.replace(oldToken, newToken);
} else {
newUrl = url;
}
return newUrl;
}
}
public static String verrificationToken(String url) {
if (url != null && !url.contains("access_token=")) {
if (url.contains("?")) {
return url + "&access_token=" + SPUtils.get(App.getInstance().getApplicationContext(), Constants.ACCESS_TOKEN, "");
} else {
return url + "?access_token=" + SPUtils.get(App.getInstance().getApplicationContext(), Constants.ACCESS_TOKEN, "");
}
}
return url;
}
}