码迷,mamicode.com
首页 > 移动开发 > 详细

Android微博QQ登录授权功能实例

时间:2014-12-01 17:45:50      阅读:373      评论:0      收藏:0      [点我收藏+]

标签:android   style   blog   http   io   ar   color   os   sp   

最近开始做公司的小项目,其中就有微博和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 onError(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登录授权功能实例

标签:android   style   blog   http   io   ar   color   os   sp   

原文地址:http://blog.csdn.net/zhangyue0503/article/details/41648565

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!