公司的小项目,其中就有微博和QQ的用户登录,在这里记录一下,另外QQ的文档非常恶心,鄙视一个!
(很多傻瓜教程上都有这些东西的注册流程,不过要是这些你都弄不好就别做开发了,微博的基本上看SDK里的文档和示例基本就没问题了)
直接上代码,其实很简单:
另外,ActivityResult也要重写一下:
微博授权登录:
先去微博开放平台申请应用,Android应用的包名和签名填好,然后下载导入SDK。(很多傻瓜教程上都有这些东西的注册流程,不过要是这些你都弄不好就别做开发了,微博的基本上看SDK里的文档和示例基本就没问题了)
直接上代码,其实很简单:
// /////////////////////////////////////////////////////////
//
// 微博登录相关操作
//
// /////////////////////////////////////////////////////////
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);
}
}
}
在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。 收藏的用户(0) X
正在加载信息~
推荐阅读
最新回复 (0)
站点信息
- 文章2315
- 用户1336
- 访客11887713
每日一句
Love is seeing, and it is space.
爱是看见,也是空间。
爱是看见,也是空间。