2016年8月29日星期一

腾讯API 登录,获取用户

开始之前在这里吐槽一下. 腾讯文档做的太没诚意了.很多都是老版本的都没更新.
哎~ 还得一个一个找.

1.注册腾讯开发者账号,并登录账号.
  一些简单的就一笔带过.不详细讲解.因为谁都可以做.

这是开发者官方:http://wiki.open.qq.com/wiki/%E9%A6%96%E9%A1%B5
>需要注意的是 注册账号并且账号是审核阶段的时候是无法测试的.会出现 104001错误
>申请应用的时候如果是测试阶段,测试的QQ账号只能是自己在开发者里注册的QQ账号.
   所谓的测试阶段是提交审核之前.但是必须得走到上传APK文件的那一步

2.登录代码

public void tecentLogin(){
    if (mTencent==null){
        mTencent=Tencent.createInstance(getString(R.string.tencent_qq_key), getApplicationContext());    }

    if (mTecentListener!=null){
        if (!mTencent.isSessionValid()){
            mTencent.login(this, QQ_LOGIN_SCOPE, mTecentListener);        }
    }else{
        MakeContent.getInstance().ContextMake(mContext,getString(R.string.tencent_callback_hint));    }
}

IUiListener mTecentListener=new IUiListener() {
    @Override    public void onComplete(Object o) {
        MakeContent.getInstance().ContextLoggerInfo(o.toString());        JSONObject jsonObject= (JSONObject) o;        initOpenidAndToken(jsonObject);        getQQUserInfo();    }

    @Override    public void onError(UiError uiError) {
        MakeContent.getInstance().ContextLoggerInfo(uiError.errorMessage);    }

    @Override    public void onCancel() {

    }
};

下面是非常重要的一个方法. 在这里腾讯Doc里没有说明.所以我找了很久.
那就如果想要获取 QQ用户信息的话 必须对Tencent的进行初始化

public void initOpenidAndToken(JSONObject jsonObject) {
    try {
        String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);        String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);        // TODO: 16. 8. 29. 개발할 때 이 openID로 가져가면 될 거 같다        String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);        if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
                && !TextUtils.isEmpty(openId)) {
            mTencent.setAccessToken(token, expires);            mTencent.setOpenId(openId);        }
    } catch(Exception e) {
    }
}

3.获取用户信息

private void getQQUserInfo() {
    if (mTencent != null && mTencent.isSessionValid()) {
        IUiListener listener = new IUiListener() {

            @Override            public void onError(UiError e) {

            }
            @Override            public void onComplete(final Object response) {

                try{
                    if (response!=null){
                        //QQ정보를 가져온다                        QQInfoData qqInfoData=new Gson().fromJson(response.toString(),QQInfoData.class);                    }
                    MakeContent.getInstance().ContextLoggerInfo("onComplete:"+response);                }catch (Exception e){

                }
            }

            @Override            public void onCancel() {

            }
        };        tencentQQInfo = new UserInfo(this, mTencent.getQQToken());        tencentQQInfo.getUserInfo(listener);
    } else {
    }
}

好了,困扰我半天的代码终于解决了。

没有评论:

发表评论