ios - iOS Facebook 登录在升级到 5 后无法正常工作
问题描述
我将我的 facebook SDK 更新到最新版本 (5),并带有以下 pod
pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
这是我更新的 facebook 登录功能
let loginManager = LoginManager()
loginManager.loginBehavior = .browser //.native is not supported in new version
loginManager.logIn(permissions: ["publicProfile", "userFriends", "email"], from: self) { (login, error) in
if let e = error {
self.showAlertForError(title: "", msg: e.localizedDescription)
return
}
if let l = login {
if l.declinedPermissions.contains("user_friends") || l.declinedPermissions.contains("email") {
SVProgressHUD.dismiss()
self.showAlertForError(title: "facebook_permission_required_text".localized(), msg: "facebook_permission_allow_text".localized())
return
}
GraphRequest(graphPath: "/me", parameters: ["fields" : "id, email, first_name, last_name"])
.start(completionHandler: { (connection, result, error) in
guard let result = result as? NSDictionary,
let email = result["email"] as? String,
let first_name = result["first_name"] as? String,
let last_name = result["last_name"] as? String,
let user_id_fb = result["id"] as? String else {
SVProgressHUD.dismiss()
}
})
}
}
尝试登录时出现此错误。
解决方案
您仍然可以像使用现有的一样发送请求iOS SDK
当前的请求方法对Graph API
请求使用 a custom type-safe API
。这使您可以graph API
更准确地推断请求的类型,并提供clean API
使用此数据的方法。
let connection = GraphRequestConnection()
@IBAction private func loginWithReadPermissions() {
let loginManager = LoginManager()
loginManager.logIn(
permissions: [.publicProfile, .userFriends, .email],
viewController: self
) { result in
self.loginManagerDidComplete(result)
}
}
func loginManagerDidComplete(_ result: LoginResult) {
switch result {
case .cancelled:
self.showAlertForError(
title: "Login Cancelled",
message: "User cancelled login."
)
case .failed(let error):
self.showAlertForError(
title: "Login Fail",
message: "Login failed with error \(error)"
)
case .success(let grantedPermissions, _, _):
self.showAlertForError(
title: "Login Success",
message: "Login succeeded with granted permissions: \(grantedPermissions)"
)
connection.add(GraphRequest(graphPath: "/me", parameters: ["fields" : "id, email, first_name, last_name"])) { httpResponse, result, error in
if error != nil {
NSLog(error.debugDescription)
return
}
guard let result = result as? NSDictionary,
let email = result["email"] as? String,
let first_name = result["first_name"] as? String,
let last_name = result["last_name"] as? String,
let user_id_fb = result["id"] as? String else {
SVProgressHUD.dismiss()
}
}
connection.start()
}
}
推荐阅读
- terraform - Terraform 多个 for_each 资源
- java - 除了 getString(R.string.idString) 之外,有没有一种方法可以用 Java 语言获取 Android 字符串资源的值?
- terraform-provider-aws - terraform 启动 ec2 实例
- python - Python3中列表的自然排序
- python - 根据 DataFrame 中的值重命名具有相同列名的列
- python - 如果python中的每个列表中都存在一个元素,如何有效地连接列表
- html - 如何在css中将容器与两个不同的容器混合
- excel - 运行时错误 109 - 使用 Set 为字符串设置 VBA 中对象的文件路径
- c - 在 stm32MP1 上以 DMA 模式通过 SPI 发送数据
- javascript - 输入时保存国际电话 DDD