«Флаг» / Сообщить о функциональности пользователя для работы - Swift / Xcode / Firebase - PullRequest
1 голос
/ 21 января 2020

Я пытаюсь разрешить пользователю сообщать о пользователе (в приложении, похожем на Tinder). Чтобы сообщить, эта кнопка переводит пользователя на новый V C для разработки проблемы в виде электронного письма.

Чего мне не хватает: Как мне добавить Firebase репортера и репортера уникальный идентификатор электронной почты (или какая-либо форма связи)? (Так что тогда я могу провести расследование и принять необходимые меры)

Вот что у меня есть: Код для правильной отправки электронного письма ...

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

Код чтобы получить идентификатор другого пользователя в виде пролистывания V C ...

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

, а также код для блокировки пользователя (но функции блокировки / создания отчетов работают независимо).

Любая помощь с благодарностью!

1 Ответ

0 голосов
/ 23 января 2020

Хорошо, я нашел, по крайней мере, временное исправление ... (Однако, не используя 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)
           }
       }
   }

В 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)

В контроллере вида ...

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
}

Это не идеально, но это работает!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...