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 登录 [重复]