ShareSDK 退出第三方登录和登录分享里面的一些注意事项

2018.8.17 微信登录时,授权一次过后会返回refresh_token ,为用户授权第三方应用的长效凭证,refresh_token拥有较长的有效期(30天),当refresh_token失效的后,需要用户重新授权。期间就算是取消授权(用ShareSDK提供的取消授权)也不会出现确定授权界面而是会直接返回用户信息。

这几天在做有关第三方登录和分享相关的内容,然后出现了各种问题有一些网上可以解决,但是有一个怎么也没有查到。

这儿我遇到最大的问题是 怎样让用户在登录第三方后退出,也就是用户每一次第三方登录都能到授权界面!

其实就一句代码就能实现,就是取消分享平台的授权。其中后面的参数是平台类型。

这儿是退出QQ第三方登陆


[ShareSDK cancelAuthorize:SSDKPlatformTypeQQ];

给效果图,程序还在编写阶段所以很丑不要介意。

退出登录GIF.gif

其中我点击登录过后再点击退出,就会再次进入授权界面。如果点击退出再点击登录就会直接返回用户信息给我,这与我们的需求是不同的。

这儿我们通常结合[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进行判断

其实我们想要同样的效果 可以在调起第三方登录的时候,取消响应平台的授权再调起第三方登录。这时候就会想退出登录怎么办,我们用第三方的话只是给用户一个快捷登录注册一个接口,我们自己的后台服务器同样也有用户的数据。我们只需要把自己后台服务器登录状态改为未登录状态。
效果图……

微信第三方登录.gif

调起的时候

[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

你可能感兴趣的:(ShareSDK 退出第三方登录和登录分享里面的一些注意事项)