Swift:Facebook SDK,成功登录后检查丢失的权限

Posted

技术标签:

【中文标题】Swift:Facebook SDK,成功登录后检查丢失的权限【英文标题】:Swift: Facebook SDK, checking missing permissions after successful login 【发布时间】:2015-06-13 19:59:55 【问题描述】:

一旦用户成功登录应用程序,我将尝试检查是否缺少权限。

func checkUserPermission()
    
        let loginResult: FBSDKLoginManagerLoginResult = FBSDKLoginManagerLoginResult()
        var missingPermissions: [String] = []
        if !loginResult.grantedPermissions.containsObject("public_profile")
        
            missingPermissions.append("public_profile")
        
        if !loginResult.grantedPermissions.containsObject("email")
        
            missingPermissions.append("email")
        
        if !loginResult.grantedPermissions.containsObject("user_friends")
        
            missingPermissions.append("user_friends")
        
        if !loginResult.grantedPermissions.containsObject("user_likes")
        
            missingPermissions.append("user_likes")
        

        println(missingPermissions)

    

当应用程序状态发生变化时会运行此函数,以确保我拥有使应用程序正常运行所需的所有权限。

我目前收到此错误“致命错误:在展开可选值时意外发现 nil”,但我似乎无法理解原因。如果设置了“FBSDKAccessToken.currentAccessToken()”,那么理论上也应该设置权限。

【问题讨论】:

【参考方案1】:

发现问题,我假设let loginResult: FBSDKLoginManagerLoginResult = FBSDKLoginManagerLoginResult() 将存储授予的权限,但要获得当前登录用户的活动权限,您将不得不依赖FBSDKAccessToken。所以用

替换 loginResult

let loginResult: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken()

应该解决问题。 grantedPermissions 也将更改为 permissions。这是工作函数:

func checkUserPermission()
    

        let loginResult: FBSDKAccessToken = FBSDKAccessToken.currentAccessToken()


        var missingPermissions: [String] = []
        if !loginResult.permissions.containsObject("public_profile")
        
            missingPermissions.append("public_profile")
        
        if !loginResult.permissions.containsObject("email")
        
            missingPermissions.append("email")
        
        if !loginResult.permissions.containsObject("user_friends")
        
            missingPermissions.append("user_friends")
        
        if !loginResult.permissions.containsObject("user_likes")
        
            missingPermissions.append("user_likes")
        

        println(missingPermissions)

        //let login: FBSDKLoginManager = FBSDKLoginManager()
        //login.logInWithReadPermissions([""], handler: <#FBSDKLoginManagerRequestTokenHandler!##(FBSDKLoginManagerLoginResult!, NSError!) -> Void#>)
        //login.loginw
    

【讨论】:

【参考方案2】:

使用 Facebook SDK for Swift 的(当前)版本 0.2.0,这可以工作:

func loginButtonClicked() 
    let loginManager = LoginManager()
    loginManager.logIn([ .publicProfile, .email ], viewController: self)  loginResult in
        switch loginResult 
        case .failed(let error):
            print(error)
        case .cancelled:
            print("User cancelled login.")
        case .success(let grantedPermissions, let declinedPermissions, let accessToken):
            print("Logged in!")
            // Check for access to email address
            if declinedPermissions.contains(FacebookCore.Permission.init(name: "email")) 
                print("Email access declined")
            
        
    

【讨论】:

以上是关于Swift:Facebook SDK,成功登录后检查丢失的权限的主要内容,如果未能解决你的问题,请参考以下文章

使用 Swift 登录 Facebook 后加载另一个 ViewController

Facebook 使用 Parse SDK 登录(iOS 9、Xcode 7.1、Swift 2.1)

无法在 Xcode Swift Facebook 登录 SDK 中获取访问令牌

无法使用 Facebook SDK IOS Swift 登录 [重复]

ios facebook swift sdk 共享对话框永远不会返回成功

使用 URL 显示 Facebook 用户图片 (Swift 5 | Xcode 10)