无法在 Xcode Swift Facebook 登录 SDK 中获取访问令牌
Posted
技术标签:
【中文标题】无法在 Xcode Swift Facebook 登录 SDK 中获取访问令牌【英文标题】:Can't get access token in Xcode Swift Facebook login SDK 【发布时间】:2017-06-02 16:01:41 【问题描述】:我正在尝试在我的应用中测试 Facebook SDK 登录,但一直收到此错误。我看到一个对话框,它接受我的电子邮件和密码登录,然后告诉我我已经接受了该应用程序。我应该看到一条消息“已登录,但我只看到下面的错误。如何在 Xcode ios 模拟器中测试 Facebook SDK。我在 iPhone 上进行了测试,并带有显示访问令牌的警报但得到了相同的结果。它将始终显示“用户取消登录”。
-canOpenURL: failed for URL: "fbauth2:/" - error: The operation couldn’t be completed. (OSStatus error -10814.) User cancelled login.
这是我的代码。
func signInWithFacebook(button: UIButton)
let loginManager = LoginManager()
loginManager.logIn([ .publicProfile ], viewController: self) loginResult in
switch loginResult
case .failed(let error):
let alertController: UIAlertController = UIAlertController(title: "Login error", message: error as? String, preferredStyle: .alert)
let okAction: UIAlertAction = UIAlertAction(title: "OK", style: .default) action -> Void in
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
print(error)
case .cancelled:
let alertController: UIAlertController = UIAlertController(title: "Login cancelled", message: "User cancelled login", preferredStyle: .alert)
let okAction: UIAlertAction = UIAlertAction(title: "OK", style: .default) action -> Void in
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
print("User cancelled login.")
case .success(let grantedPermissions, let declinedPermissions, let accessToken):
print(grantedPermissions)
print(declinedPermissions)
print(accessToken)
let alertController: UIAlertController = UIAlertController(title: "Login success", message: String(describing: accessToken), preferredStyle: .alert)
let okAction: UIAlertAction = UIAlertAction(title: "OK", style: .default) action -> Void in
alertController.addAction(okAction)
self.present(alertController, animated: true, completion: nil)
print("Logged in")
在第一次通过时,我看到了 Facebook 登录对话框,但此后我只看到一个对话框,说我已经通过 OK 按钮授权了我的应用程序。
let accessToken = AccessToken.current
在 viewDidLoad() 中总是返回 nil。我需要获取一个 accessToken,以便将其发送到 API 并测试响应。
【问题讨论】:
你在吗? 是的,我在这里。 你想访问用户信息吗? 我不需要用户信息,但我确实需要登录 .success 设置的令牌和其他变量。我想将令牌发送到 API 以便在那里登录。 验证时是否有访问令牌? 【参考方案1】:mb 只用于 fb 登录,最好使用FacebookLogin
这里的令牌:
FBSDKAccessToken.current().tokenString
【讨论】:
其实let token = accessToken.authenticationToken
嗯。有趣,但在我的一个项目中,我看到:` func loginButtonDidCompleteLogin(_ loginButton: LoginButton, result: LoginResult) switch result case .failed(let error): print(error) case .cancelled: print("Cancelled") case .success(let grantPermissions, let deniedPermissions, let accessToken): print("Logged In", FBSDKAccessToken.current().tokenString) ... ` 及其作品! :)【参考方案2】:
我需要在我的 AppDelegate.swift 中添加这个函数。它似乎完全没有记录。
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool
return FBSDKApplicationDelegate.sharedInstance().application(application,
open: url,
sourceApplication: sourceApplication,
annotation: annotation)
【讨论】:
【参考方案3】:如果您已经在 Info.plist 中将 CFBundleURLSchemes 添加到 LSApplicationQueriesSchemes。
如果您尝试解决“canOpenURL:失败”警告,则只有 表明您的设备上未安装 Facebook 应用程序或 模拟器,可以忽略。
【讨论】:
如何在模拟器上安装 facebook 应用程序? 你不需要安装你只需要在模拟器中忽略这个警告。 可以安装应用吗?我需要获取访问令牌并将其发送到 API,然后测试响应。 尝试在模拟器中验证您的应用。您将获得带有此警告的访问令牌。 @markhorrocks 我认为您已经获得了访问令牌!这就是您能够登录的原因。是的,正如 KKRocks 所说,请忽略此消息。一切正常!【参考方案4】:我认为错误状态 10814 与 cantOpenUrl
相关,当 Facebook 使用参数 fbauth2:/ 调用 URL 时会使用它。喜欢建议的here。打印发生在这个函数内部,所以你不能用它做很多事情
您也可以在设置中进行更改:
目标 > 功能 > 启用钥匙串共享
没关系,因为您是在模拟器中进行测试,而您在真机中进行测试时不会出现。
【讨论】:
我需要在模拟器上进行测试,因为我需要将 facebook 访问令牌发送到 api 以便在那里登录。以上是关于无法在 Xcode Swift Facebook 登录 SDK 中获取访问令牌的主要内容,如果未能解决你的问题,请参考以下文章
无法使用 Swift 在 Xcode 中使用 Parse 1.7.2 和 Facebook SDK 4.1 创建新用户
Xcode 6 中的 Parse 和 Facebook SDK 导入冲突(无法识别“ParseFacebookUtils”)
在 Xcode 6.3 (Swift) 中使用 Parse 和 Facebook 框架编译错误