"Flag" / 报告用户功能工作 — Swift / Xcode / Firebase



我试图允许用户举报用户(在类似Tinder的应用程序中(。若要进行报告,此按钮会将用户带到新的 VC,以电子邮件形式详细说明问题。

我缺少什么:如何将报告者和被报告者的 Firebase 唯一 ID 添加到电子邮件(或任何形式的通信(中?(这样我就可以根据需要进行调查并采取行动(

这是我所拥有的:正确发送电子邮件的代码...

func configureMailController() -> MFMailComposeViewController {
let mailComposerVC = MFMailComposeViewController()
mailComposerVC.mailComposeDelegate = self
mailComposerVC.setToRecipients(["RadiusAppHelp@gmail.com"])
mailComposerVC.setSubject("Reporting user")
mailComposerVC.setMessageBody("Please include as much detail as possible:", isHTML: false)
return mailComposerVC
}
func showMailError() {
let sendMailErrorAlert = showAlert(withTitle: "Could not send message", message: "Please try again")
let dismiss = UIAlertAction(title: "Okay", style: .default, handler: nil)
//        sendMailErrorAlert.addAction(dismiss)
//        self.present(sendMailErrorAlert, animated: true, completion: nil)
}
func mailComposeController(_ controller: MFMailComposeViewController, didFinishWith result: MFMailComposeResult, error: Error?) {
controller.dismiss(animated: true, completion: nil)
}
}

在滑动视图中提取其他用户 ID 的代码 VC...

var otherUsersId = ""
var currentlyViewedUserId: String?
firebaseServer.fetchUsers {[weak self] (usersDict) in
self?.usersDict = usersDict
let fetchedUsers = Array(usersDict.values)
self?.filterBlockedUsers(from: fetchedUsers)
self?.loadFirstUser()
self?.cardView.reloadData()
}
func loadFirstUser() {
if users.count > 0 {
let imageView = UIImageView()
let storage = Storage.storage()
let storageRef = storage.reference(withPath: 
"(users[0].userId!)/photos/(0)")
currentlyViewedUserId = users[0].userId
PhotoUploader.downloadImageUrl(from: 
storageRef) { (url) in
guard let url = url else { return }
imageView.downloaded(from: url, 
contentMode: .scaleAspectFill)
}
nameLbl.text = users[0].firstName
setupDetailsFor(user: users[0])
infoCollectionView.reloadData()
}
}

以及阻止用户的代码(但阻止/报告功能独立工作(。

任何帮助将不胜感激!

好的,我至少找到了一个临时修复... (但是不使用Firestore,我最终需要实现 - https://www.youtube.com/watch?v=Ofux_4c94FI(

在 FirebaseFunctions.swift...

// Report Someone
func reportSomeone(with userId: String, completion: 
@escaping (Error?) -> Void) {
let usersRef = db.child("users")
if let uid = Auth.auth().currentUser?.uid {
usersRef.child("(uid)/report/ . 
(userId)").setValue(true) { (error, dbref) in
completion(error)
}
}
}
// Set Preferences for Reporting
func reportPreferences(with userId: String, 
completion: @escaping (Error?) -> Void) {
let usersRef = db.child("users")
if let uid = Auth.auth().currentUser?.uid {
usersRef.child("(uid)/preferences/ . 
(userId)").setValue(true) { (error, dbref) in
completion(error)
}
}
}

在用户.swift...

var report: [String: Bool]? = [:]
func makeDictionary() -> [String: Any] {
print("")
return [
"report": report ?? [:]
]
static func makeObjectFrom(_ dictionary: [String: 
Any]) -> LocalUser {
let report = dictionary["report"] as?
[String:Bool] ?? [:]
}
let localUser = LocalUser(report: report)

在视图控制器中...

import Firebase
var currentUserId = Auth.auth().currentUser?.uid
var otherUsersId = ""
// Report Button
var isCurrentUserReported = false
var isOtherUserReported = false
var currentlyViewedUserId: String?
// FILTER REPORTED USERS
func filterReportUsers(from users: [LocalUser]) {
var notReportUsers = users
var notReportUsersDict = self.usersDict
var reportUsers = newUser.report ?? [:]
if let currentUserId = 
Auth.auth().currentUser?.uid {
reportUsers[currentUserId] = true
}
for (userId, report) in reportUsers ?? [:] {
print("UserId...", userId)
print("UserHere...", usersDict[userId])
if let user = usersDict[userId] {
notReportUsersDict.removeValue(forKey: 
userId)
}
}
let notReport = Array(notReportUsersDict.values)
self.users = notReport
}

这并不完美,但它有效!

最新更新