在使用QQ第三发登录时,登录成功后,去获取用户信息的时候,却出现这个错误:
{"ret":100030,"msg":"this api without user authorization"}
经过查找资料,发现问题出在缺少权限,还缺少一步验证,请看代码。
登录授权:
获取用户信息授权:
public void qqLogin() { tencent = Tencent.createInstance(Cons.QQ_APPID, this.getApplicationContext()); if (!tencent.isSessionValid()){ tencent.login(this, "tt", new IUiListener() { @Override public void onComplete(Object o) { Log.i("zdbb tencent","cnComplete "+o); JSONObject jo = (JSONObject) o; String openID = jo.optString("openid"); String accessToken = jo.optString("access_token"); String expires = jo.optString("expires_in"); tencent.setOpenId(openID); tencent.setAccessToken(accessToken, expires); } @Override public void onError(UiError uiError) { Log.i("zdbb tencent","onError "+uiError.errorDetail); } @Override public void onCancel() { Log.i("zdbb tencent","onCancel "); } }); } } void getQQUserInfo(){ Log.i("zdbb tencent","获取用户信息。。。 "); UserInfo userInfo = new UserInfo(LoginActivity.this,tencent.getQQToken()); userInfo.getUserInfo(new IUiListener() { @Override public void onComplete(Object obj) { try { JSONObject jsonObject = (JSONObject) obj; int ret = jsonObject.getInt("ret"); if(ret==100030){ //缺少权限,需要增量授权 Runnable r = new Runnable() { @Override public void run() { tencent.reAuth(LoginActivity.this, "all", new IUiListener() { @Override public void onComplete(Object o) { } @Override public void onError(UiError uiError) { } @Override public void onCancel() { } }); } }; LoginActivity.this.runOnUiThread(r); }else{ Log.d("zdbb tencent","用户信息 "+jsonObject); } } catch (JSONException e) { e.printStackTrace(); } } @Override public void onError(UiError uiError) { Log.i("zdbb tencent","uiError "+uiError.errorDetail); } @Override public void onCancel() { Log.i("zdbb tencent","onCancel "); } }); }