Skip to main content

Group channel event handler

Use GroupChannelHandler to receive group channel event callbacks — including group operations, profile changes, member info changes, membership requests, and multi-device sync.

For detailed group management features, see Manage a group channel.

Register and remove the handler

kotlin
// Register
NCEngine.addGroupChannelHandler("MY_GROUP_HANDLER", object : GroupChannelHandler {
override fun onGroupOperation(event: GroupOperationEvent) { /* ... */ }
})

// Remove
NCEngine.removeGroupChannelHandler("MY_GROUP_HANDLER")
tip

In managed group services, group operation SDK callbacks are also status notifications. Regardless of whether your app implements event listeners, the server syncs state to the SDK to keep local data current. These syncs count toward message distribution statistics.

Implement GroupChannelHandler

All methods have default empty implementations. Override only the callbacks you need.

kotlin
NCEngine.addGroupChannelHandler("MY_GROUP_HANDLER", object : GroupChannelHandler {

// Group operation (create, join, leave, kick, dismiss, etc.)
override fun onGroupOperation(event: GroupOperationEvent) {
// event.groupId — affected group ID
// event.operation — GroupOperation type
// event.operatorInfo — operator's member info (null for server-side kicks)
// event.groupInfo — group info (non-null only on CREATE)
// event.memberInfos — involved members
// event.operationTime — timestamp (ms)
println("Group ${event.groupId} operation: ${event.operation}")
}

// Group profile changed
override fun onGroupInfoChanged(event: GroupInfoChangedEvent) {
// event.operatorInfo — operator's member info
// event.fullGroupInfo — complete group info after change
// event.changedProperties — list of changed property name strings
// event.operationTime — timestamp (ms)
println("Changed properties: ${event.changedProperties}")
}

// Group member profile changed
override fun onGroupMemberInfoChanged(event: GroupMemberInfoChangedEvent) {
// event.groupId — group ID
// event.operatorInfo — operator's member info
// event.memberInfo — updated member profile
// event.operationTime — timestamp (ms)
println("Member ${event.memberInfo.userId} updated in group ${event.groupId}")
}

// Group membership request (join requests, invitations, and their outcomes)
override fun onGroupApplicationEvent(event: GroupApplicationEvent) {
// event.groupId — group ID
// event.type — GroupApplicationType
println("Group application: ${event.groupId}, type: ${event.type}")
}

// Group favorites multi-device sync
override fun onGroupFavoritesChangedSync(event: GroupFavoritesChangedSyncEvent) {
// event.groupId — group ID
// event.operation — GroupOperationType (ADD or REMOVE)
// event.userIds — affected user IDs
// event.operationTime — timestamp (ms)
println("Group favorites synced for group: ${event.groupId}")
}
})

Callback reference

CallbackParameter typeTrigger
onGroupOperationGroupOperationEventA group operation occurred (create, join, leave, kick, dismiss, etc.).
onGroupInfoChangedGroupInfoChangedEventGroup profile was updated. Check changedProperties to see which fields changed.
onGroupMemberInfoChangedGroupMemberInfoChangedEventA group member's profile was updated.
onGroupApplicationEventGroupApplicationEventA group join request or invitation changed status.
onGroupFavoritesChangedSyncGroupFavoritesChangedSyncEventGroup favorites changed on another device (multi-device sync).