12/08/2018, 13:44

Firebase Tutorial: Real-time Chat part 2

Tiếp theo từ phần: https://viblo.asia/thevinh92/posts/rEBRAKprG8Zj Ở phần 1 chúng ta đã hoàn thiện phần UI của app Chat, phần này sẽ làm việc với Firebase. Firebase Data Structure Firebase database là kiểu NoSQL JSON. Về cơ bản, mọi thứ trong Firebase database là 1 JSON object, và mỗi key của ...

Tiếp theo từ phần: https://viblo.asia/thevinh92/posts/rEBRAKprG8Zj

Ở phần 1 chúng ta đã hoàn thiện phần UI của app Chat, phần này sẽ làm việc với Firebase.

Firebase Data Structure

Firebase database là kiểu NoSQL JSON. Về cơ bản, mọi thứ trong Firebase database là 1 JSON object, và mỗi key của 1 object có riêng 1 URL của nó. Ví dụ:

{
  // https://<my-firebase-app>.firebaseio.com/messages
  "messages": {
    "1": { // https://<my-firebase-app>.firebaseio.com/messages/1
      "text": "Hey person!", // https://<my-firebase-app>.firebaseio.com/messages/1/text
      "senderId": "foo" // https://<my-firebase-app>.firebaseio.com/messages/1/senderId
    },
    "2": {
      "text": "Yo!",
      "senderId": "bar"
    },
    "2": {
      "text": "Yo!",
      "senderId": "bar"
    },
  }
}

Firebase ủng hộ kiểu denormalized data structure - tức là bạn có thể sẽ bị duplicate 1 số data nhưng đổi lại data sẽ được truy nhập nhanh hơn - vì vậy senderId sẽ được chứa trong mỗi message.

Setting Up the Firebase Reference

Thêm properties vào ChatViewController.swift:

 let rootRef = Firebase(url: "https://<my-firebase-app>.firebaseio.com/")
var messageRef: Firebase!

init messageRef trong viewDidLoad():

override func viewDidLoad() {
  super.viewDidLoad()
  title = "ChatChat"
  setupBubbles()
  // No avatars
  collectionView!.collectionViewLayout.incomingAvatarViewSize = CGSizeZero
  collectionView!.collectionViewLayout.outgoingAvatarViewSize = CGSizeZero
  messageRef = rootRef.childByAppendingPath("messages")
}

Create rootRef để tạo ra 1 conection tới Firebase database. Sau đó create messageRef thông qua childByAppendingPath() - 1 helper method để tạo ra child reference. Khi bạn tạo 1 reference mới không có nghĩa là bạn tạo 1 connection mới, tất cả các reference vẫn chia sẻ chung connection tới cùng Firebase database.

Sending Messages

Ở thời điểm này, nếu bạn nhấn vào button "Send" bạn sẽ thấy app bị crash, bây giờ bạn đã kết nối được đến Firebase database, bạn sẽ gửi được message thực sự. đầu tiên, hãy xoá những test messages ở trong viewDidAppear(_            </div>
            
            <div class=

0