首先我们梳理一下流程:
1.对我们的应用进行授权,授权成功之后,拿到openid
2.设置openid和token,就可以获取到用户的基本信息
1.在腾讯开放平台上注册账号,注册应用,然后获取APPID和APPKEY
(这个过程还是很简单的,只需要填一些基本的应用信息即可获取)
腾讯开发平台: http://open.qq.com/
2. 下载SDK (http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD)
3. 将SDK中的open_sdk_r5990_lite.jar放在我们工程的libs下( 也可以用下边的链接直接下载 )
链接下载地址 : https://pan.baidu.com/s/1UqS6ao1Rf9rvZHp-JyKbnQ
( 提取密码 : 0nyh )
4. 在工程的清单文件AndroidManifest.xml的application标签中添加两个activity:
PS:记得一定要替换成自己的APPID,如果你在腾讯开放平台上申请到的appid为123456,则这里的APPID值就为tencent123456;
5. 在工程的清单文件AndroidManifest.xml中添加权限:
1.授权的话需要两个重要的类:
//... (1)腾讯提供的一个Tencent类
private Tencent mTencent;
//... (2)一个IUiListener 的实现类(LogInListener implements IUiListener)
private LogInListener mListener;
2. LogInListener是IUiListener的实现类,通过这个类里边的回调方法我们可以获得授权返回的结果
class LogInListener implements IUiListener {
//... (1)授权成功
@Override
public void onComplete(Object o) {
JSONObject jsonObject = (JSONObject) o;
// 1. 设置openid和token,进一步获取用户信息
initOpenidAndToken(jsonObject);
// 2. 获取QQ用户的各信息
getUserInfo();
}
//... (2)授权失败
@Override
public void onError(UiError uiError) {
ToastUtils.show("授权失败:错误信息:"+uiError.toString());
}
//... (3)授权取消
@Override
public void onCancel() {
ToastUtils.show("授权失败");
}
}
在这个OnComplete()回调中,给我们返回的JsonObject格式的数据如下:
3. 重写OnActivityResult()方法,确保可以接收到回调
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Tencent.onActivityResultData(requestCode, resultCode, data, mListener);
}
4. 进行登录:
//首先需要用APP ID 获取到一个Tencent实例
mTencent = Tencent.createInstance(Constant.QQ_APPID, this.getApplicationContext());
//初始化一个IUiListener对象,在IUiListener接口的回调方法中获取到有关授权的某些信息
mListener = new LogInListener();
mTencent.login(this, "all", mListener);
5. 退出登录:
mTencent.logout(MainActivity.this);
到这里授权的过程已经完毕,接下来我们要获取到QQ给我们返回的用户基本信息:
三、获取用户基本信息
在授权成功之后,就会回调LoginListener中的OnComplete()方法,其中OnComplete()方法会给我们返回一个JsonObject格式的数据,在这个数据里,我们可以获取到openid,然后:
1.设置openid和token
private void initOpenidAndToken(JSONObject jsonObject) {
try {
String openid = jsonObject.getString("openid");//获取OpenId
String token = jsonObject.getString("access_token");
String expires = jsonObject.getString("expires_in");
mTencent.setAccessToken(token, expires);
mTencent.setOpenId(openid);
} catch (JSONException e) {
e.printStackTrace();
}
}
2.获取用户的基本信息
private void getUserInfo() {
QQToken mQQToken = mTencent.getQQToken();
UserInfo userInfo = new UserInfo(QQActivity.this, mQQToken);
userInfo.getUserInfo(new IUiListener() {
@Override
public void onComplete(final Object o) {
try {
JSONObject jsonObject=new JSONObject(o.toString());
String mNickname=jsonObject.getString("nickname");//获取用户QQ名称
String mGender=jsonObject.getString("gender");//获取用户性别
String mUserHeader=jsonObject.getString("figureurl_qq_2");//获取用户头像
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {
ToastUtils.show("获取用户QQ信息错误");
}
@Override
public void onCancel() {
ToastUtils.show("取消获取用户QQ信息");
}
}
);
}
在这个LoginListner中的OnComplete()回调中,返回的JsonObject数据如下(跟上边的回调返回的数据有所不同):
大功告成! QQ:963231481 如有问题,加我QQ !