Ios Swift:即使从Facebook设置中删除应用程序,Facebook访问令牌也会始终返回

Ios Swift:即使从Facebook设置中删除应用程序,Facebook访问令牌也会始终返回,ios,swift,facebook,facebook-access-token,Ios,Swift,Facebook,Facebook Access Token,我正在使用Facebook SDK登录并通过我的应用程序进行升级。当用户从他们的Facebook页面删除应用权限,然后重新打开应用时,我希望它转到第一个视图控制器,该控制器要求用户登录Facebook。但是,我遇到了这样一个问题:即使删除了权限,用户仍然能够访问应用程序 那么,它应该如何工作: i) 用户转到Facebook个人资料并从设置中删除应用权限 ii)用户从iPhone完全关闭我的应用程序 iii)用户重新打开我的应用程序,“登录Facebook”视图控制器应出现 相反,会发生什么:

我正在使用Facebook SDK登录并通过我的应用程序进行升级。当用户从他们的Facebook页面删除应用权限,然后重新打开应用时,我希望它转到第一个视图控制器,该控制器要求用户登录Facebook。但是,我遇到了这样一个问题:即使删除了权限,用户仍然能够访问应用程序

那么,它应该如何工作:

i) 用户转到Facebook个人资料并从设置中删除应用权限

ii)用户从iPhone完全关闭我的应用程序

iii)用户重新打开我的应用程序,“登录Facebook”视图控制器应出现

相反,会发生什么:

i) 用户转到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
}

您需要手动注销会话

FBSDKLoginManager().logOut() 

FBSDKAccessToken.current = nil
FBSDKProfile.current = nil

一个解决方案是,每当用户开始使用应用程序时,当您从“使用Facebook登录”中删除应用程序时,您将收到错误消息 “操作无法完成。(com.facebook.sdk.core错误10)。” 因此,您可以注销并让您的用户再次登录

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

从设备中删除应用程序,然后再次检查。尝试了该操作后,它可以工作,但当我返回到我的Facebook帐户并从那里删除应用程序时,我仍然存在相同的问题。是的,这不是问题,但您需要注销您的Facebook会话。请尝试以下操作:[objLoginManager注销];