2015-06-08 182 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

當然,並將它標記爲正確的答案,如果它適合你:) –