Swift Facebook 集成登录回调问题
Swift Facebook integration login callback issues
我正在尝试为我的 swift3
应用程序集成 Facebook login
。
我正在阅读此文档 Facebook SDK for Swift。
安装后pod
pod 'FacebookLogin'
pod 'FacebookShare'
并将它们添加到 Linked framework and libraries
中,facebook 登录的工作方式与显示 safari window 以使用 facebook 登录并重定向相同的 ViewController.
但是,我有两个具体问题。
第一个,我需要在 facebook 登录重定向(成功或错误)后添加一个回调并分配当前令牌。
我当前的代码是:
import FacebookLogin
import FacebookCore
class LoginViewController: UIViewController {
override func viewDidLoad(){
super.viewDidLoad()
self.navigationItem.setHidesBackButton(true, animated:true);
var fbtoken = AccessToken.current
LoginManager().logOut()
if(fbtoken != nil){
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()
}
let loginButton = LoginButton(readPermissions: [ .publicProfile ])
let screenSize:CGRect = UIScreen.main.bounds
let screenHeight = screenSize.height
let newCenterY = screenHeight - loginButton.frame.height - 10
let newCenter = CGPoint(x: view.center.x, y: newCenterY)
loginButton.center = newCenter
view.addSubview(loginButton)
}
fbtoken
变量始终为 nil
,读取 Login Behavior documentation 无法分配 callback
。
我做错了什么?
以下可能导致访问令牌为零
您没有正确设置 info.plist
:您必须使用 NSAppTransportSecurity
下的键 NSAllowsArbitraryLoads
将布尔值设置为 YES
字典
Facebook SDK 未在您的 AppDelegate 文件的 didFinishLaunchingWithOptions
中正确初始化:您必须进行此调用:
FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
您的 SDK 版本不是最新的。据报道,某些版本在这方面存在错误,因此如果为您解决了前 2 点,更新 SDK 可能会解决您的问题
为了回答您的其他问题,Facebook SDK 有一个 login
方法,其闭包参数如下
let manager = FBSDKLoginManager()
manager.logIn(withReadPermissions: ["public_profile"], from: self, handler: { (result, error) in
if error != nil {
// handle error
}
// login successful
})
注意:我提供的代码使用 pod 'FBSDKLoginKit'
和 pod 'FBSDKShareKit'
,因此可能存在细微的语法差异,但最终它们的工作方式相同。
编辑
我刚刚注意到您正在使用 Facebook 的 LoginButton
。在这种情况下,请参阅文档的 this 页面以获取更多信息。主要是,您可以执行以下操作:
确保您符合FBSDKLoginButtonDelegate
并实现didCompleteWithResult
方法,其中包含登录操作的结果。我链接的页面包含该方法的参数和您可能需要的其他详细信息。
我正在尝试为我的 swift3
应用程序集成 Facebook login
。
我正在阅读此文档 Facebook SDK for Swift。
安装后pod
pod 'FacebookLogin'
pod 'FacebookShare'
并将它们添加到 Linked framework and libraries
中,facebook 登录的工作方式与显示 safari window 以使用 facebook 登录并重定向相同的 ViewController.
但是,我有两个具体问题。 第一个,我需要在 facebook 登录重定向(成功或错误)后添加一个回调并分配当前令牌。
我当前的代码是:
import FacebookLogin
import FacebookCore
class LoginViewController: UIViewController {
override func viewDidLoad(){
super.viewDidLoad()
self.navigationItem.setHidesBackButton(true, animated:true);
var fbtoken = AccessToken.current
LoginManager().logOut()
if(fbtoken != nil){
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()
}
let loginButton = LoginButton(readPermissions: [ .publicProfile ])
let screenSize:CGRect = UIScreen.main.bounds
let screenHeight = screenSize.height
let newCenterY = screenHeight - loginButton.frame.height - 10
let newCenter = CGPoint(x: view.center.x, y: newCenterY)
loginButton.center = newCenter
view.addSubview(loginButton)
}
fbtoken
变量始终为 nil
,读取 Login Behavior documentation 无法分配 callback
。
我做错了什么?
以下可能导致访问令牌为零
您没有正确设置
info.plist
:您必须使用NSAppTransportSecurity
下的键NSAllowsArbitraryLoads
将布尔值设置为YES
字典Facebook SDK 未在您的 AppDelegate 文件的
didFinishLaunchingWithOptions
中正确初始化:您必须进行此调用:FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
您的 SDK 版本不是最新的。据报道,某些版本在这方面存在错误,因此如果为您解决了前 2 点,更新 SDK 可能会解决您的问题
为了回答您的其他问题,Facebook SDK 有一个 login
方法,其闭包参数如下
let manager = FBSDKLoginManager()
manager.logIn(withReadPermissions: ["public_profile"], from: self, handler: { (result, error) in
if error != nil {
// handle error
}
// login successful
})
注意:我提供的代码使用 pod 'FBSDKLoginKit'
和 pod 'FBSDKShareKit'
,因此可能存在细微的语法差异,但最终它们的工作方式相同。
编辑
我刚刚注意到您正在使用 Facebook 的 LoginButton
。在这种情况下,请参阅文档的 this 页面以获取更多信息。主要是,您可以执行以下操作:
确保您符合FBSDKLoginButtonDelegate
并实现didCompleteWithResult
方法,其中包含登录操作的结果。我链接的页面包含该方法的参数和您可能需要的其他详细信息。