Muni
聊天框架
🎊
特性
媒体
- 文本
- 图片
- 视频
- 音频
- 位置
- 贴纸
- 图像映射
安装 ⚙
pod 'Muni'
添加到您的 Podfile
pod install
GoogleService-Info.plist
添加到您的项目
用法
为云Firestore准备三个文档。
用户协议
房间协议
记录协议
创建符合每个协议的文档。
@objcMembers
class User: Object, UserProtocol {
var name: String?
var thumbnailImage: File?
}
@objcMembers
class Room: Object, RoomProtocol {
typealias TranscriptType = Transcript
dynamic var name: String?
dynamic var thumbnailImage: File?
dynamic var viewers: [String] = []
dynamic var members: [String] = []
dynamic var recentTranscript: [String: Any] = [:]
dynamic var transcripts: NestedCollection<TranscriptType> = []
dynamic var config: [String: Any] = [:]
dynamic var isMessagingEnabled: Bool = true
dynamic var isHidden: Bool = false
dynamic var lastViewedTimestamps: [String : Timestamp] = [:]
}
@objcMembers
class Transcript: Object, TranscriptProtocol {
dynamic var to: Relation<Room> = .init()
dynamic var from: Relation<User> = .init()
dynamic var text: String?
dynamic var image: File?
dynamic var video: File?
dynamic var audio: File?
dynamic var location: GeoPoint?
dynamic var sticker: String?
dynamic var imageMap: [File] = []
}
覆盖两个ViewController
class MessageViewController: Muni<User, Room, Transcript>.MessagesViewController {
var sendBarItem: ToolbarItem!
override var senderID: String? {
return Auth.auth().currentUser!.uid
}
override func viewDidLoad() {
super.viewDidLoad()
self.sendBarItem = ToolbarItem(title: "Send", target: self, action: #selector(send))
self.toolBar.setItems([ToolbarItem(customView: self.textView), self.sendBarItem], animated: false)
// Start
self.listen()
}
override func transcript(willSend transcript: Transcript) -> Bool {
guard let text: String = self.textView.text else { return false }
if text.isEmpty { return false }
transcript.text = text
self.textView.text = nil
return true
}
}
class BoxViewController: Muni<User, Room, Transcript>.InboxViewController {
override func viewDidLoad() {
super.viewDidLoad()
// Start
self.listen()
}
override func messageViewController(with room: Room) -> Muni<User, Room, Transcript>.MessagesViewController {
return MessageViewController(roomID: room.id)
}
}
构建
Muni内部使用Firestore查询。如果没有索引,将发生错误。您可以通过访问控制台中的URL来创建索引。