Android实现登录系统(一)--QQ登录

Android实现登录系统(一)--QQ登录_第1张图片
 

最近做了一个登录系统,这个登录系统由三个部分组成,第一个是QQ登录,第二个是LeanCloud登录,第三个是SMS 短信验证登录,这篇博客介绍QQ登录。
   首先按照官方文档所说的--导入jar包,之后在AndroidManifest中配置相关权限和Activity的声明,可以去官方文档上去找http://open.qq.com/
   当环境搭建好之后,就开始去实现QQ登录:
   第一步:实例化Tencent类
   

mTencent = Tencent.createInstance(TencentID, loginActivity.this);

   第二步:自定义一个类去实现登录时的监听(注:也可以用匿名内部类的形式),这个监听主要是用来进行登录时回调用的
    

 //登录时的监听
    class TecentLoginListener implements IUiListener{


        @Override
        public void onComplete(Object o) {//登录成功时的回调,这里的o是登录授权成功以后返回的数据
/**
*{                                        
*"ret":0,
*"pay_token":"xxxxxxxxxxxxxxxx",
*"pf":"openmobile_android",
*"expires_in":"7776000",
*"openid":"xxxxxxxxxxxxxxxxxxx",
*"pfkey":"xxxxxxxxxxxxxxxxxxx",
*"msg":"sucess",
*"access_token":"xxxxxxxxxxxxxxxxxxxxx"
*}
*/                                      
            Toast.makeText(loginActivity.this, "登录成功", Toast.LENGTH_SHORT).show();
            JSONObject object= (JSONObject) o;
            try {
                String openId=object.getString("openid");//需要从返回的数据中取出openid和expires_in还有access_token
                String access_token= (String) object.get("access_token");
                String expires_in=object.getString("expires_in");
                mTencent.setOpenId(openId);//将获取到的数据赋值给Tencent实例才可以继续回去用户的数据,否则只会无法回去用户的数据
                mTencent.setAccessToken(access_token,expires_in);
                                            //UserInfo 是用来存储用户数据的,参数为context,Tencent的QQtooken
                UserInfo userInfo=new UserInfo(loginActivity.this,mTencent.getQQToken());
                userInfo.getUserInfo(new IUiListener() {//在监听中获取用户的数据
/**
*{
*"is_yellow_year_vip": "0",
*"ret": 0,
*"figureurl_qq_1":
*"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/40",这是QQ头像,分辨率低
*"figureurl_qq_2":
*"http://q.qlogo.cn/qqapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",QQ头像,分辨率高
*"nickname": "小罗",                                                   昵称
*"yellow_vip_level": "0",
*"msg": "",
*"figureurl_1":
*"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/50",
*"vip": "0",
*"level": "0",
*"figureurl_2":
*"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/100",
*"is_yellow_vip": "0",
*"gender": "男",
*"figureurl":
*"http://qzapp.qlogo.cn/qzapp/222222/8C75BBE3DC6B0E9A64BD31449A3C8CB0/30"
*}
*/
                    @Override
                    public void onComplete(Object o) {//o就是所登录用户的数据
                        JSONObject jsonObject= (JSONObject) o;
                        try {
                            String name= (String) jsonObject.get("nickname");//获取到的昵称
                            String figureurl_qq_2= (String) jsonObject.get("figureurl_qq_2");//获取到的qq头像的链接
                           // 。。。。。。。(进行需要的操作)

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }


                    }

                    @Override
                    public void onError(UiError uiError) {//登录出现错误时的回调

                    }

                    @Override
                    public void onCancel() {//取消登录时的回调

                    }
                });
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }

        @Override
        public void onError(UiError uiError) {

        }

        @Override
        public void onCancel() {

        }
    }

      
   调用该方法进行登录
   

 qqBtn_login.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!mTencent.isSessionValid()){
                    mTencent.login(loginActivity.this,"all",new TecentLoginListener());
                    isServerSlidLogin=false;
                }
                else {
                    if (isServerSlidLogin){
                        mTencent.logout(loginActivity.this);
                        mTencent.login(loginActivity.this,"all",new TecentLoginListener());
                        isServerSlidLogin=false;
                        return;
                    }
                }

            }
        });

     第三部,加上官方文档所说的这句代码
     


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Tencent.onActivityResultData(requestCode,resultCode,data,new TecentLoginListener());
    }
  这是实现登录功能的文件
  http://download.csdn.net/detail/qq_33073453/9520062

你可能感兴趣的:(Android开发)