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

时间:2015-06-13 19:59:56

标签: ios iphone facebook swift

我尝试在用户成功登录应用后检查是否缺少权限。

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()”,那么理论上也应该设置权限。

2 个答案:

答案 0 :(得分:3)

发现问题,我假设let loginResult: FBSDKLoginManagerLoginResult = FBSDKLoginManagerLoginResult()将存储已授予的权限,但要获得当前登录用户的活动权限,您必须依赖FBSDKAccessToken。所以用{/ p>替换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
    }

答案 1 :(得分:0)

使用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")
            }
        }
    }
}