2017-03-02 95 views
0

向您的聊天消息添加计数以将其上传到Google桌面搜索引擎优化数据库的最佳方式是什么?我拥有它的方式不断重新初始化,这样就会弄乱数据。Firebase数据库计数

问题:什么是上传聊天信息,使他们不互相干扰的最佳方式?通过firebase。

表示发送的每个messaga + general_room 1,2,3,4-

号码。

import Foundation 
import Firebase 
import FirebaseDatabase 
import FirebaseStorage 

var count = 0 

func UploadGeneralChatRoom(message : String) { 

    //Firebase Initialization 
    var ref: FIRDatabaseReference! 
    //var storage: FIRStorageReference! 
    let userID = FIRAuth.auth()?.currentUser?.uid 
    ref = FIRDatabase.database().reference() 
    //storage = FIRStorage.storage().reference() 


    //Get Data from database resend to database 
    ref.child("Users").child(userID!).observeSingleEvent(of: .value, with: {(snapshot) in 

     let snapDict = snapshot.value as? NSDictionary 
     let username = snapDict?["Username"] as? String ?? "" 
     let firebaseUserPhotoURL = snapDict?["photo_url"] as? String ?? "" 

     count = count + 1 
     print("Count: ", count) 


     let countString = String(count) 

     print("CountStrig: " + countString) 


     ref.child("general_room").child(countString).setValue(["Username": username, "uid": userID!, "Message" : message, "photo_url" : firebaseUserPhotoURL]) 


    }) 

} 
+0

我有一个非常困难的时候认识的问题。你问的是增加一个计数,但是也会询问聊天消息是否互相干扰?此外,该代码是有问题的,因为它初始化计数为0,然后您读取和写入一些数据到数据库。从firebase读取子节点的数量而不是每次都从0开始更有意义吗?请澄清并更新问题,我们会尽力回答。 – Jay

+0

我的问题是有一个新的计数每条消息。即时通讯不做任何工作,因为我每次重新初始化为零。我不知道如何修改我的firebase上传,所以它从不重复计数,所以我有连贯的消息流。 – nil

+0

每次我如何计算节点? – nil

回答

0

原来的问题是不太清楚,但如果你想将邮件上传到聊天室,这里有一个结构:

users 
    uid_0 
    name: "Kirk" 
    uid_1 
    name: "Spock" 
    uid_2 
    name: "McCoy" 

chat_rooms 
    room_0 
    name: "Bridge Chat Room" 
    messages: 
    message_0: 
     msg: "This is a message posted by Spock" 
     uid: "uid_1" 
    message_1: 
     msg: "Message posted by Kirk" 
     uid: "uid_0" 

和一些代码来创建chat_rooms一个新的消息,room_0(这可以大大浓缩,但留下详细的可读性)

let ref = rootRef.child("chat_rooms") 
let roomRef = ref.child("room_0") 
let messagesRef = roomRef.child("messages") 
let msgRef = messagesRef.childByAutoId() 
let data = ["msg": "a message posted by McCoy", 
      "uid": "uid_2"] 
msgRef.setValue(data) 

将导致

chat_rooms 
    room_0 
    name: "Bridge Chat Room" 
    messages: 
    message_0: 
     msg: "This is a message posted by Spock" 
     uid: "uid_1" 
    message_1: 
     msg: "Message posted by Kirk" 
     uid: "uid_0" 
    message_2: 
     msg: "a message posted by McCoy" 
     uid: "uid_2" 

message_0,message_1等是用childByAutoId创建的键。

如果你想知道有多少的消息有,这里有一个选项

messagesRef.observeSingleEvent(of: .value, with: { snapshot in 
    print(snapshot.childrenCount) 
}) 

,结果

3