android webview 例子,Android WebView 保持登录问题(示例代码)

阅读: 评论:0

android webview 例子,Android WebView 保持登录问题(示例代码)

android webview 例子,Android WebView 保持登录问题(示例代码)

最近有个需求是这样的:在应用中添加一个商城,商城的实现是H5(包括登录)。需要将这个H5嵌到原生应用中,并在原生代码中添加支付功能。

接到这个需求的时候,想这不是很简单么,用WebView加载这个页面,通过Js回调原生方法,然后调用第三方支付,完工。

然而到实际开发的时候,问题就出现了。

首先的问题是:

1.在商城中,点击了一个商品,然后确认购买。

2.此时没有登录,会跳到登录界面。

3.没关系,那就登录一下。

4.登录完后,再次点击这个商品,然后去购买。

5.然后问题就出现了,前面不是登录过了吗?怎么还跳到登录界面了?

分析:

一开始以为是H5写的不对,然而我用浏览器打开的时候,是好的,跳转也正常,所以,还是WebView设置的有问题。

一通百度之后,初步断定是Cookie同步的问题,但是网络这一块一直不太懂,当下也没时间细细研究,所以就照着百度所得之后一步步尝试。下面是我的解决方法。

解决方法:

初始化WebView

private voidinitWebView() {

WebSettings webSettings&#Settings();//设置编码

webSettings.setDefaultTextEncodingName("utf-8");

webSettings.setTextZoom(100);//自适应屏幕

webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);

webSettings.setLoadWithOverviewMode(true);//支持js

webSettings.setJavaScriptEnabled(true);//设置本地调用对象及其接口

jsBridge = newJavaScriptBridge(getActivity(), webview);

webview.addJavascriptInterface(jsBridge,"Native");

CookieManager mCookieManager&#Instance();

mCookieManager.setAcceptCookie(true);

mCookieManager.setAcceptThirdPartyCookies(webview,true);

webview.setWebViewClient(newWebViewClient() {

@Overridepublic voidonPageStarted(WebView view, String url, Bitmap favicon) {PageStarted(view, url, favicon);

}

@Overridepublic voidonPageFinished(WebView view, String url) {// //获取webview里面的cookie信息

CookieManager cookieManager &#Instance();

cookieManager.setAcceptCookie(true);

String cookieStr&#Cookie(url);

saveCookies(cookieStr);

progressBar.setVisibility(View.GONE);

}

@Overridepublic void onReceivedError(WebView view, int errorCode, String description, finalString failingUrl) {

}public booleanshouldOverrideUrlLoading(WebView view, String url) {if (url.startsWith("http") || url.startsWith("https")) {if (url.startsWith("")) { //这个WebView是通用的,只对这个商城的链接做Cookie操作。

syncCookie(getContext(), url);

}

view.loadUrl(url);return false;

}else{//其他的URL则会开启一个Acitity然后去调用原生APP

try{

Intent in= newIntent(Intent.ACTION_VIEW, Uri.parse(url));

in.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_SINGLE_TOP);

startActivity(in);

view.stopLoading();

}catch(Exception e) {

e.printStackTrace();

}return true;

}

}

});

}

View Code

在onPageFinished的时候,保存Cookie

private voidsaveCookies(String cookieString) {

sp.edit().putString("cook", cookieString).apply();

}

View Code

在loadUrl(url)前,同步Cookie

private voidsyncCookie(Context context, String url){try{

CookieManager cookieManager&#Instance();

cookieManager.setAcceptCookie(true);

String oldCookie &#Cookie(url);if(oldCookie != null){

android.util.Log.i("zxy", "getCookie oldCookie " +oldCookie);

}

String cookie= sp.getString("cook", "");

String[] cookies= cookie.split(";");if (!TextUtils.isEmpty(cookie)) {for(String cook : cookies) {

cookieManager.setCookie(url, im());//一定要一个一个set, 如果是拼接的话,设置不成功。

}

}//最后一定要调用

String newCookie &#Cookie(url);if(newCookie != null){

android.util.Log.i("zxy", "getCookie newCookie " +newCookie);

}

}catch(Exception e){

android.util.Log.i("zxy", "getCookie failed" &#String());

}

}

View Code

这样,就可以实现Cookie同步了。

(网路这一块,找个时间要好好补补)

本文发布于:2024-01-31 20:58:30,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170670590831312.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:示例   例子   代码   android   webview
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23