https://blog.csdn.net/github_2011/article/details/54316008
unionid的获取
unionid的获取很简单
:
String unionid =
.getDb().get("unionid");
unionid的获取
unionid, 其实 QQ 也有
.getDb().exportData();//获取到db里面所有的内容我们下面来看看,exportData里面都有什么内容:
其实exportData是一个json数据,格式化后如下图所示:
我们发现里面并没有unionid,那我们怎么获得QQ的unionid呢 ?
天无绝人之路,有一个接口可以获取QQ的unionid,需要QQ的token作为参数,token我们是可以拿到的,上图选中的就是token
- 接口:
- https://graph.qq.com/oauth2.0/me
- 请求方式:GET
- 请求参数:
- access_token QQ的token
- unionid 传1即可
代码如下 :
/**
* 获取QQ的unionid
* @param plat
*/
private void getQQUnionid(Platform plat) {
Request request = new Request(Request.Method.GET, "https://graph.qq.com/oauth2.0/me?access_token=" + plat.getDb().getToken() + "&unionid=1", new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {}}) {
@Override
protected Response parseNetworkResponse(NetworkResponse response) {
byte[] data = response.data;
String s = new String(data);
String[] split = s.split(":");
s = split[split.length - 1];
split = s.split("\"");
s = split[1];
unionid = s;
return Response.success(s, HttpHeaderParser.parseCacheHeaders(response));
}
@Override
protected void deliverResponse(Object response) {
}
@Override
public int compareTo(Object another) {
return 0;
}
};
NetworkManager.addRequest(request);
}
通过 String s = new String(data);
我们可以得到返回的字符串信息如下:
返回的并不是json数据,但幸运的是里面有unionid,我通过字符串切割的方法把它取了出来。
---------------------
作者:github_2011
来源:CSDN
原文:https://blog.csdn.net/github_2011/article/details/54316008
版权声明:本文为博主原创文章,转载请附上博文链接!
ShareSDK 退出第三方登录和登录分享里面的一些注意事项
https://www.jianshu.com/p/895b94f8da0d
2018.8.17 微信登录时,授权一次过后会返回refresh_token ,为用户授权第三方应用的长效凭证,refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。期间就算是取消授权(用ShareSDK提供的取消授权)也不会出现确定授权界面而是会直接返回用户信息。
这几天在做有关第三方登录和分享相关的内容,然后出现了各种问题有一些网上可以解决,但是有一个怎么也没有查到。
这儿我遇到最大的问题是 怎样让用户在登录第三方后退出,也就是用户每一次第三方登录都能到授权界面!
其实就一句代码就能实现,就是取消分享平台的授权。其中后面的参数是平台类型。
这儿是退出QQ第三方登陆
[ShareSDK cancelAuthorize:SSDKPlatformTypeQQ];
给效果图,程序还在编写阶段所以很丑不要介意。
其中我点击登录过后再点击退出,就会再次进入授权界面。如果点击退出再点击登录就会直接返回用户信息给我,这与我们的需求是不同的。
这儿我们通常结合[ShareSDK hasAuthorized:SSDKPlatformTypeQQ],来判断用户是否退出第三方登录。
比如:判断QQ是否退出第三方登录
[ShareSDK cancelAuthorize:SSDKPlatformTypeQQ];
BOOL isAuthorizedWithQQ = [ShareSDK hasAuthorized:SSDKPlatformTypeQQ]; if (!isAuthorizedWithQQ) { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"退出成功" message:@"" preferredStyle: UIAlertControllerStyleAlert]; UIAlertAction *a = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) { }]; [alert addAction:a]; [self presentViewController:alert animated:true completion:nil]; } else { UIAlertController *alert = [UIAlertController alertControllerWithTitle:@"退出失败" message:@"" preferredStyle: UIAlertControllerStyleAlert]; UIAlertAction *a = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleDestructive handler:^(UIAlertAction * _Nonnull action) { }]; [alert addAction:a]; [self presentViewController:alert animated:true completion:nil]; }
根据返回的BooL进行判断
其实我们想要同样的效果 可以在调起第三方登录的时候,取消响应平台的授权再调起第三方登录。这时候就会想退出登录怎么办,我们用第三方的话只是给用户一个快捷登录注册一个接口,我们自己的后台服务器同样也有用户的数据。我们只需要把自己后台服务器登录状态改为未登录状态。
效果图……
调起的时候
[ShareSDK cancelAuthorize:SSDKPlatformTypeWechat]; //这儿就是取消授权 [ShareSDK getUserInfo:SSDKPlatformTypeWechat onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error) { if (state == SSDKResponseStateSuccess) { //获取用户的信息 (可以上传到自己后台服务器上/本地缓存) } }];
退出登录
CHECK_NETWORK_STATUS
REFRESHSATR
NSDictionary *dic = @{@"id":USERID,@"type":@"1"}; //我这儿就是自己的后台退出登录 [NetworkingRequest POST:LOGOUT_URL parameters:dic sucess:^(id responseObject) { REFRESHSTOP if ([responseObject[@"code"] integerValue] == 1) { PRMOPT(@"退出登陆成功"); LOGOUT; [[NSNotificationCenter defaultCenter]postNotificationName:@"logOut" object:nil]; BACK; } if ([responseObject[@"code"] integerValue] == 106) { PRMOPT(@"退出登陆失败"); } } failure:^(NSError *error) { REFRESHSTOP if (error.code == -1001) { PRMOPT(@"请求超时"); return ; } if (error.code == - 1004 ){ PRMOPT(@"服务器连接失败"); return; } PRMOPT(@"退出登陆失败"); }];
我们在配置QQ的第三方登陆和分享URL Schemes的时候,容易犯了一个小错误。
QQ登陆的Schemes是以tencent + APPId 这儿的Id是你在QQ开发者平台上申请的。
而QQ分享时Schemes 却需要QQ+转换成16进制的APPId。
而其他的好像就没有 比如微博就是wb + APPId
当然微信直接就是申请的APPId
作者:吃货_X
链接:https://www.jianshu.com/p/895b94f8da0d
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
