2017-06-02 63 views
1

我正在使用Facebook SDK登錄並通過我的應用程序進度。當用戶從他們的Facebook頁面中刪除應用程序權限,然後重新打開應用程序時,我希望它進入第一個視圖控制器,該控制器要求用戶登錄到Facebook。不過,即使在刪除權限後,用戶仍然可以訪問應用程序,但我遇到了這個問題。Swift:即使從Facebook設置中刪除應用程序後,Facebook訪問令牌總是返回

所以,它應該是如何工作的:

我)用戶進入Facebook的個人資料,並從設置

II)的應用權限用戶完全我的應用程序從iPhone關機。

iii)用戶重新打開我的應用程序並出現「登錄Facebook」視圖控制器。

相反,會發生什麼:

我)用戶進入Facebook的個人資料,並從設置

II)的應用權限用戶完全我的應用程序從iPhone關機。

III)用戶重新打開我的應用程序,和我的應用程序在不同的視圖控制器打開了應該只拿出在用戶登錄後。

AppDelegate.swift

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    // Override point for customization after application launch. 
    GMSServices.provideAPIKey("MY_API_KEY") 
    GMSPlacesClient.provideAPIKey("MY_API_KEY") 

    // FACEBOOK API STUFF 

    FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions) 
    print(FBSDKAccessToken.current()) 

    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    self.window = UIWindow(frame: UIScreen.main.bounds) 

    if(FBSDKAccessToken.current() != nil){ 

     print(FBSDKAccessToken.current()) 

     let initialViewController = storyboard.instantiateViewController(withIdentifier: "main") 

     self.window?.rootViewController = initialViewController 
     self.window?.makeKeyAndVisible() 
    } 
    else{ 

     print(FBSDKAccessToken.current()) 
     let initialViewController = storyboard.instantiateViewController(withIdentifier: "facebookLogin") 

     self.window?.rootViewController = initialViewController 
     self.window?.makeKeyAndVisible() 
    } 
    return true 
} 
+0

刪除應用程序,然後再次進行檢查。 – KKRocks

+0

試過了,它的工作原理,但然後當我回到我的Facebook帳戶並從那裏刪除應用程序時,我仍然有同樣的問題。 – notSoExperiencedCoder

+0

是的,這不是問題,但你需要註銷你的Facebook會話 – KKRocks

回答

1

您需要註銷您的會話手動

FBSDKLoginManager().logOut() 

OR

FBSDKAccessToken.current = nil 
FBSDKProfile.current = nil 
0

一種解決方案是刷新令牌每用戶開始使用應用程序時,你從刪除的應用程序「與Facebook的登錄狀態」時,您將收到錯誤 「操作無法完成。 (com.facebook.sdk.core錯誤10)」 這樣你就可以退出,使您的用戶登錄從設備再次

FBSDKAccessToken.refreshCurrentAccessToken { (_, _, error) in 
      if error != nil { 
       print(error!.localizedDescription) 
       try! Auth.auth().signOut() 
      } 
     }