0

테이블보기가 있습니다. 각 테이블보기에는 Firebase 데이터베이스에서 채워지는 다른 책들이 있습니다. 각 테이블보기 셀에는 메시지 단추가 있습니다. 버튼을 클릭하면 로그인 한 사용자가 해당 책을 게시 한 사용자에게 메시지를 보낼 수 있습니다. 내가 메시지를 보낼 때, 그것은 의도 된 사용자에게 전송하지만, 사용자가 하나 이상의 책이있는 경우는 모든 책에 동일한 메시지를 전송 JSQMessengerController을 사용하고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 



    } 

.

enter image description here enter image description here

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 
    } 

이 난 단지에 메시지가 내가 클릭 셀 (하나의 책)로 전송합니다. 그래서 제 의도는 입문 통계 책에 대한 "안녕"메시지를 보내는 것이 었습니다. 또한 책의 내용을 보냅니다. 책 ...

답변

0

나는 귀하의 Firebase 로직에 문제가 있다고 생각합니다. firebase에서 데이터에 대한 참조를 만들고있는 것처럼 보이지만 그 정보를 찾는 방법에 따라이 중복을 가질 수 있습니다. firebase에서 데이터를 검색하는 데 사용하는 방법을 보면 convoID를 기반으로 쿼리를 작성하고 있는지 확인하십시오. "senderId": senderId!, "ReceiverId": senderDisplayName!,은 동일한 작성자가있는 두 개의 서로 다른 책에 대해 동일 할 것이기 때문입니다.

이 라인이 이루고있는 것이 무엇인지 모르겠다. recipientUserMessagesRef.updateChildValues([messageId: 1]) 그러나 일반적으로 하드 코딩 된 값 (1)으로 설정하는 것은 좋지 않은 아이디어이다.

도움이되는지 알려주세요.