使用Firebase发送邮件

时间:2017-11-20 16:56:19

标签: ios swift firebase firebase-realtime-database jsqmessagesviewcontroller

我有一个表格视图。在每个表格视图中都有从Firebase数据库填充的不同书籍。在每个表视图单元格中,都有一个消息按钮。单击该按钮时,登录用户可以向发布该书的用户发送消息。

 @IBAction func sendMessage(_ sender: Any) {
        let indexPath = self.selectedIndex
        let post = self.posts![(indexPath?.row)!] as! [String: AnyObject]
        self.infoID = post["postID"] as? String

        performSegue(withIdentifier: "sendMessageToUser", sender: self.userpicuid)
    }

   override public func prepare(for segue: UIStoryboardSegue, sender: Any?) {
      guard segue.identifier == "sendMessageToUser", let chatVc = segue.destination as? SendMessageViewController else {
            return
        }

        chatVc.senderId = self.loggedInUser?.uid
        chatVc.receiverData = self.userpicuid
        chatVc.senderDisplayName = self.userpicuid
        chatVc.username = self.username
        chatVc.infoID = self.infoID
        chatVc.bookName = self.bookName



    }

我正在使用JSQMessengerController,当我发送消息时,它会发送给目标用户,但如果用户有多本书,它会向所有书籍发送相同的消息。

override func didPressSend(_ button: UIButton!, withMessageText text: String!, senderId: String!, senderDisplayName: String!, date: Date!) {

        guard let uid = FIRAuth.auth()?.currentUser?.uid else {
            return
        }


        let convoRef = FIRDatabase.database().reference().child("messages").child(convoId!)
        let itemRef = rootRef.child("messages").child(convoId!).childByAutoId() // 1
        let messageItem = [ // 2
            "senderId": senderId!,
            "ReceiverId": senderDisplayName!,
            "text": text!,
            "timestamp": NSDate().timeIntervalSince1970,
            "convoId": convoId!,
            "infoID": infoID!
            ] as [String : Any]

        itemRef.setValue(messageItem) // 3

        itemRef.updateChildValues(messageItem) { (error, convoRef) in
            if error != nil{
                print(error)
                return
            }

            let userMessagesRef = FIRDatabase.database().reference().child("user-messages").child(self.convoId!).child(senderDisplayName!)

            let messageId = itemRef.key
            userMessagesRef.updateChildValues([messageId: 1])

            let recipientUserMessagesRef = FIRDatabase.database().reference().child("user-messages").child(self.convoId!).child(senderId!)

            recipientUserMessagesRef.updateChildValues([messageId: 1])

        }

        JSQSystemSoundPlayer.jsq_playMessageSentSound() // 4

        finishSendingMessage() // 5
        isTyping = false
    }

enter image description here enter image description here 我希望消息只发送到我点击的单元格(只有一本书)。所以我的意图是发送"嘿"对于介绍性统计书的消息,但它也将嘿发送到美国......的基本要点

1 个答案:

答案 0 :(得分:0)

根据您所描述的内容,我认为问题出在您的Firebase逻辑中。看起来您在firebase中引用了您的数据,但根据您查找该信息的方式,您可能会有这种重复。如果您查看用于从firebase检索数据的方法,请确保您根据您的convoID进行查询,因为(我认为)"senderId": senderId!, "ReceiverId": senderDisplayName!,对于两个具有相同的书籍的recipientUserMessagesRef.updateChildValues([messageId: 1])将是相同的作者。

我不知道这条线正在完成什么 {{1}}但通常将事物设置为硬编码值(1)是一个坏主意。

如果有帮助,请告诉我。