最近做了一个登录系统,这个登录系统由三个部分组成,第一个是QQ登录,第二个是LeanCloud登录,第三个是SMS 短信验证登录,这篇博客介绍QQ登录。
首先按照官方文档所说的--导入jar包,之后在AndroidManifest中配置相关权限和Activity的声明,可以去官方文档上去找http://open.qq.com/
当环境搭建好之后,就开始去实现QQ登录:
第一步:实例化Tencent类
mTencent = Tencent.createInstance(TencentID, loginActivity.this);
第二步:自定义一个类去实现登录时的监听(注:也可以用匿名内部类的形式),这个监听主要是用来进行登录时回调用的
//登录时的监听
class TecentLoginListener implements IUiListener{
@Override
public void onComplete(Object o) {//登录成功时的回调,这里的o是登录授权成功以后返回的数据
/**
*{
*"ret":0,
*"pay_token":"xxxxxxxxxxxxxxxx",
*"pf":"openmobile_android",
*"expires_in":"7776000",
*"openid":"xxxxxxxxxxxxxxxxxxx",
*"pfkey":"xxxxxxxxxxxxxxxxxxx",
*"msg":"sucess",
*"access_token":"xxxxxxxxxxxxxxxxxxxxx"
*}
*/
Toast.makeText(loginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
JSONObject object= (JSONObject) o;
try {
String openId=object.getString("openid");//需要从返回的数据中取出openid和expires_in还有access_token
String access_token= (String) object.get("access_token");
String expires_in=object.getString("expires_in");
mTencent.setOpenId(openId);//将获取到的数据赋值给Tencent实例才可以继续回去用户的数据,否则只会无法回去用户的数据
mTencent.setAccessToken(access_token,expires_in);
//UserInfo 是用来存储用户数据的,参数为context,Tencent的QQtooken
UserInfo userInfo=new UserInfo(loginActivity.this,mTencent.getQQToken());
userInfo.getUserInfo(new IUiListener() {//在监听中获取用户的数据
/**
*{
*"is_yellow_year_vip": "0",
*"ret": 0,
*"figureurl_qq_1":
*"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40",这是QQ头像,分辨率低
*"figureurl_qq_2":
*"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",QQ头像,分辨率高
*"nickname": "小罗", 昵称
*"yellow_vip_level": "0",
*"msg": "",
*"figureurl_1":
*"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50",
*"vip": "0",
*"level": "0",
*"figureurl_2":
*"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
*"is_yellow_vip": "0",
*"gender": "男",
*"figureurl":
*"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"
*}
*/
@Override
public void onComplete(Object o) {//o就是所登录用户的数据
JSONObject jsonObject= (JSONObject) o;
try {
String name= (String) jsonObject.get("nickname");//获取到的昵称
String figureurl_qq_2= (String) jsonObject.get("figureurl_qq_2");//获取到的qq头像的链接
// 。。。。。。。(进行需要的操作)
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {//登录出现错误时的回调
}
@Override
public void onCancel() {//取消登录时的回调
}
});
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {
}
@Override
public void onCancel() {
}
}
调用该方法进行登录
qqBtn_login.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!mTencent.isSessionValid()){
mTencent.login(loginActivity.this,"all",new TecentLoginListener());
isServerSlidLogin=false;
}
else {
if (isServerSlidLogin){
mTencent.logout(loginActivity.this);
mTencent.login(loginActivity.this,"all",new TecentLoginListener());
isServerSlidLogin=false;
return;
}
}
}
});
第三部,加上官方文档所说的这句代码
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
Tencent.onActivityResultData(requestCode,resultCode,data,new TecentLoginListener());
}
这是实现登录功能的文件
http://download.csdn.net/detail/qq_33073453/9520062