[swift] Swift Presentr와 함께 사용하는 실시간 채팅 기능 구현 방법
목차
소개
실시간 채팅 기능은 현대 앱 개발에서 매우 중요한 기능 중 하나입니다. 이번 튜토리얼에서는 Swift Presentr로 모달창을 구현하고, Firebase를 사용하여 실시간 채팅 기능을 구현하는 방법을 알아보겠습니다.
사전 준비
이 튜토리얼을 따라하기 전에 다음 사항들이 준비되어야 합니다:
- Xcode IDE 설치
- Swift Presentr 라이브러리 설치
- Firebase 프로젝트 생성 및 설정
채팅 기능 구현
Firebase 설정
- Firebase 콘솔에 접속하여 새 프로젝트를 생성합니다.
- 생성된 프로젝트에서 “채팅”과 같은 이름의 새로운 Realtime Database를 추가합니다.
- 앱에 필요한 Firebase SDK를 설치하고 초기화하는 방법은 Firebase 공식 문서를 참조해주세요.
메시지 송신
송신자가 메시지를 작성하고 전송하기 위해 다음 단계를 따릅니다:
- Presentr을 사용하여 모달창을 엽니다. 모달창에는 채팅 입력란과 “전송” 버튼이 포함되어야 합니다.
- “전송” 버튼을 누르면 작성된 메시지를 Firebase에 저장합니다.
- Firebase 이벤트 핸들러를 활용하여 메시지 송신을 감지합니다.
- 송신자의 채팅 화면에 메시지를 표시합니다.
import Presentr
import Firebase
class ChatViewController: UIViewController {
// 모달창을 구현할 때 사용할 Presentr 객체
var presentr: Presentr {
let width = ModalSize.full
let height = ModalSize.fluid(percentage: 0.8)
let center = ModalCenterPosition.center
let customType = PresentationType.custom(width: width, height: height, center: center)
let presentr = Presentr(presentationType: customType)
return presentr
}
// Firebase Realtime Database 참조
let ref = Database.database().reference()
@IBAction func openChatModalButtonPressed(_ sender: UIButton) {
let chatModal = ChatModalViewController()
customPresentViewController(presentr, viewController: chatModal, animated: true, completion: nil)
}
func sendMessage(_ message: String) {
// Firebase에 메시지 저장
ref.child("messages").childByAutoId().setValue(message)
}
// Firebase 이벤트 핸들러를 통해 메시지 감지 및 화면에 표시
func observeMessages() {
ref.child("messages").observe(.childAdded) { (snapshot) in
if let message = snapshot.value as? String {
print("New message: \(message)")
}
}
}
}
메시지 수신
수신자가 메시지를 수신하기 위해 다음 단계를 따릅니다:
- Firebase 이벤트 핸들러를 활용하여 메시지 수신을 감지합니다.
- 수신된 메시지를 채팅 화면에 표시합니다. 채팅 화면은 UITableView를 사용해 구현할 수 있습니다.
import Firebase
class ChatViewController: UIViewController, UITableViewDataSource {
// Firebase Realtime Database 참조
let ref = Database.database().reference()
// 메시지를 저장할 배열
var messages: [String] = []
// UITableView 데이터 소스 메서드 구현
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return messages.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "MessageCell", for: indexPath)
cell.textLabel?.text = messages[indexPath.row]
return cell
}
// Firebase 이벤트 핸들러를 통해 메시지 감지 및 화면에 표시
func observeMessages() {
ref.child("messages").observe(.childAdded) { [weak self] (snapshot) in
if let message = snapshot.value as? String {
self?.messages.append(message)
self?.tableView.reloadData()
}
}
}
}
결론
이번 튜토리얼에서는 Swift Presentr와 Firebase를 사용하여 실시간 채팅 기능을 구현하는 방법을 살펴보았습니다. Presentr을 사용하여 모달창을 열고, Firebase를 사용하여 메시지를 송신 및 수신할 수 있습니다. 이러한 구현을 통해 애플리케이션에 실시간 채팅 기능을 추가할 수 있습니다.