新浪微博快捷登录,由于官方没有提供插件,只能用新浪的自定义API接口来实现,且需要2个页面。
sina_content.html 用来获取返回 新微博接口的code参数
<!DOCTYPE html> <html class="um landscape min-width-240px min-width-320px min-width-480px min-width-768px min-width-1024px"> <head> <title></title> <meta charset="utf-8"> <meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> <link rel="stylesheet" href="css/fonts/font-awesome.min.css"> <link rel="stylesheet" href="css/ui-box.css"> <link rel="stylesheet" href="css/ui-base.css"> <link rel="stylesheet" href="css/ui-color.css"> <link rel="stylesheet" href="css/appcan.icon.css"> <link rel="stylesheet" href="css/appcan.control.css"> <link rel="stylesheet" href="sina_content/css/main.css"> </head> <body class="um-vp bc-bg" ontouchstart> 正在加载新浪微博... <script src="js/appcan.js"></script> <script src="js/appcan.control.js"></script> </body> <script> appcan.ready(function() { appcan.initBounce(); var url = "https://api.weibo.com/oauth2/authorize?client_id=1111111&redirect_uri=返回地址&display=mobile&response_type=code"; location.href = url; }) </script> </html>
sina.html 授权成功后,处理逻辑的页面
<!DOCTYPE html> <html class="um landscape min-width-240px min-width-320px min-width-480px min-width-768px min-width-1024px"> <head> <title></title> <meta charset="utf-8"> <meta name="viewport" content="target-densitydpi=device-dpi, width=device-width, initial-scale=1, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0"> <link rel="stylesheet" href="css/fonts/font-awesome.min.css"> <link rel="stylesheet" href="css/ui-box.css"> <link rel="stylesheet" href="css/ui-base.css"> <link rel="stylesheet" href="css/ui-color.css"> <link rel="stylesheet" href="css/appcan.icon.css"> <link rel="stylesheet" href="css/appcan.control.css"> </head> <body class="um-vp " ontouchstart> <div id="page_0" class="up ub ub-ver bc-bg" tabindex="0"> <!--content开始--> <div id="content" class="ub-f1 tx-l"> </div> <!--content结束--> </div> <script src="js/appcan.js"></script> <script src="js/appcan.control.js"></script> </body> <script> function onOAuth(winNam, url) { if (winNam == "LoginWin") { if (url.indexOf("error_code") > 0) { uexWindow.evaluateScript("LoginWin", "0", "uexWindow.close('-1')"); uexWindow.close("- 1"); return; } var paras = urlParse(url); //获取CODE if (isDefine(paras['code'])) { var url = "https://api.weibo.com/oauth2/access_token"; var httpID = 1; uexXmlHttpMgr.open(httpID, "post", url, ""); uexXmlHttpMgr.setPostData(httpID, "0", "client_id", "官方申请的App Key"); uexXmlHttpMgr.setPostData(httpID, "0", "client_secret", "官方申请的App Secret"); uexXmlHttpMgr.setPostData(httpID, "0", "grant_type", "authorization_code"); uexXmlHttpMgr.setPostData(httpID, "0", "code", paras['code']); //注:返回地址必须放一个有效的服务器地址,不是放在APPCAN里面,而是外部服务器页面地址,不需要返回内容 uexXmlHttpMgr.setPostData(httpID, "0", "redirect_uri", "返回地址"); uexXmlHttpMgr.onData = function(opid, status, result, requestCode) { uexXmlHttpMgr.close(httpID); var json = eval('(' + result + ')'); var access_token = json["access_token"]; var uid = json["uid"]; getSinaUserInfo(access_token, uid); } uexXmlHttpMgr.send(httpID); } } } function getSinaUserInfo(access_token, uid) { var url = "https://api.weibo.com/2/users/show.json?access_token=" + access_token + "&uid=" + uid; var httpID = 2; uexXmlHttpMgr.open(httpID, "get", url, ""); uexXmlHttpMgr.onData = function(opid, status, result, requestCode) { uexXmlHttpMgr.close(httpID); var data = eval("(" + result + ")"); //数据处理 var name= data.name;//OK,返回昵称 appcan.window.close(-1); } uexXmlHttpMgr.send(httpID); } function urlParse(url) { var obj = {}; var keyvalue = []; var key = "", value = ""; var paraString = url.substring(url.indexOf("?") + 1, url.length).split("&"); for (var i in paraString) { keyvalue = paraString[i].split("="); key = keyvalue[0]; value = keyvalue[1]; obj[key] = value; } return obj; } function isDefine(obj) { if (obj == null || obj == 'undefined') { return false; } else { return true; } } appcan.ready(function() { var s = $('#content').offset(); uexWindow.onOAuthInfo = onOAuth; uexWindow.openPopover("LoginWin", 0, "sina_content.html", "", 0, 0, s.width, s.height, s.fontSize, "1"); }); </script> </html>
注意,必须先打开sina.html页面,执行如下代码进行跳转
appcan.ready(function() { var s = $('#content').offset(); uexWindow.onOAuthInfo = onOAuth; uexWindow.openPopover("LoginWin", 0, "sina_content.html", "", 0, 0, s.width, s.height, s.fontSize, "1"); });