在写项目时,用到友盟,与qq登录,
在获取 qq用户信息时, 处理uid没有,其他都获取到了, 通过研究,发现,是友盟自己把信息处理了一边,不是原生的接口获取不到uid,
下面是我的处理办法:
1,登录时
//qq登录 case R.id.qq_login_iv: //tencent.login(this, "all", listener); umShareAPI.doOauthVerify(this, SHARE_MEDIA.QQ,umAuthListener); break;2,在onactivityresult 做处理
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == Constants.REQUEST_LOGIN) { umShareAPI.onActivityResult(requestCode,resultCode,data);//调用友盟的回调,主要是拿到uid tencent.handleLoginData(data, listener);//调用qq的回调, } super.onActivityResult(requestCode, resultCode, data); }
3,友盟的回调
UMShareAPI umShareAPI=UMShareAPI.get(this); private UMAuthListener umAuthListener = new UMAuthListener() { @Override public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) { Toast.makeText(getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show(); LogUtil.e("--------------------"+data.get("uid"));//这里拿到了用户的唯一标识,uid for(String key:data.keySet()){ LogUtil.e("-----------------key= "+ key + " and value= " + data.get(key)); } } @Override public void onError(SHARE_MEDIA platform, int action, Throwable t) { Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show(); } @Override public void onCancel(SHARE_MEDIA platform, int action) { Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show(); } };
4,qq的回调
BaseUiListener listener = new BaseUiListener(); private class BaseUiListener implements IUiListener { @Override public void onComplete(Object object) { LogUtil.e("onsuccess======================================" + object.toString()); try { String token = ((JSONObject) object).getString(Constants.PARAM_ACCESS_TOKEN); String expires = ((JSONObject) object).getString(Constants.PARAM_EXPIRES_IN); String openId = ((JSONObject) object).getString(Constants.PARAM_OPEN_ID); tencent.setAccessToken(token, expires); tencent.setOpenId(openId); QQToken qqToken = tencent.getQQToken(); UserInfo info = new UserInfo(LoginActivity.this, qqToken); info.getUserInfo(new IUiListener() { @Override public void onComplete(Object o) { JSONObject response = (JSONObject) o; try {//这里可以拿到所有的用户信息 String str = response.getString("nickname"); String url = response.getString("figureurl_qq_2"); LogUtil.e("==============================nickname=" + str + "url=" + url); LogUtil.e("=============================="+o.toString()); } catch (Exception e) { LogUtil.e(e.toString()); } } @Override public void onError(UiError uiError) { LogUtil.e("userinfouiError===================================" + uiError.toString()); } @Override public void onCancel() { LogUtil.e("userinfocancel=========================="); } }); } catch (Exception e) { LogUtil.e("我报错了" + e.toString()); } } @Override public void onError(UiError uiError) { LogUtil.e("οnerrοr======================================" + uiError.toString()); } @Override public void onCancel() { LogUtil.e("cancel=================================="); } }