Swift - Firebase 在 Firestore 中获取 Facebook 好友 UID
Posted
技术标签:
【中文标题】Swift - Firebase 在 Firestore 中获取 Facebook 好友 UID【英文标题】:Swift - Firebase Getting a Facebook Friends UID in Firestore 【发布时间】:2018-04-14 14:12:35 【问题描述】:了解一点背景知识 - 我有一个“关注 Facebook 朋友”视图控制器,用户可以在其中查看他们的朋友,他们也下载了我的应用以在应用上关注。
我已正确调用 FBSDK 以获取也下载了该应用程序的朋友列表,但现在我需要在 Firebase 中获取这些朋友的 uid,以便我可以相应地关注/取消关注他们。
目前,当我获得 FB 用户 ID 时 - 我获得了 facebook 文档中提到的数字字符串。但是,Firebase 中的用户 uid 是不同的。有没有办法找到与 FB id 相关联的 firebase 用户?或者我应该尝试通过 facebook id 在 firebase 中存储 Facebook 用户?
var facebookContacts = [User]()
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell
let cell = tableView.dequeueReusableCell(withIdentifier: "facebookContactCell", for: indexPath) as! FacebookContactCell
// Configure the cell...
let user = facebookContacts[indexPath.row]
cell.contactNameLabel.text = user.name
cell.userId = user.documentId
// Set follow button state
if followingArray.contains(cell.userId)
cell.followButton.isSelected = true
else
cell.followButton.isSelected = false
let userImageRef = storage.child("userImages/"+(user.documentId)+"/profile_pic.jpg")
// Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)
userImageRef.getData(maxSize: 1 * 1024 * 1024) (data, error) in
if let error = error
// Uh-oh, an error occurred! Display Default image
print("Error - unable to download image: \(error)")
cell.contactImageView.image = UIImage(named: "userProfileGray")
else
// Data for "locationImages/(locationId).jpg" is returned
cell.contactImageView.image = UIImage(data: data!)
SVProgressHUD.dismiss()
return cell
func getFbFriends()
let params = ["fields": "id, first_name, last_name, name, email, picture"]
let graphRequest = FBSDKGraphRequest(graphpath: "/me/friends", parameters: params)
let connection = FBSDKGraphRequestConnection()
connection.add(graphRequest, completionHandler: (connection, result, error) in
if error == nil
let resultdict = result as! NSDictionary
print("Result Dict: \(resultdict)")
let data : NSArray = resultdict.object(forKey: "data") as! NSArray
for i in 0..<data.count
let valueDict : NSDictionary = data[i] as! NSDictionary
let id = valueDict.object(forKey: "id") as! String
print("the id value is \(id)")
let name = valueDict.object(forKey: "name") as! String
print("the name value is \(name)")
let picDict = valueDict["picture"] as! NSDictionary
let picData = picDict["data"] as! NSDictionary
let picURL = picData.object(forKey: "url") as! String
print("the url value is \(picURL)")
self.facebookContacts.append(User(name: name, documentId: id))
DispatchQueue.main.async
self.tableView.reloadData()
let friends = resultdict.object(forKey: "data") as! NSArray
print("Found \(friends.count) friends")
else
print("Error Getting Friends \(String(describing: error))");
)
connection.start()
【问题讨论】:
【参考方案1】:我认为您无法根据用户的 Facebook ID 获取用户的 UID。看来你有两种可能:
-
通过电子邮件搜索。这应该可以让您确定您正在寻找的人。
实施自定义 Facebook 身份验证。它需要一些额外的工作,但并不难做到。
【讨论】:
我考虑过第一个选项,但我认为您无法获取 Facebook 朋友的电子邮件地址?即使他们已授予应用权限 @pmanning 可能不会。在这种情况下,自定义身份验证是您唯一的选择。它的好处是您可以将 FB 数据的存储移动到您的 JWT 端点中。我的意思是,一旦用户登录,您就可以提取所有必要的数据并将其放入数据库中,而无需在客户端执行任何操作。如果您要实现自定义身份验证,请不要忘记在 Firebase 中您可以声明可以通过 http 调用的函数;) @pmanning 你有想过这个吗?我正在尝试做同样的事情。以上是关于Swift - Firebase 在 Firestore 中获取 Facebook 好友 UID的主要内容,如果未能解决你的问题,请参考以下文章
尝试初始化 Cloud Firestore 时,firebase.firestore() 不是函数
尝试初始化 Cloud Firestore 时,firebase.firestore() 不是函数
Firebase Firestore 模拟器错误`主机已在 settings() 和 useEmulator() 中设置,将使用模拟器主机`
INVALID_ARGUMENT:每个请求最多允许 500 次写入 - Firebase Cloud Function - Firestore