Android开发接入第三方原生SDK实现QQ登录

首先我们梳理一下流程:

1.对我们的应用进行授权,授权成功之后,拿到openid

2.设置openid和token,就可以获取到用户的基本信息

一、准备工作

1.在腾讯开放平台上注册账号,注册应用,然后获取APPID和APPKEY

   (这个过程还是很简单的,只需要填一些基本的应用信息即可获取) 

   腾讯开发平台: http://open.qq.com/

Android开发接入第三方原生SDK实现QQ登录_第1张图片

2. 下载SDK http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD


3. 将SDK中的open_sdk_r5990_lite.jar放在我们工程的libs下( 也可以用下边的链接直接下载 )

   链接下载地址 : https://pan.baidu.com/s/1UqS6ao1Rf9rvZHp-JyKbnQ    

  ( 提取密码 : 0nyh )


4. 在工程的清单文件AndroidManifest.xml的application标签中添加两个activity:


        
            
            
            
            
        


PS:记得一定要替换成自己的APPID,如果你在腾讯开放平台上申请到的appid为123456,则这里的APPID值就为tencent123456;


5. 在工程的清单文件AndroidManifest.xml中添加权限:

  1. <uses-permission android:name="android.permission.INTERNET" />  
  2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
  3. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  


二、进行授权

 1.授权的话需要两个重要的类:  

    //... (1)腾讯提供的一个Tencent类
    private Tencent mTencent;
    //... (2)一个IUiListener 的实现类(LogInListener implements IUiListener)
    private LogInListener mListener;

2. LogInListener是IUiListener的实现类,通过这个类里边的回调方法我们可以获得授权返回的结果

class LogInListener implements IUiListener {
        //... (1)授权成功
        @Override
        public void onComplete(Object o) {
            JSONObject jsonObject = (JSONObject) o;
            // 1. 设置openid和token,进一步获取用户信息
            initOpenidAndToken(jsonObject);
            // 2. 获取QQ用户的各信息
            getUserInfo();
        }
        //... (2)授权失败
        @Override
        public void onError(UiError uiError) {
            ToastUtils.show("授权失败:错误信息:"+uiError.toString());
        }
        //... (3)授权取消
        @Override
        public void onCancel() {
            ToastUtils.show("授权失败");
        }
    }

在这个OnComplete()回调中,给我们返回的JsonObject格式的数据如下:

  1. {  
  2.     "ret"0,  
  3.     "openid""",  
  4.     "access_token""",  
  5.     "pay_token""",  
  6.     "expires_in"7776000,  
  7.     "pf""",  
  8.     "pfkey""",  
  9.     "msg""",  
  10.     "login_cost"442,  
  11.     "query_authority_cost"322,  
  12.     "authority_cost"0  
  13. }  

3. 重写OnActivityResult()方法,确保可以接收到回调

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Tencent.onActivityResultData(requestCode, resultCode, data, mListener);
    }

4. 进行登录:

//首先需要用APP ID 获取到一个Tencent实例
mTencent = Tencent.createInstance(Constant.QQ_APPID, this.getApplicationContext());
//初始化一个IUiListener对象,在IUiListener接口的回调方法中获取到有关授权的某些信息
mListener = new LogInListener();
mTencent.login(this, "all", mListener);


5. 退出登录:

mTencent.logout(MainActivity.this);  

到这里授权的过程已经完毕,接下来我们要获取到QQ给我们返回的用户基本信息:


三、获取用户基本信息

在授权成功之后,就会回调LoginListener中的OnComplete()方法,其中OnComplete()方法会给我们返回一个JsonObject格式的数据,在这个数据里,我们可以获取到openid,然后:

1.设置openid和token

 private void initOpenidAndToken(JSONObject jsonObject) {
        try {
            String openid = jsonObject.getString("openid");//获取OpenId
            String token = jsonObject.getString("access_token");
            String expires = jsonObject.getString("expires_in");
            mTencent.setAccessToken(token, expires);
            mTencent.setOpenId(openid);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

2.获取用户的基本信息

private void getUserInfo() {
        QQToken mQQToken = mTencent.getQQToken();
        UserInfo userInfo = new UserInfo(QQActivity.this, mQQToken);
        userInfo.getUserInfo(new IUiListener() {
                                 @Override
                                 public void onComplete(final Object o) {
                                     try {
                                         JSONObject jsonObject=new JSONObject(o.toString());
                                         String mNickname=jsonObject.getString("nickname");//获取用户QQ名称
                                         String mGender=jsonObject.getString("gender");//获取用户性别
                                         String mUserHeader=jsonObject.getString("figureurl_qq_2");//获取用户头像
                                     } catch (JSONException e) {
                                         e.printStackTrace();
                                     }
                                 }
                                 @Override
                                 public void onError(UiError uiError) {
                                     ToastUtils.show("获取用户QQ信息错误");
                                 }
                                 @Override
                                 public void onCancel() {
                                     ToastUtils.show("取消获取用户QQ信息");
                                 }
                             }
        );
    }

在这个LoginListner中的OnComplete()回调中,返回的JsonObject数据如下(跟上边的回调返回的数据有所不同):

  1. {  
  2.     "ret"0,  
  3.     "msg""",  
  4.     "is_lost"0,  
  5.     "nickname""",  
  6.     "gender""",  
  7.     "province""",  
  8.     "city""",  
  9.     "figureurl""",  
  10.     "figureurl_1""",  
  11.     "figureurl_2""",  
  12.     "figureurl_qq_1""",  
  13.     "figureurl_qq_2""",  
  14.     "is_yellow_vip""0",  
  15.     "vip""0",  
  16.     "yellow_vip_level""0",  
  17.     "level""0",  
  18.     "is_yellow_year_vip""0"  
  19. }  

    大功告成!   QQ:963231481   如有问题,加我QQ ! 

你可能感兴趣的:(Android高级)