首页 > 代码库 > Android微博QQ登录授权功能实例
Android微博QQ登录授权功能实例
最近开始做公司的小项目,其中就有微博和QQ的用户登录,在这里记录一下,另外QQ的文档非常恶心,鄙视一个!
微博授权登录:
先去微博开放平台申请应用,Android应用的包名和签名填好,然后下载导入SDK。
(很多傻瓜教程上都有这些东西的注册流程,不过要是这些你都弄不好就别做开发了,微博的基本上看SDK里的文档和示例基本就没问题了)
直接上代码,其实很简单:
// ///////////////////////////////////////////////////////// // // 微博登录相关操作 zhangyue 20141201 // // ///////////////////////////////////////////////////////// private WeiboAuth weiboAuth; private Oauth2AccessToken weiboAccessToken; private SsoHandler ssoHandler; private UsersAPI usersAPI; /** * 登录按钮事件,进入授权登录流程 * * @param view */ public void onWeiboLogin(View view) { weiboAuth = new WeiboAuth(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE); // sso安全登录 ssoHandler = new SsoHandler(this, weiboAuth); ssoHandler.authorize(new AuthListener()); } /** * 授权登录监听 * * @author zhang.yue * @date 2014年12月1日 */ class AuthListener implements WeiboAuthListener { @Override public void onCancel() { } @Override public void onComplete(Bundle arg0) { // 获取到uid,token等信息 weiboAccessToken = Oauth2AccessToken.parseAccessToken(arg0); if (weiboAccessToken.isSessionValid()) { // 登录成功,获取用户信息 usersAPI = new UsersAPI(weiboAccessToken); long uid = Long.parseLong(weiboAccessToken.getUid()); usersAPI.show(uid, requestListener); } else { // 登录失败 System.out.println(arg0.get("code")); } } @Override public void onWeiboException(WeiboException arg0) { } } /** * 监听获取用户信息 */ RequestListener requestListener = new RequestListener() { @Override public void onWeiboException(WeiboException arg0) { } @Override public void onComplete(String arg0) { // 得到用户信息json System.out.println(arg0); } };
QQ授权登录:
同样的去QQ互联平台申请应用填资料,不过QQ的文档很恶心,先看代码,一会再说:
// ///////////////////////////////////////////////////////// // // QQ登录相关操作 zhangyue 20141201 // // ///////////////////////////////////////////////////////// private Tencent tencent; /** * 登录按钮事件,进入授权登录流程 * * @param view */ public void onQQLogin(View view) { tencent = Tencent.createInstance(Constants.QQ_APP_KEY, getApplicationContext()); tencent.login(this, Constants.QQ_SCOPE, new BaseUiListener("login")); } /** * Ui类封装接口监听 * @author zhang.yue * @date 2014年12月1日 */ class BaseUiListener implements IUiListener { private String scope; public BaseUiListener(String scope) { this.scope = scope; } @Override public void onCancel() { } @Override public void one rror(UiError arg0) { System.err.println(arg0.errorCode); } @Override public void onComplete(Object arg0) { if (this.scope == "login") { //授权登录成功,获取到uid,token System.out.println(arg0); //获取用户信息 UserInfo userinfo = new UserInfo(LoginMainActivity.this, tencent.getQQToken()); userinfo.getUserInfo(new BaseUiListener("get_user_info")); } else if (this.scope.equals("get_user_info")) { //获得用户信息json格式 System.out.println(arg0); } } } /** * 非封装类接口监听 tencent.request(同步) tencent.requestAsync(异步) * @author zhang.yue * @date 2014年12月1日 */ // class BaseApiListener implements IRequestListener { // // @Override // public void onComplete(JSONObject arg0) { // System.out.println(arg0); // } // // @Override // public void onConnectTimeoutException(ConnectTimeoutException arg0) { // } // // @Override // public void onHttpStatusException(HttpStatusException arg0) { // } // // @Override // public void onIOException(IOException arg0) { // } // // @Override // public void onJSONException(JSONException arg0) { // } // // @Override // public void onMalformedURLException(MalformedURLException arg0) { // } // // @Override // public void onNetworkUnavailableException(NetworkUnavailableException arg0) { // } // // @Override // public void onSocketTimeoutException(SocketTimeoutException arg0) { // } // // @Override // public void onUnknowException(Exception arg0) { // } // // }在QQ的文档中,获取用户信息是这样写的:
/** * 获取用户信息 */ private void onClickUserInfo() { mTencent.requestAsync(Constants.GRAPH_USER_INFO, null, Constants.HTTP_GET, new BaseApiListener("get_user_info", false), null); }
结果Constants.GRAPH_USER_INFO这个根本没有,其实新的已经换成UserInfo类那种方式获取了。还是得把示例导入进来看看才知道。
另外,ActivityResult也要重写一下:
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (ssoHandler != null) { ssoHandler.authorizeCallBack(requestCode, resultCode, data); } if (tencent != null) { tencent.onActivityResult(requestCode, resultCode, data); } }这样授权和用户信息就都拿到了,SDK版本微博是2.5,QQ是2.2。
------------------------------------------------
我的独立博客:壊小子 - http://www.zyblog.net/
本文链接:http://www.zyblog.net/post-177.html
健身潮-IT人健身指南:http://www.jianshenchao.com
欢迎转载,转载请注明本文来源。
Android微博QQ登录授权功能实例
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。