Facebook 登录在 IOS SDK 中不起作用
Posted
技术标签:
【中文标题】Facebook 登录在 IOS SDK 中不起作用【英文标题】:Facebook Login not working in IOS SDK 【发布时间】:2017-06-08 11:20:59 【问题描述】:我正在努力解决 Facebook 登录问题,昨天 Facebook 登录工作正常,但今天当我运行我的应用程序时它不工作不知道为什么,为什么它突然不工作我已经在 Facebook 中配置了与 Facebook 登录相关的所有内容开发控制台一切都配置好了 如果您有任何想法,请帮助我,我也已经启用了钥匙串共享。
Facebook 登录代码
@IBAction func onClickFacebookLoginAction(_ sender: Any)
var message = String()
if Reachability.isConnectedToNetwork() == true
let loginView:FBSDKLoginManager = FBSDKLoginManager()
loginView.loginBehavior = FBSDKLoginBehavior.web
loginView.logIn(withReadPermissions: ["email","public_profile","user_friends"], from: self, handler: (result, error) in
if(error != nil)
print("Error while try to login with facebook-\(error?.localizedDescription)")
else if (result?.isCancelled)!
print("User cancel the facebook login")
else
if result?.grantedPermissions != nil
if (result?.grantedPermissions .contains("email"))!
self.ShowProgressHUD()
self.fetchUserInfo()
else
message = message.appending("Facebook email permission error")
self.showAlertMessage(message: message, title: "")
)
func fetchUserInfo() -> Void
if (FBSDKAccessToken.current() != nil)
let graphRequest:FBSDKGraphRequest = FBSDKGraphRequest(graphpath: "/me", parameters:["fields": "id, first_name, last_name, name, email, picture"])
graphRequest.start(completionHandler: (connection, result, error) in
if(error != nil)
self.showAlertMessage(message: (error?.localizedDescription)!, title: "")
else
print("Result is:\(result)")
self.dictionary = result as! [String : AnyObject]
let name = self.dictionary["name"] as!String
let email = self.dictionary["email"] as! String
let token = FBSDKAccessToken.current().tokenString
print("name is -\(name)")
print("email is -\(email)")
print("token is -\(token)")
DispatchQueue.main.async
let SelectionViewObj = self.storyboard?.instantiateViewController(withIdentifier: "ViewController") as! ViewController
self.navigationController?.pushViewController(SelectionViewObj, animated: true)
)
【问题讨论】:
为什么graphPath参数值graphPath: "/me"
之前有个/
@PraveenKumar 我只是按照一些教程和教程做同样的事情。
去掉斜线试试。在此处查看详细信息developers.facebook.com/docs/ios/graph 并参考此***.com/questions/31383578/…
结果不一样
如果它不起作用,请尝试我的答案,为我提供您遇到的问题
【参考方案1】:
这是我用来验证 facebook 的代码。它的工作原理就像一个魅力。只需检查或替换为这个。
self.fbLoginManager = FBSDKLoginManager.init()
fbLoginManager.loginBehavior = FBSDKLoginBehavior.web
self.fbLoginManager.logIn(withReadPermissions: ["email"], from: self) (result, error) -> Void in
if (error == nil)
let fbloginresult : FBSDKLoginManagerLoginResult = result!
if fbloginresult.grantedPermissions != nil && fbloginresult.grantedPermissions.contains("email")
if((FBSDKAccessToken.current()) != nil)
FBSDKGraphRequest(graphPath: "me", parameters: ["fields":"id, first_name, last_name, email, gender, birthday, location"]).start(completionHandler: (connection, result, error) -> Void in
if error != nil
print(error?.localizedDescription ?? "error in facebook login...!")
return
if let dict = result as? NSDictionary
print("facebook login result --->\n\(dict)")
guard let id = dict["id"] else
print("Ooops... id = nil")
return
// let firstName: String = dict["first_name"] as? String ?? ""
// let lastName : String = dict["last_name"] as? String ?? ""
// let email : String = dict["email"] as? String ?? ""
self.fbLoginManager.logOut()
)
else
print("facebook ---> login canceled")
else
print(error?.localizedDescription ?? "facebook login has error")
【讨论】:
我认为从 fb 开发者控制台中删除该项目并创建新项目并尝试这个.... 我的应用程序已在 App Store 上运行,现在我正在添加一些功能 【参考方案2】:这就是我过去使用 Facebook 登录的方式,
@IBAction func act_loginFB(_ sender: UIButton)
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
fbLoginManager.logIn(withReadPermissions: ["public_profile", "email",], from: self) (result, error) -> Void in
if (error == nil)
let fbloginresult : FBSDKLoginManagerLoginResult = result!
if(fbloginresult.grantedPermissions.contains("email"))
self.getFBUserData()
func getFBUserData()
if((FBSDKAccessToken.current()) != nil)
FBSDKGraphRequest(graphPath: "me", parameters: ["fields": "id, name, first_name, last_name, picture.type(large), email"]).start(completionHandler: (connection, result, error) -> Void in
if (error == nil)
//everything works print the user data
print(result)
let data: [String:AnyObject] = (result as? [String : AnyObject])!
print(data)
let email: String = data["email"]! as! String
print(email)
)
检查您在 info.plist 中添加了正确的 FacebookAppID 和 FacebookDisplayName
【讨论】:
我想打开登录行为,因为网络不想在 safari 浏览器中打开,在浏览器中它在我的代码中也可以正常工作 @Sanjeetverma 在此行之后添加fbLoginManager.loginBehavior = FBSDKLoginBehavior.web
let fbLoginManager : FBSDKLoginManager = FBSDKLoginManager()
我在我的代码中也使用过,如果你愿意,那么你可以在我的问题中检查我上面的代码,好吧,让我先试试你的答案
如果我使用 safari 浏览器,一旦您尝试使用具有登录行为的代码,您会得到相同的结果吗
@Sanjeetverma 我认为您的代码没有错误,问题出在某个地方,请验证您是否按照教程中的每一步操作,否则请尝试其他操作。 facebook 登录的通用代码就是我上面提到的那个。通过网络浏览器或本机显示登录由您决定,可以从FBSDKLoginBehavior
以上是关于Facebook 登录在 IOS SDK 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Facebook 应用邀请在使用 Facebook SDK 4.X 的 iOS8 中不起作用?
获取 xmpp_login 访问令牌在 Facebook iOS SDK 中不起作用
Facebook 登录在 Twitter iOS 应用程序中不起作用