Facebook的SDK和火力地堡
我想从Facebook
检索用户的数据和存储在firebase
特定的数据并显示它UILabel
Facebook的SDK和火力地堡
请提供任何有用的链接,如果有任何。
我的代码:
fileprivate func setupFacebookButton() {
// add facebook button
let loginButton = FBSDKLoginButton()
loginButton.frame = CGRect(x: 24, y: 535, width: 165, height: 44)
loginButton.delegate = self
loginButton.readPermissions = ["email", "public_profile" , "user_birthday", "user_location"]
view.addSubview(loginButton)
}
和
let accessToken = FBSDKAccessToken.current()
guard let accessTokenString = accessToken?.tokenString else { return }
let credentials = FacebookAuthProvider.credential(withAccessToken: accessTokenString)
Auth.auth().signIn(with: credentials, completion: { (user, error) in
if error != nil {
print("Something went wrong with our FB user: ", error ?? "")
return
}
print("Successfully logged in with our user: ", user ?? "")
})
let requestParameters = ["fields": "name, email, birthday, gender, location"]
//location first_name, gender, age_range, user_birthday
FBSDKGraphRequest(graphPath: "/me", parameters: requestParameters).start { (connection, result, err) in
if err != nil {
print("Failed to start graph request:", err ?? "")
return
}
print(result ?? "")
}
输出:
{
birthday = "09/21/1987";
email = "[email protected]";
gender = male;
id = 1520497814669566;
location = {
id = 106065422766757;
name = "User city, User Country";
};
name = "User Name";
}
Successfully logged in with our user: <FIRUser: 0x6080000c87a0>
我不会做整个事情,你反而给你提示和指针。
从您的问题判断,您似乎尚未安装Firebase。在继续阅读之前,请继续并按照these的步骤进行操作,并查看他们的示例以了解如何构建数据库。
1.类创建
我封装所有此数据到一个名为Person
类,如下所示。
struct Location
{
var id: Int = ''
var name: String = ''
}
class Person
{
var id: Int = 0
var name: String = ''
var email: String = ''
var gender: String = ''
var birthday: String = ''
var location: Location = Location()
init(id: Int, name: String, email: String, gender: String, birthday: String, location: Location)
{
self.id = id
self.name = name
self.email = email
self.gender = gender
self.birthday = birthday
self.location = location
}
// TODO: Finish implementing this
init(snapshot: FIRDataSnapshot)
{
// This will make it easier to creating objects once you retrieve data from Firebase
}
// TODO: Finish implementing this
var dictionary: [String:Any]
{
return
[
// This will make it easier to create a dictionary out of your object
]
}
}
看this问题,看看他们如何实现他们的init(snapshot: FIRDataSnapshot)
构造,并尝试实施你的。重要的是你要看看他们的数据库树是如何首先看起来是合理的。
对于var dictionary
部分,this答案肯定会帮助你实现你的。
2. Facebook的结果了解
就像大多数的API在那里,Facebook的查询返回JSON。 JSON只是一个键/值对,这意味着它们可以存储为字典。
我建议你先试着摆弄result
来理解它。
要提取说用户名,你要做let userName = result.valueForKey("name") as! String
。
小心铸造。我将它转换为String
,因为从结果来看,它是String
。对于id
,您将转换为Int
而不是。
如果你看看location
虽然,它包含在其中的另一个字典。我会让你弄清楚如何从那里提取信息。
3.火力地堡
希望的时候,你在这里你熟悉火力地堡读/写。 正如您可能已经注意到的,为了将数据保存到Firebase,您需要为其提供一本字典。这是var dictionary
变量发挥作用。阅读关于this问题的答案和评论,了解如何使用它及其相关性。
4.总结
一旦你遵循了所有上述步骤,它的时间来拼凑在一起。从Facebook
- 提取内容创建
Person
对象并将 - 通
object.dictionary
进入火力地堡的写入功能。 - VOILA!注意你的数据库填充;这是最重要的部分:)
快乐编码。干杯队友:)
非常感谢你! –
@FaigHuseynov欢迎您。请接受答案,如果它帮助解决您的问题,并允许在SO – eshirima
上关闭此问题,此方法适用于uisegmentcontrol?使用片段,我定义了性别(男性/女性) –
你试图存储Facebook的什么信息?它是整个“结果”还是仅仅是某些数据? – eshirima
@EmilDavid只有整个结果 –