现在很多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:不要在这里看
建议去这
啊,结束了,等着微信审核完了,在来一个微信的登录