Android_第三方登录——QQ登录

前文完成了第三方新浪微博的登陆,这篇文章介绍QQ作为第三方登录,登陆流程如下图所示(参考QQ官方文档):
这里写图片描述
代码实现如下所示:

package com.ppl.get_loc.chat;

import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.widget.Toast;

import com.ppl.get_loc.MainActivity;
import com.ppl.get_loc.utils.PublicData;
import com.tencent.open.utils.Util;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;

public class QqLogin {
    private static final String Scope = "all";
    private Context mContext;
    private Activity mActivity;



    public QqLogin(Context mContext, Activity mActivity) {
        super();
        this.mContext = mContext;
        this.mActivity = mActivity;
    }
    public void login()
    {
        // Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
        // 其中APP_ID是分配给第三方应用的appid,类型为String。
        PublicData.mTencent = Tencent.createInstance(PublicData.QQ_APP_ID, mContext);
        if (!PublicData.mTencent.isSessionValid())
        {
            PublicData.mTencent.login(mActivity, Scope, loginListener);
        }
    }

    public IUiListener loginListener = new BaseUiListener(){

        @Override
        public void onComplete(Object arg0) {
            // TODO Auto-generated method stub
            super.onComplete(arg0);
            System.out.println("QQ 用户信息: "+arg0.toString());
        }

    };
    /**
     * 调用SDK已经封装好的接口时,例如:登录、快速支付登录、应用分享、应用邀请等接口,需传入该回调的实例。
     * */
    public class BaseUiListener implements IUiListener {

        @Override
        public void onCancel() {
            // TODO Auto-generated method stub
            Toast.makeText(mContext, "取消登陆", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onComplete(Object response) {
            // TODO Auto-generated method stub
            if (null == response) {
                Toast.makeText(mContext, "返回为空,登录失败", Toast.LENGTH_LONG).show();
                return;
            }
            JSONObject jsonResponse = (JSONObject) response;
            if (null != jsonResponse && jsonResponse.length() == 0) {
                Toast.makeText(mContext, "返回为空,登录失败", Toast.LENGTH_LONG).show();
                return;
            }
            Toast.makeText(mContext, "登录成功", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onError(UiError arg0) {
            // TODO Auto-generated method stub
            Toast.makeText(mContext, "登录失败"+arg0, Toast.LENGTH_LONG).show();
        }
    }
}

登录成功后调用public void onComplete(JSONObject arg0) 回传的JsonObject, 其中包含OpenId, AccessToken等重要数据。
{
“ret”:0,
“pay_token”:”xxxxxxxxxxxxxxxx”,
“pf”:”openmobile_android”,
“expires_in”:”7776000”,
“openid”:”xxxxxxxxxxxxxxxxxxx”,
“pfkey”:”xxxxxxxxxxxxxxxxxxx”,
“msg”:”sucess”,
“access_token”:”xxxxxxxxxxxxxxxxxxxxx”
}
完成登陆后并获取到用户的头像等信息,下面介绍如何获取用户头像等信息,参考官方文档

在SDK中,有一些功能接口,如登录,分享消息到QQ等,SDK对其调用单独封装成了独立的接口;但是,SDK中的另外一些接口,如获取用户信息、获取用户相册列表、发送分享(addshare)、发表说说、上传图片、创建相册等,则被统一封装在Tencent类的request或requestAsync方法中,通过传入不同的参数实现不同的接口调用。request和requestAsync这两个接口的功能相同。
获取用户信息有两种方式:同步方式和异步方式
request(String graphPath, Bundle params, String httpMethod) 发送同步调用请求访问腾讯提供的OpenAPI。
requestAsync(String graphPath, Bundle params, String httpMethod, IRequestListener listener, Object state) 发送异步调用请求访问腾讯提供的OpenAPI。

所以在获取用户信息后再获取用户的头像 昵称等信息,代码如下:

private void updateUserInfo() {
        if (PublicData.mTencent != null && PublicData.mTencent.isSessionValid()) {
            IUiListener listener = new IUiListener() {
                @Override
                public void onError(UiError e) {

                }
                @Override
                public void onComplete(final Object response) {
                    new Thread(){
                        @Override
                        public void run() {
                            JSONObject json = (JSONObject)response;
                            UserQQLogin(json);      //根据前文新浪微博账号与自己App绑定方法,对获取的QQ用户信息进行绑定
                        }
                    }.start();
                }
                @Override
                public void onCancel() {
                }
            };
            mInfo = new UserInfo(mContext, PublicData.mTencent.getQQToken());
            mInfo.getUserInfo(listener);
        } 
    }

至此完成了使用QQ账号登陆自己的App并与自己的App进行绑定的方法。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值