2015-06-08 133 views
4

我试图将我的用户完全登录到我的应用程序之外。使用时如何从Facebook注销或使用Parse和Swift撤销登录

PFUser.logout() 

我成功地将用户从Parse中注销。 但是当我回到应用程序并点击登录按钮时,我被重定向到Facebook屏幕上,并说:“您已经授权[应用程序的名称]” 因此,我永远不能使用另一个帐户再次登录,除如果我重置模拟器。

我也尝试过使用

PFFacebookUtils.facebookLoginManager().logOut() 

注销,但它不工作,要么... 希望你能帮助我找到一个解决的办法! 我使用的是最新的Facebook和解析SDK

更新:

实际使用PFUser.logout()解析的最后一个版本和的Facebook的iOS SDK版本> = 4.4.0将做工作。

不要使用PFFacebookUtils.facebookLoginManager().logOut()FBSDKLoginManager().logOut(),因为它只会从Facebook的注销用户而不是从解析后端。这意味着它不会删除解析后端的可撤销会话。

回答

5

居然还有从他/她的Facebook帐户注销的用户吊销登录(让人们彻底解除授权的应用程序,或撤销注册)和之间的差异:

撤销登录

(您可以检查Facebook documentation

你也可以让人们彻底解除授权的应用程序,或撤销注册,通过调用该图形API端点:

DELETE /{user-id}/permissions 

这要求必须使用有效的用户访问令牌或应用的访问令牌进行为当前的应用程序。如果请求成功,您的应用程序将收到一个true的响应。如果通话成功,该用户的任何用户访问令牌都将失效,他们将不得不再次登录。由于您正在取消授权您的应用,因此他们也必须授予您应用的访问权限,就像他们第一次登录一样。

let facebookRequest: FBSDKGraphRequest! = FBSDKGraphRequest(graphPath: "/me/permissions", parameters: nil, HTTPMethod: "DELETE") 

facebookRequest.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection!, result: AnyObject!, error: NSError!) -> Void in 

       if(error == nil && result != nil){ 
        println("Permission successfully revoked. This app will no longer post to Facebook on your behalf.") 
        println("result = \(result)") 
       } else { 
        if let error: NSError = error { 
         if let errorString = error.userInfo?["error"] as? String { 
          println("errorString variable equals: \(errorString)") 
         } 
        } else { 
         println("No value for error key") 
        } 
       } 
} 

注销的用户形成他/她的Facebook账号

如果你已经使用解析的Facebook的iOS SDK版本> = 4.4.0注册或登录一个用户通过Facebook,并且您不想取消授权应用或撤销登录,但只想从Facebook注销用户,则请改为使用:

PFUser.logOut() 

这将注销用户,删除对解析后端方的会话(不通过您的解析程序设置忘记enable解析revocable session),再加上它也将删除写在了Facebook的会议用户设备的磁盘。

我希望这个答案能帮助你们。

+0

谢谢,答案不能更清楚!我知道我错过了一些东西。这并不是一个真正的问题,因为我们通常不希望在退出应用程序时将用户完全注销。至少现在我知道如何正确地做到这一点。再次感谢 ! – Simon

+0

不要忘记给问题和答案+1,如果它帮助你们。 –

+1

不适用于我不幸的。我总是看到“你已经授权”屏幕,不管我做什么 –

-1

来源:Logout from facebook in iOS app

- (void)logout:(id<FBSessionDelegate>)delegate { 

    _sessionDelegate = delegate; 

    NSMutableDictionary * params = [[NSMutableDictionary alloc] init]; 
    [self requestWithMethodName:@"auth.expireSession" 
        andParams:params andHttpMethod:@"GET" 
        andDelegate:nil]; 

    [params release]; 
    [_accessToken release]; 
    _accessToken = nil; 
    [_expirationDate release]; 
    _expirationDate = nil; 

    NSHTTPCookieStorage* cookies = [NSHTTPCookieStorage sharedHTTPCookieStorage]; 
    NSArray* facebookCookies = [cookies cookiesForURL: 
    [NSURL URLWithString:@"https://m.facebook.com"]]; 

    for (NSHTTPCookie* cookie in facebookCookies) { 
    [cookies deleteCookie:cookie]; 
    } 

    if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogout)]) { 
    [_sessionDelegate fbDidLogout]; 
    } 
} 
+0

感谢您的回复!但是FBSession不再存在于最新的SDK中,所以我不能使用它们...... – Simon

+0

@Simon有没有什么方法可以发现用新的facebook SDK注销?我陷入了同样的问题。 –

+1

嗨@AhsanEbrahim!不幸的是,我没有找到一种方法来正确地做到这一点......目前我只是使用'PFFVideosUtils.facebookLoginManager()。logOut()'和'PFUser.logout()' 最后,它不是一个真正的问题,因为一部电话通常只有一个用户。但如果你找到一个解决方案,它会很好,如果你能通知我:) – Simon

1

我只是实现这一点。从应用程序中的任何viewController调用此函数,它将从Facebook注销。为我工作就像一个魅力。我希望它能帮助你。

-(void) logout 
{ 
    FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init]; 

    if ([FBSDKAccessToken currentAccessToken]){ 
     [login logOut]; 
    } 
} 
+0

这适用于当前最新的Facebook的Facebook,不适用于任何版本的Facebook。 –

+0

我会试试这个!谢谢:) – Simon

+0

当然,并将它标记为正确的答案,如果它适合你:) –