swift - Facebook Graph API:Swift SDK 不工作:GraphRequest
问题描述
我一直在尝试完全遵循 Facebook 的文档,但不明白为什么我的代码不起作用,即使它与文档中的完全一样。我已经在我的应用上登录 Facebook,但我需要获取个人资料数据。
这是我的功能。
func fetchFacebookUser() {
let connection = GraphRequestConnection()
connection.add(GraphRequest(graphPath: "/me")) { httpResponse, result in
switch result {
case .success(let response):
print("Graph Request Succeeded: \(response)")
case .failed(let error):
print("Graph Request Failed: \(error)")
}
}
connection.start()
}
您会注意到它与文档完全相同: https ://developers.facebook.com/docs/swift/graph
但我什至无法构建项目,因为我在 Xcode 中收到此错误:
Contextual closure type '(GraphRequestConnection?, Any?, Error?) -> Void' expects 3 arguments, but 2 were used in closure body
Insert ',<#arg#> '
它有“修复”按钮,但这只是破坏了整个事情,Xcode(红色警告)抱怨 switch 语句中不存在任何情况。
我到处搜索,我得到的最接近的解决方案是这个 SO 帖子:Facebook GraphRequest for Swift 5 and Facebook SDK 5
但这没有答案:(
我确定有人使用 Swift 调用了 Graph API?我在这里想念什么?
解决方案
但是我实现了 facebook 登录我的应用程序,它工作正常。
单击按钮时,我使用 LoginManager 调用了 facebook 登录。
@IBAction func continueWithFacebook(_ sender: Any) {
let fbLoginManager : LoginManager = LoginManager()
fbLoginManager.logIn(permissions: ["email"], from: self) { (result, error) -> Void in
if (error == nil){
let fbloginresult : LoginManagerLoginResult = result!
if (result?.isCancelled)!{
return
}
if(fbloginresult.grantedPermissions.contains("email")) {
self.getFBUserData()
}
}
}
}
之后,我使用 GraphAP 获取用户的数据
func getFBUserData() {
if((AccessToken.current) != nil){
GraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: { (connection, result, error) -> Void in
if (error == nil){
guard let userDict = result as? [String:Any] else {
return
}
if let picture = userDict["picture"] as? [String:Any] ,
let imgData = picture["data"] as? [String:Any] ,
let imgUrl = imgData["url"] as? String {
self.uURLString = imgUrl
/*let url = URL(string: imgUrl)*/
print(imgData)
}
if let n = userDict["name"] as? String {
self.name = n
}
if let e = userDict["email"] as? String {
self.email = e
}
self.socialLogIn()
}
})
}
}
添加您的 pod 文件 - pod 'FBSDKCoreKit' 和 pod 'FBSDKLoginKit'
尝试像这样使用你会得到你嘲笑的结果。快乐编码
推荐阅读
- gatsby - How do you host a gatsby site under a subpath
- python - 连接数据帧python
- javascript - 如何使用 change.type ==" added' 从 Firebase Firestore 获取实时文档更新
- java - Setting Timeout in URL Connection - Force Server to Finish Reading Data with Method Similar to HttpURLConnection.setReadTimeout()
- regex - How can I check regex for three patterns in one
- swift - 排列 - DFS 和回溯 - 需要帮助理解展开和回溯
- amazon-web-services - S3 通知在其他区域调用 sqs 主题
- python - Python help to update Postgres column
- demandware - Commerce Cloud - 如何覆盖“应用”按钮的代码?
- haskell - How to convert Maybe a to a or -1 (for nothing)?