Swift:即使从Facebook设置中移除App后,也始终会返回Facebook Access令牌

时间:2017-06-02 03:01:53

标签: ios swift facebook facebook-access-token

我使用Facebook SDK登录并浏览我的应用程序。当用户从其Facebook页面删除应用程序权限然后重新打开应用程序时,我希望它转到第一个视图控制器,该控制器要求用户登录Facebook。但是,我遇到了用户即使在删除权限后仍然可以访问应用程序的问题。

那么,它应该如何运作:

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

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

iii)用户重新打开我的应用程序和#34;登录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
}

2 个答案:

答案 0 :(得分:2)

您需要手动注销会话

FBSDKLoginManager().logOut() 

FBSDKAccessToken.current = nil
FBSDKProfile.current = nil

答案 1 :(得分:0)

解决方案是每次用户在从#34登录时开始使用应用程序时刷新令牌;使用Facebook"你会收到错误 "操作无法完成。 (com.facebook.sdk.core错误10。)" 这样您就可以退出并让您的用户再次登录

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