友盟和QQ登录

在写项目时,用到友盟,与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==================================");
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值