因此,我摆弄了Facebook的iOS SDK,并设法允许用户登录到我的应用程序。我在情节提要中有一个UIView
设置,属于FBSDKLoginButton
类,根据this,它只是UIButton
的子类。然后,我创建了一个@IBOutlet weak var facebookLogInBtn: FBSDKLoginButton!
。然后我就这样来设置我的权限
override func viewDidLoad()
{
super.viewDidLoad()
facebookLogInBtn.delegate = self
facebookLogInBtn.readPermissions = ["public_profile", "email", "user_friends"]
}
这工作得很好,可以完成我想要的任务和所需的任何其他权限,我只需将它们附加到
facebookLoginBtn.readPermissions
数组即可。但是经过一番谷歌搜索之后,我发现了很多使用FBSDKGraphRequest
和FBSDKLoginManager
的网站。以这个blog为例。现在我的问题是:我的方式被认为是可以接受的吗?它可以工作,但是我只想确定我正在遵循标准程序。
我如何以某种方式绑定到通过Graph API获取数据?因为我明确地没有声明任何
FBSDKRequest
或FBSDKLoginManager
对象。我只添加了按钮,然后实现了delegates
和Voila!我正在访问。无需解析任何JSON数据或其他任何内容。我还注意到,这些网站中的大多数实际上从未将其
UIView
中的任何一个定为FBSDKLoginButton
类。这可能是他们必须“手动”处理所有事情的原因吗?任何帮助将不胜感激。
干杯!
最佳答案
我所做的方式是正确的,但无法使用它检索任何用户数据。使用FBSDKLoginManager
对象,Facebook可以为我处理所有事情,它只会返回用户的最终响应(是否同意),但没有我通过readPermissions
数组请求的任何实际数据。用于任何数据检索;甚至可能还要写,我不得不为此创建一个FBSDKGraphRequest
对象。总而言之,我最终让Facebook处理登录并使用FBSDKLoginManager
注销,成功后,我使用FBSDKGraphRequest
检索了用户数据,如下所示
func loginButton(loginButton: FBSDKLoginButton!, didCompleteWithResult result: FBSDKLoginManagerLoginResult!, error: NSError!)
{
if error != nil
{
print("Facebook Log In Failed")
print(error.localizedDescription)
}
let graphRequest: FBSDKGraphRequest = FBSDKGraphRequest(graphPath: "me", parameters: ["fields" : "\(FacebookPermission.NAME), \(FacebookPermission.FIRST_NAME), \(FacebookPermission.LAST_NAME), \(FacebookPermission.EMAIL)"])
graphRequest.startWithCompletionHandler { (connection: FBSDKGraphRequestConnection!, result:AnyObject!, error: NSError!) in
if error == nil
{
print("Data retrieval was successful")
}
else
{
print("Facebook Graph Request Error")
print(error)
}
}
}