Skip to main content

Receive messages

Set up message handlers to intercept and process incoming messages.

Register a message handler

The Chat SDK uses a handler-based model. Register a message handler with a unique identifier after SDK initialization, ideally before connecting:

tip
  • Register before calling connect to ensure offline messages are received immediately.
  • Use a persistent object (for example, a view controller or a singleton service) as the handler to avoid premature deallocation.
  • Registering with the same identifier twice overwrites the previous handler.
swift
import NexconnChatSDK

NCEngine.addMessageHandler(identifier: "YourUniqueKey", handler: self)

Implement the MessageHandler protocol

Your handler class must conform to MessageHandler. All callback methods are optional:

swift
import NexconnChatSDK

final class YourClass: NSObject, MessageHandler {
func onMessageReceived(_ event: MessageReceivedEvent) {
guard let message = event.message else { return }

print("Received message: \(message.messageId)")
print("Remaining in batch: \(event.left), offline: \(event.offline), hasPackage: \(event.hasPackage)")
}

func onOfflineMessageSyncCompleted(_ event: OfflineMessageSyncCompletedEvent) {
print("Offline message sync completed.")
}

func onMessageDeleted(_ event: MessageDeletedEvent) {
print("Deleted messages: \(event.messages?.count ?? 0)")
}

func onMessagesModified(_ event: MessagesModifiedEvent) {
print("Modified messages: \(event.messages.count)")
}
}

Remove a message handler

Remove the handler when it is no longer needed (for example, in dealloc or viewDidDisappear:):

swift
import NexconnChatSDK

NCEngine.removeMessageHandler(forIdentifier: "YourUniqueKey")

Message received status

The receivedStatusInfo property on NCMessage tracks the receiving state (read, listened, downloaded, and retrieved):

swift
import NexconnChatSDK

let message = /* message object from callback */
let statusInfo = message.receivedStatusInfo
let isRead = statusInfo.isRead
let isListened = statusInfo.isListened
let isDownloaded = statusInfo.isDownloaded
let isRetrieved = statusInfo.isRetrieved

Update received status

Call setReceivedStatusInfo(_:completion:) on the message instance to persist the updated state:

swift
import NexconnChatSDK

let statusInfo = MessageReceivedStatusInfo()
statusInfo.isRead = true

message.setReceivedStatusInfo(statusInfo) { isUpdated, error in
if isUpdated {
print("Received status updated.")
} else {
print("Failed to update received status: \(error?.localizedDescription ?? "unknown error")")
}
}