Skip to main content

Subscribe to online status

This guide covers subscribing to, querying, and monitoring user online status.

Listen for subscription events

Register NCUserHandler after SDK initialization and before connecting:

swift
import NexconnChatSDK
final class SubscribeHandler: NSObject, UserHandler {}
let subscribeHandler = SubscribeHandler()
NCEngine.addUserHandler(identifier: "SUBSCRIBE_HANDLER", handler: subscribeHandler)
NCEngine.removeUserHandler(forIdentifier: "SUBSCRIBE_HANDLER")
tip

Filter events by NCSubscribeType. The online status type is NCSubscribeTypeOnlineStatus.

Implement the handler callbacks:

swift
import NexconnChatSDK
func onSubscriptionSyncCompleted(_ event: SubscriptionSyncCompletedEvent) {
// Sync completed after connection
// event.type: subscription type (e.g., .onlineStatus)
}

func onSubscriptionChanged(_ event: SubscriptionChangedEvent) {
// Status changed — check subscribeType for .onlineStatus
for info in event.events {
print("Subscription changed: \(info.userId)")
}
}

func onSubscriptionChangedOnOtherDevices(_ event: SubscriptionChangedOnOtherDevicesEvent) {
// Subscription changed on another device
print("Changed on other devices: \(event.events.count)")
}
tip

All subscription APIs are on NCEngine.userModule.

Subscribe to online status

tip
  • Max 200 users per subscription call
  • Max 1,000 total subscriptions
  • Each user can be subscribed to by up to 5,000 users
swift
import NexconnChatSDK
let params = SubscribeEventParams(subscribeType: .onlineStatus, userIds: ["user1", "user2", "user3"])
// Set expiry as appropriate (seconds)
params.expiry = 3600
NCEngine.userModule.subscribeEvent(params: params) { failedUserIds, error in
// failedUserIds: IDs that failed (empty on full success)
}

Unsubscribe

swift
import NexconnChatSDK
let params = UnsubscribeEventParams(subscribeType: .onlineStatus, userIds: ["user1", "user2"])
NCEngine.userModule.unsubscribeEvent(params: params) { failedUserIds, error in
// Unsubscribed
}

Query subscription events

Query up to 200 users per call:

swift
import NexconnChatSDK
let params = GetSubscribeEventParams()
params.subscribeType = .onlineStatus
params.userIds = ["user1", "user2"]
NCEngine.userModule.getSubscribeEvent(params: params) { events, error in
// events: subscription event list
}

Query all subscriptions (paginated)

Use createSubscribeQueryWithParams: to create a paginated query object:

swift
import NexconnChatSDK
let params = SubscribeQueryParams()
params.subscribeType = .onlineStatus
params.pageSize = 20
let query = UserModule.createSubscribeQuery(params: params)
query.loadNextPage { page, error in
// page?.data: current page of subscription events
}

Query subscribed users' online status

Call getSubscribeUsersOnlineStatus to batch-query online status for subscribed users (max 200 per call):

swift
import NexconnChatSDK
NCEngine.userModule.getSubscribeUsersOnlineStatus(userIds: ["user1", "user2"]) { statusList, error in
for userStatus in statusList ?? [] {
let isOnline = userStatus.isOnline
print("User \(userStatus.userId) is online: \(isOnline)")
}
}

NCSubscribeUserOnlineStatus properties:

PropertyTypeDescription
userIdNSStringUser ID
detailsNSArrayPer-platform online status
isOnlineBOOLYES if online on any platform