“标记” /报告用户功能正常工作-Swift / Xcode / Firebase

问题描述 投票:1回答:1

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

我想念的是:如何在电子邮件中添加报告者和报告者的Firebase唯一ID(或任何通信形式)? (因此,我可以进行调查并根据需要采取措施)

这里是我的东西:正确发送电子邮件的代码...

 func configureMailController() -> MFMailComposeViewController {
    let mailComposerVC = MFMailComposeViewController()
    mailComposerVC.mailComposeDelegate = self

    mailComposerVC.setToRecipients(["[email protected]"])
    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)
  }
}

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

 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()
       }
  }

以及阻止用户的代码(但阻止/报告功能独立运行)。

非常感谢您的帮助!

swift firebase firebase-storage
1个回答
0
投票
在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) } } }

在User.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)

在View Controller中...

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
}

这不是完美的,但是有效!

© www.soinside.com 2019 - 2024. All rights reserved.