第三方APP实现QQ登陆

现在很多App都会实现第三方登陆,大部分是QQ和微信
这里先扯一下QQ(微信还在审核,蛋疼),看了一下网上的都是把企鹅的开发文档那里给粘贴复制了一下
说实话,看着文档满满的吐槽

public void getUserInfo()
{
mTencent.requestAsync(Constants.GRAPH_SIMPLE_USER_INFO, null,
Constants.HTTP_GET, new BaseApiListener("get_simple_userinfo", false),
null);
}

有一个GRAPH_SIMPLE_USER_INFO的参数,但是我使用api的时候,就是没有这玩意,看了Constants类也没有。好吧,我认命了。
然后继续查找,有一个LOGIN_USER但是不知道传撒就忽略了。
这时发现一个获取用户数据的

UserInfo info = new UserInfo(this, MainActivity.mQQAuth.getQQToken());
  info.getUserInfo(new BaseUIListener(this,"get_simple_userinfo"));

诶,有意思,并且Tencent包里有一个UserInfo的类。
这里有一个token的参数,哪来?
没错登录的时候,成功回传的json数据

{
“ret”: 0,
“openid”: “xxxxxxxxxxxxxxxxxxxxxx”,
“access_token”: “xxxxxxxxxxxxxxxxxxxxxxx”,
“pay_token”: “xxxxxxxxxxxxxxxxxxxxx”,
“expires_in”: 7776000, //这里是超时时间
“pf”: “xxxxxxxxxxxxxxxxxx”,
“pfkey”: “xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx”,
“msg”: “”,
………………
}

现在我们创建一个实体类用来保存我们的实体类,QQ.java

public class QQ {
    private String openid;
    private String access_token;
    private String pay_token;
    private String expires_in;



    public QQ() {
    }

    public String getOpenid() {
        return openid;
    }

    public void setOpenid(String openid) {
        this.openid = openid;
    }

    public String getAccess_token() {
        return access_token;
    }

    public void setAccess_token(String access_token) {
        this.access_token = access_token;
    }

    public String getPay_token() {
        return pay_token;
    }

    public void setPay_token(String pay_token) {
        this.pay_token = pay_token;
    }

    public String getExpires_in() {
        return expires_in;
    }

    public void setExpires_in(String expires_in) {
        this.expires_in = expires_in;
    }
}

接着解析json数据存入实体类

 @Override
    public void qq(final Activity activity) {
        final Tencent mTencent = Tencent.createInstance("your id",App.getContext());
        if (!mTencent.isSessionValid())
        {
            mTencent.login(activity, "", new IUiListener() {
                @Override
                public void onComplete(Object o) {
                //建议在这里保存请求到的数据特别是token,openid
                    Gson gson = new Gson();
                    QQ qq = gson.fromJson(o.toString(),QQ.class);
                    QQToken token = new QQToken("your id");
                    token.setAccessToken(qq.getAccess_token(),qq.getExpires_in());
                    token.setOpenId(qq.getOpenid());
                    com.tencent.connect.UserInfo info = new com.tencent.connect.UserInfo(activity,token);
                    info.getUserInfo(new IUiListener() {
                        @Override
                        public void onComplete(Object o) {
                        //在这里写上你的逻辑,存储用户信息之类的
                            Log.d("LoginModel", "onComplete:" +o.toString());
                        }
                        //第二个请求的另外两个方法
                       ……………………
                    });
                }
                //第一个请求的另外两个方法
                ……………………
            });
        }

粘贴一下log的数据

{
    "ret": 0,
    "msg": "",
    "is_lost": 0,
    "nickname": "Krisez",
    "gender": "男",
    "province": "province",
    "city": "city",
    "figureurl": "头像大小",
    "figureurl_1": "头像大小",
    "figureurl_2": "头像大小",
    "figureurl_qq_1": "头像大小",
    "figureurl_qq_2": "头像大小",
    "is_yellow_vip": "0",
    "vip": "0",
    "yellow_vip_level": "0",
    "level": "0",
    "is_yellow_year_vip": "0"
}

上面那一串都是头像的地址,只是像素不同按需选择

PS:不要在这里看
建议去这

啊,结束了,等着微信审核完了,在来一个微信的登录

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