Android实现授权访问网页的方法
程序员文章站
2022-05-27 10:24:21
本文实例讲述了android授权访问网页的实现方法,即使用webview显示oauth version 2.a implicitgrant方式授权的页,但是对于移动终端不建...
本文实例讲述了android授权访问网页的实现方法,即使用webview显示oauth version 2.a implicitgrant方式授权的页,但是对于移动终端不建议使用authorize code grant方式授权。
具体功能代码如下所示:
import android.annotation.suppresslint; import android.app.activity; import android.content.intent; import android.graphics.bitmap; import android.net.http.sslerror; import android.os.bundle; import android.util.log; import android.webkit.sslerrorhandler; import android.webkit.websettings; import android.webkit.webview; import android.webkit.webviewclient; import com.tencent.weibo.oauthv2.oauthv2; import com.tencent.weibo.oauthv2.oauthv2client; /** * 使用webview显示oauth version 2.a implicitgrant方式授权的页 * (移动终端不建议使用authorize code grant方式授权 * 本类使用方法 * 调用本类的地方请添加如下代码 * //请将oauthv2activity改为类的类名 * intent intent = new intent(oauthv2activity.this, oauthv2authorizewebview.class); * intent.putextra("oauth", oauth); //oauth为oauthv2类的实例,存放授权相关信?? * startactivityforresult(intent, myrrequestcode); //请设置合适的requsetcode * 重写接收回调信息的方 * if (requestcode==myrrequestcode) { //对应之前设置的的myrequsetcode * if (resultcode==oauthv2authorizewebview.result_code) { * //取得返回的oauthv2类实例oauth * oauth=(oauthv2) data.getextras().getserializable("oauth"); * } * } * @see android.app.activity#onactivityresult(int requestcode, int resultcode, intent data) */ public class mywebview extends activity { public final static int result_code = 2; private oauthv2 oauth; private final string tag = "mywebview"; private webview mwebview; @suppresslint("newapi") @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.webview_qq); mwebview = (webview) findviewbyid(r.id.qq_mywebview);; mwebview.setverticalscrollbarenabled(false); mwebview.sethorizontalscrollbarenabled(false); intent intent = this.getintent(); oauth = (oauthv2) intent.getextras().getserializable("oauth"); string urlstr = oauthv2client.generateimplicitgranturl(oauth); websettings websettings = mwebview.getsettings(); websettings.setjavascriptenabled(true); websettings.setsupportzoom(true); mwebview.requestfocus(); mwebview.loadurl(urlstr); system.out.println(urlstr.tostring()); log.i(tag, "webview starting...."); webviewclient client = new webviewclient() { /* 回调方法,当页面加载时执行*/ @override public void onpagestarted(webview view, string url, bitmap favicon) { log.i(tag, "webview onpagestarted..."); log.i(tag, "url = " + url); if (url.indexof("access_token=") != -1) { int start=url.indexof("access_token="); string responsedata=url.substring(start); oauthv2client.parseaccesstokenandopenid(responsedata, oauth); intent intent = new intent(); intent.putextra("oauth", oauth); setresult(result_code, intent); finish(); } super.onpagestarted(view, url, favicon); log.i(tag, "999999999"); } /* todo android2.2及以上版本才能使用该方法,目前https://open.t.qq.com中存在http资源会引起sslerror,待网站修正后可去掉该方*/ public void onreceivedsslerror(webview view, sslerrorhandler handler, sslerror error) { if ((null != view.geturl()) && (view.geturl().startswith("https://open.t.qq.com"))) { handler.proceed();// 接受证书 } else { handler.cancel(); // 默认的处理方式,webview变成空白 } // handlemessage(message msg); 其他处理 } }; mwebview.setwebviewclient(client); } }
上一篇: linux-sed命令
下一篇: Android实现长图文截图功能实例代码