1:进入QQ官网搭建环境
https://wiki.connect.qq.com/qq%E7%99%BB%E5%BD%95
2:点击登录按钮拉取QQ
mTencent = Tencent.createInstance("官网创建项目的id", LoginActivity.this);
case R.id.img_qq://QQ登录
if (!mTencent.isSessionValid()) {
mTencent.login(LoginActivity.this, "all", new TecentLoginListener());
}
break;
3:QQ登录监听
//qq登录时的监听
class TecentLoginListener implements IUiListener {
@Override
public void onComplete(Object o) {
//登录成功时的回调,这里的o是登录授权成功以后返回的数据
Log.v(TAG, "qq登录授权成功");
JSONObject object = (JSONObject) o;
try {
//需要从返回的数据中取出openid和expires_in还有access_token
mOpenId = object.getString("openid");
String access_token = (String) object.get("access_token");
String expires_in = object.getString("expires_in");
mTencent.setOpenId(mOpenId);//将获取到的数据赋值给Tencent实例才可以继续回去用户的数据,否则只会无法回去用户的数据
mTencent.setAccessToken(access_token, expires_in);
getUnionId();
//UserInfo 是用来存储用户数据的,参数为context,Tencent的QQtooken
UserInfo userInfo = new UserInfo(LoginActivity.this, mTencent.getQQToken());
userInfo.getUserInfo(new IUiListener() {
@Override
public void onComplete(Object o) {//o就是所登录用户的数据
JSONObject jsonObject = (JSONObject) o;
try {
mName = (String) jsonObject.get("nickname");
mFigureurl = (String) jsonObject.get("figureurl_qq_2");
//登录成功的用户信息,可以进行一些想要的操作比如将用户数据上传接口等
Log.v(TAG, "-----qqloginseccess---mName==" + mName + "----mFigureurl==" + mFigureurl);
} catch (JSONException e) {
e.printStackTrace();
}
}
@Override
public void onError(UiError uiError) {//登录出现错误时的回调
Log.v(TAG, "");
}
@Override
public void onCancel() {//取消登录时的回调
}
});
} catch (JSONException e) {
e.printStackTrace();
Log.v(TAG, "TecentLoginListener e" + e.getMessage());
}
}
@Override
public void onError(UiError uiError) {
Log.v(TAG, "TecentLoginListener onError" + uiError.errorCode);
}
@Override
public void onCancel() {
Log.v(TAG, "TecentLoginListener onCancel");
}
}
获取UnionId
private void getUnionId() {
if (mTencent != null && mTencent.isSessionValid()) {
IUiListener listener = new IUiListener() {
@Override
public void onError(UiError e) {
Log.v(TAG, "getUnionId onError");
}
@Override
public void onComplete(final Object response) {
Log.v(TAG, "getUnionId onError");
if (response != null) {
JSONObject jsonObject = (JSONObject) response;
try {
mUnionid = jsonObject.getString("unionid");
if (!TextUtils.isEmpty(mUnionid)) {
Log.v(TAG, "--unionid==" + mUnionid);
}
} catch (Exception e) {
Log.v(TAG, "getUnionId no unionid");
}
} else {
Log.v(TAG, "getUnionId no unionid");
}
}
@Override
public void onCancel() {
Log.v(TAG, "getUnionId onCancel");
}
};
UnionInfo unionInfo = new UnionInfo(this, mTencent.getQQToken());
unionInfo.getUnionId(listener);
} else {
Log.v(TAG, "getUnionId please login frist!");
}
}
最后不要忘记加
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == Constants.REQUEST_LOGIN) {
Tencent.onActivityResultData(requestCode, resultCode, data, new TecentLoginListener());
//可能会出现点击授权登录后无法回调情况加入下面这一行,经本人测试有效
Tencent.handleResultData(data, new TecentLoginListener());
}
}
微信登录请查看微信登录