Chat-Ereignisse
Zuvor haben Sie in der Vonage CLI eine Konversation erstellt und die beiden Benutzer zu dieser Konversation hinzugefügt. Konversationen, modelliert als NXMConversation Objekte im Client SDK, sind die Kommunikationsmittel der Benutzer. Mehr über Konversationen erfahren Sie in der Conversation API-Dokumentation. Chat-Ereignisse, oder NXMEvent Objekte werden über die von Ihnen erstellte Konversation gesendet. Um ein Chat-Ereignis zu erhalten, müssen Sie also zunächst die Konversation abrufen. Um dies zu implementieren, werden die Zusätze zu ChatViewController.swift die in den folgenden Abschnitten aufgeführt sind, erforderlich.
Fügen Sie Eigenschaften für die Konversation und Ereignisse hinzu, unterhalb der conversationTextView:
class ChatViewController: UIViewController {
...
let conversationTextView = UITextView()
var conversation: NXMConversation?
var events: [NXMEvent]? {
didSet {
processEvents()
}
}
...
}
Fügen Sie einen Funktionsaufruf zu getConversation am Ende der viewDidLoad Funktion:
override func viewDidLoad() {
...
getConversation()
}
Fügen Sie die Funktionen zum Abrufen der Konversation, der Ereignisse und der Verarbeitung dieser Ereignisse am Ende der ChatViewController.swift Datei:
class ChatViewController: UIViewController {
...
func getConversation() {
client.getConversationWithUuid(user.conversationId) { [weak self] (error, conversation) in
self?.conversation = conversation
if conversation != nil {
self?.getEvents()
}
conversation?.delegate = self
}
}
func getEvents() {
guard let conversation = self.conversation else { return }
conversation.getEventsPage(withSize: 100, order: .asc) { (error, page) in
self.events = page?.events
}
}
func processEvents() {
DispatchQueue.main.async { [weak self] in
guard let self = self else { return }
self.conversationTextView.text = ""
self.events?.forEach { event in
if let memberEvent = event as? NXMMemberEvent {
self.showMemberEvent(event: memberEvent)
}
if let textEvent = event as? NXMMessageEvent {
self.showTextEvent(event: textEvent)
}
}
}
}
func showMemberEvent(event: NXMMemberEvent) {
switch event.state {
case .invited:
addConversationLine("\(event.embeddedInfo?.user.name ?? "") was invited.")
case .joined:
addConversationLine("\(event.embeddedInfo?.user.name ?? "") joined.")
case .left:
addConversationLine("\(event.embeddedInfo?.user.name ?? "") left.")
case .unknown:
fatalError("Unknown member event state.")
@unknown default:
fatalError("Unknown member event state.")
}
}
func showTextEvent(event: NXMMessageEvent) {
if let message = event.text {
addConversationLine("\(event.embeddedInfo?.user.name ?? "A user") said: '\(message)'")
}
}
func addConversationLine(_ line: String) {
if let text = conversationTextView.text, text.count > 0 {
conversationTextView.text = "\(text)\n\(line)"
} else {
conversationTextView.text = line
}
}
}
getConversation verwendet die Konversations-ID aus der Vonage CLI, um die Konversation abzurufen, wenn dies erfolgreich ist getEvents wird aufgerufen, um die Chat-Ereignisse abzurufen. Das Client SDK unterstützt die Paginierung, so dass Sie zum Abrufen der Chat-Ereignisse eine Seitengröße angeben müssen.
Sobald die Ereignisse abgerufen sind, werden sie verarbeitet durch processEvents. Unter processEvents gibt es eine Typumwandlung in entweder eine NXMMemberEvent oder eine NXMMessageEvent die dann an die conversationTextView von showMemberEvent und showTextEvent beziehungsweise. Weitere Informationen über die unterstützten Ereignistypen finden Sie in der Conversation API-Dokumentation.
Der Gesprächsdelegierte
Die Anwendung muss auch auf Ereignisse in einer Konversation nach dem anfänglichen Laden reagieren, daher müssen Sie über ChatViewController entsprechen NXMConversationDelegate. Fügen Sie am Ende der Datei hinzu:
extension ChatViewController: NXMConversationDelegate {
func conversation(_ conversation: NXMConversation, didReceive error: Error) {
NSLog("Conversation error: \(error.localizedDescription)")
}
func conversation(_ conversation: NXMConversation, didReceive event: NXMMessageEvent) {
self.events?.append(event)
}
}
Wenn ein neues Ereignis empfangen wird, wird es an die events Array, das wiederum die Verarbeitung der Ereignisse neu startet.
Bauen und Ausführen
Presse Cmd + R zu erstellen und erneut auszuführen. Nach der Anmeldung sehen Sie, dass beide Benutzer wie erwartet der Unterhaltung beigetreten sind:

Erstellen einer iOS-Chat-App
Erstellen einer iOS-Anwendung, mit der sich Benutzer gegenseitig Nachrichten schicken können