Sync channel status across devices
When the current user changes a channel's pin state or DND level on one device, the change is synchronized to their other devices in real time. Register an NCChannelHandler to receive these sync notifications.
Register the handler
- Swift
- Objective-C
swift
import NexconnChatSDK
final class MyChannelHandler: NSObject, ChannelHandler {}
let handler = MyChannelHandler()
NCEngine.addChannelHandler(identifier: "MY_CHANNEL_HANDLER", handler: handler)
// Remove when no longer needed
NCEngine.removeChannelHandler(forIdentifier: "MY_CHANNEL_HANDLER")
Objective C
[NCEngine addChannelHandlerWithIdentifier:@"MY_CHANNEL_HANDLER" handler:self];
// Remove when no longer needed
[NCEngine removeChannelHandlerForIdentifier:@"MY_CHANNEL_HANDLER"];
Implement NCChannelHandler
- Swift
- Objective-C
swift
import NexconnChatSDK
final class MyViewController: NSObject, ChannelHandler {
// Channel pin state changed on another device
func onChannelPinnedSync(_ event: ChannelPinnedSyncEvent) {
print("Channel \(event.channelIdentifier.channelId) pinned: \(event.isPinned)")
}
// Channel DND level changed on another device
func onChannelNoDisturbLevelSync(_ event: ChannelNoDisturbLevelSyncEvent) {
print("Channel \(event.channelIdentifier.channelId) DND level changed to: \(event.level.rawValue)")
}
// Remote channel list sync completed
func onRemoteChannelsSyncCompleted(_ event: RemoteChannelsSyncCompletedEvent) {
if event.error == nil {
print("Remote channels synced.")
}
}
// Channel status sync completed
func onChannelStatusSyncCompleted(_ event: ChannelStatusSyncCompletedEvent) {
if event.error == nil {
print("Channel status synced.")
}
}
}
Objective C
@interface MyViewController () <NCChannelHandler>
@end
@implementation MyViewController
// Channel pin state changed on another device
- (void)onChannelPinnedSync:(NCChannelPinnedSyncEvent *)event {
NSLog(@"Channel %@ pinned: %d on another device", event.channelIdentifier.channelId, event.isPinned);
}
// Channel DND level changed on another device
- (void)onChannelNoDisturbLevelSync:(NCChannelNoDisturbLevelSyncEvent *)event {
NSLog(@"Channel %@ DND level changed to: %ld", event.channelIdentifier.channelId, (long)event.level);
}
// Remote channel list sync completed
- (void)onRemoteChannelsSyncCompleted:(NCRemoteChannelsSyncCompletedEvent *)event {
if (event.error == nil) {
NSLog(@"Remote channels synced.");
}
}
// Channel status sync completed
- (void)onChannelStatusSyncCompleted:(NCChannelStatusSyncCompletedEvent *)event {
if (event.error == nil) {
NSLog(@"Channel status synced.");
}
}
@end
Callback reference
| Callback | Trigger |
|---|---|
onChannelPinnedSync: | Pin state changed on another device |
onChannelNoDisturbLevelSync: | DND level changed on another device |
onRemoteChannelsSyncCompleted: | Remote channel list sync completed |
onChannelStatusSyncCompleted: | Channel status sync completed |