/ SDKs / iOS
SDKs
Chat SDKs iOS v4
Chat SDKs iOS
Chat SDKs
iOS
Version 4

Add or remove a channel delegate

Copy link

To receive and retrieve information about events happening in channels from the Sendbird server, you can add a channel delegate with its UNIQUE_DELEGATE_ID by calling the add(_:identifier:) method. You should declare the UNIQUE_DELEGATE_ID when registering multiple concurrent delegates.

There are three types of channel delegates: BaseChannelDelegate, OpenChannelDelegate, and GroupChannelDelegate. The following tables show a list of events for each channel delegate.

If you want to stay informed of changes related to channels and notify the changes to different client apps, define and register multiple channel delegates to each view controller.


Channel event types

Copy link

List of BaseChannelDelegate events

Copy link
MethodInvoked whenNotified devices

channel(_:didReceive:)

A message has been received in a channel.

All devices where client apps with the channel are in the foreground, except the device that sent the message.

channel(_:didUpdate:)

A message has been updated in a channel.

All devices where client apps with the channel are in the foreground, except the device where the message was updated.

channel(_:didReceiveMention:)

A user has been mentioned in a message sent to a channel.

All devices of up to ten users mentioned in the channel, except the device that was used to mention other users.

channel(_:userWasMuted:)

A user in a channel has been muted.

All devices where client apps with the channel are in the foreground, including the device where the user was muted.

channel(_:userWasUnmuted:)

A user in a channel has been unmuted.

All devices where client apps with the channel are in the foreground, including the device where the user was unmuted.

channel(_:userWasBanned:)

A user has been banned from a channel.

All devices where client apps with the channel are in the foreground, including the device where the user was banned.

channel(_:userWasUnbanned:)

A user has been unbanned from a channel.

All devices where client apps with the channel are in the foreground, including the device where the user was unbanned.

channelWasFrozen(_:)

A channel has been frozen.

All devices where client apps with the channel are in the foreground, including the device where the channel was frozen.

channelWasUnfrozen(_:)

A channel has been unfrozen.

All devices where client apps with the channel are in the foreground, including the device where the channel was unfrozen.

channelWasChanged(_:)

For open channels, at least one of the following has been changed: name, cover image, data, custom type, operators, or other properties.

For group channels, at least one of the following properties has been changed: distinct status, push notification preferences, last message (except the silent admin message), unread message count, name, cover image, data, custom type, or other properties.

All devices that are connected to the changed channel, including the device where the channel was changed.

channelWasDeleted(_:channelType:)

A channel has been deleted.

All devices where client apps with the channel are in the foreground, including the device where the channel was deleted.

channel(_:messageWasDeleted:)

A message has been deleted in a channel.

All devices where client apps with the channel are in the foreground, including the device where the message was deleted.

channel(_:createdMetaData:)

Metadata has been created for a channel.

All devices where client apps with the channel are in the foreground, including the device where the metadata was created.

channel(_:updatedMetaData:)

Metadata of a channel has been updated.

All devices where client apps with the channel are in the foreground, including the device where the metadata was updated.

channel(_:deletedMetaDataKeys:)

Metadata of a channel has been deleted.

All devices where client apps with the channel are in the foreground, including the device where the metadata was deleted.

channel(_:createdMetaCounters:)

A metacounter has been created for a channel.

All devices where client apps with the channel are in the foreground, including the device where the metacounter was created.

channel(_:updatedMetaCounters:)

A metacounter of a channel has been updated.

All devices where client apps with the channel are in the foreground, including the device where the metacounter was updated.

channel(_:deletedMetaCountersKeys:)

A metacounter of a channel has been deleted.

All devices where client apps with the channel are in the foreground, including the device where the metacounter was deleted.

channelDidUpdateOperators(_:)

A user has been registered or removed as operators of a channel.

All devices where client apps with the channel are in the foreground, including the device of the user who was registered or removed as operators of the channel.

channel(_:didUpdateThreadInfo:)

A reply message has been created or deleted from a thread.

All devices where client apps with the channel are in the foreground, including devices of all users who are in the message thread, and except the device of the user who created or deleted the reply message.

channel(_:updatedReaction:)

A message reaction has been updated in a group channel.

All devices where client apps with the channel are in the foreground, including the device that reacted to the message.

List of OpenChannelDelegate events

Copy link
MethodInvoked whenNotified devices

channel(_:userDidEnter:)

A user has entered an open channel.

All devices where client apps with the channel are in the foreground, including the device that the user entered that channel.

channel(_:userDidExit:)

A participant has exited an open channel.

All devices where client apps with the channel are in the foreground, except the device that the user exited that channel.

channelDidChangeParticipantCount(_:)

The participant count of one or more open channels has changed.

All connected devices where client apps have the affected open channels in their channel list.

List of GroupChannelDelegate events

Copy link
MethodInvoked whenNotified devices

channelWasHidden(_:)

A group channel has been hidden from the list.

All devices of a user who hid the channel.

channel(_:didReceiveInvitation:inviter:)

A user has been invited to a group channel.

All devices where client apps with the channel are in the foreground, including the device of a user who received an invitation.

channel(_:didDeclineInvitation:inviter:)

A user has declined an invitation to a group channel.

All devices where client apps with the channel are in the foreground, including the device of a user who declined an invitation.

channel(_:userDidJoin:)

A user has joined a group channel.

All devices where client apps with the channel are in the foreground, including all devices of the user who joined the channel, and except the devices of users who haven't accepted invitations.

channel(_:userDidLeave:)

A user has left a group channel.

All devices where client apps with the channel are in the foreground, including all devices of the user who left the channel, and except the devices of users who haven't accepted invitations.

channelDidUpdateDeliveryStatus(_:)

A message has been delivered in a group channel.

All devices where client apps with the channel are in the foreground, and except the device where the message was marked as delivered and has invoked this event.

channelDidUpdateReadStatus(_:)

A user has read a specific unread message in a group channel.

All devices where client apps with the channel are in the foreground, including the device of users who have been invited to the channel, except the device of the user who has read all the messages.

channelDidUpdateTypingStatus(_:)

A user starts typing a message to a group channel.

All devices where client apps with the channel are in the foreground, except the devices of the users who are invited to the channel, and except all devices of the user who typed a message.

channelDidChangeMemberCount(_:)

One or more group channels' member count has changed.

All connected devices where client apps have the affected group channels in their channel list.

channelDidUpdatePinnedMessages(_:)

A message has been pinned or unpinned.

All connected devices where client apps have the affected group channels in their channel list.


Add a channel event delegate

Copy link

The following code shows how to add a channel delegate.

class CustomViewController: UIViewController, GroupChannelDelegate {
    func initViewController() {
        SendbirdChat.addChannelDelegate(self as GroupChannelDelegate, identifier: UNIQUE_DELEGATE_ID)
    }

    // Implement delegates here.
}

The following code samples show a full set of supported event callbacks with their parameters and how to add an open channel delegate and a group channel delegate to the unique SendbirdChat instance.

Open channel delegate

Copy link
// CustomViewController.swift
extension CustomViewController: OpenChannelDelegate {

    func channel(_ channel: BaseChannel, didReceive message: BaseMessage) { }

    func channel(_ channel: BaseChannel, didUpdate message: BaseMessage) { }

    func channel(_ channel: BaseChannel, didReceiveMention message: BaseMessage) { }

    func channel(_ channel: BaseChannel, userWasMuted user: RestrictedUser) { }

    func channel(_ channel: BaseChannel, userWasUnmuted user: User) { }

    func channel(_ channel: BaseChannel, userWasBanned user: RestrictedUser) { }

    func channel(_ channel: BaseChannel, userWasUnbanned user: User) { }

    func channelWasFrozen(_ channel: BaseChannel) { }

    func channelWasUnfrozen(_ channel: BaseChannel) { }

    func channelWasChanged(_ channel: BaseChannel) { }

    func channelWasDeleted(_ channelURL: String, channelType: ChannelType) { }

    func channel(_ channel: BaseChannel, messageWasDeleted messageId: Int64) { }

    func channel(_ channel: BaseChannel, createdMetaData: [String : String]?) { }

    func channel(_ channel: BaseChannel, updatedMetaData: [String : String]?) { }

    func channel(_ channel: BaseChannel, deletedMetaDataKeys: [String]?) { }

    func channel(_ channel: BaseChannel, createdMetaCounters: [String : Int]?) { }

    func channel(_ channel: BaseChannel, updatedMetaCounters: [String : Int]?) { }

    func channel(_ channel: BaseChannel, deletedMetaCountersKeys: [String]?) { }

    func channelDidUpdateOperators(_ channel: BaseChannel) { }

    func channel(_ channel: BaseChannel, didUpdateThreadInfo threadInfoUpdateEvent: ThreadInfoUpdateEvent) { }

    func channelDidChangeParticipantCount(_ channels: [OpenChannel]) { }

    func channel(_ channel: OpenChannel, userDidEnter user: User) { }

    func channel(_ channel: OpenChannel, userDidExit user: User) { }
}

Group channel delegate

Copy link
// CustomViewController.swift
extension CustomViewController: GroupChannelDelegate {

    func channel(_ channel: BaseChannel, didReceive message: BaseMessage) { }

    func channel(_ channel: BaseChannel, didUpdate message: BaseMessage) { }

    func channel(_ channel: BaseChannel, didReceiveMention message: BaseMessage) { }

    func channel(_ channel: BaseChannel, userWasMuted user: RestrictedUser) { }

    func channel(_ channel: BaseChannel, userWasUnmuted user: User) { }

    func channel(_ channel: BaseChannel, userWasBanned user: RestrictedUser) { }

    func channel(_ channel: BaseChannel, userWasUnbanned user: User) { }

    func channelWasFrozen(_ channel: BaseChannel) { }

    func channelWasUnfrozen(_ channel: BaseChannel) { }

    func channelWasChanged(_ channel: BaseChannel) { }

    func channelWasDeleted(_ channelURL: String, channelType: ChannelType) { }

    func channel(_ channel: BaseChannel, messageWasDeleted messageId: Int64) { }

    func channel(_ channel: BaseChannel, createdMetaData: [String : String]?) { }

    func channel(_ channel: BaseChannel, updatedMetaData: [String : String]?) { }

    func channel(_ channel: BaseChannel, deletedMetaDataKeys: [String]?) { }

    func channel(_ channel: BaseChannel, createdMetaCounters: [String : Int]?) { }

    func channel(_ channel: BaseChannel, updatedMetaCounters: [String : Int]?) { }

    func channel(_ channel: BaseChannel, deletedMetaCountersKeys: [String]?) { }

    func channel(_ channel: BaseChannel, updatedReaction reactionEvent: ReactionEvent) { }

    func channelDidUpdateOperators(_ channel: BaseChannel) { }

    func channel(_ channel: BaseChannel, didUpdateThreadInfo threadInfoUpdateEvent: ThreadInfoUpdateEvent) { }

    func channelDidUpdateReadStatus(_ channel: GroupChannel) { }

    func channelDidUpdateDeliveryStatus(_ channel: GroupChannel) { }

    func channelDidUpdateTypingStatus(_ channel: GroupChannel) { }

    func channelDidChangeMemberCount(_ channels: [GroupChannel]) { }

    func channel(_ channel: GroupChannel, didReceiveInvitation invitees: [User]?, inviter: User?) { }

    func channel(_ channel: GroupChannel, didDeclineInvitation invitee: User, inviter: User?) { }

    func channel(_ channel: GroupChannel, userDidJoin user: User) { }

    func channel(_ channel: GroupChannel, userDidLeave user: User) { }

    func channelWasHidden(_ channel: GroupChannel) { }

    func channelDidUpdatePinnedMessages(_ channel: GroupChannel) { }
}

Remove a channel event delegate

Copy link

The following code shows how to remove the channel delegate.

SendbirdChat.removeChannelDelegate(forIdentifier: UNIQUE_DELEGATE_ID)