Chat in a group channel
In a group channel, you can have both 1-to-1 chat and 1-to-N chats through the SBUGroupChannelViewController
class. There are two types of group channel based on whether a user needs an invitation to join: private and public. UIKit also provides a Supergroup channel to facilitate a more stable chat environment for a larger number of users.
UIKit supports plain text messages, file messages, and media content such as photos and videos to be sent in group channels. Once delivered, those messages are grouped by time in minutes and date in the channel. If the permission to access photo library is limited when sending a file message containing photos and videos, the SBUSelectablePhotoViewController
class is used.
To learn more about the channels, go to the Channel types page in Chat SDK.
Features
Refer to the table below to see what features there are in SBUGroupChannelViewController
.
Feature | Description |
---|---|
Send message | Allows users to send messages, images, videos, and files in the message input view. |
Notify new messages | Displays a push notification when receiving a new message. |
Show last seen time | Shows the timestamp of when a member read the last message in the channel. This function is only available in 1-to-1 chat channels. |
Show message send status | Displays the send status of a message as either successful, failed, or sending. |
Show delivery receipt | Displays the delivery receipt status of a message in the channel. |
Show read receipt | Displays the read receipt status of a message in the channel. |
Show typing indicator | Displays whether another user in the channel is typing a message. |
Copy message | Allows users to copy a text message. |
Edit message | Allows users to edit their own messages. |
Delete message | Allows users to delete their own messages. |
Retry to send a message | Allows users to try to resend a failed message. |
Mention a user in a message | Allows users to mention channel members in a message. |
Channel settings menu | Navigates to the group channel settings view from the navigation bar. |
Go back to previous view | Returns the user to the previous view from the navigation bar. |
Show channel status banner | Displays the channel status in the top banner of the view. By default, the banner only shows the frozen state of the channel. |
Initialize
You can start building a channel-based chat service by calling the SBUGroupChannelViewController
class. It uses SBUAdminMessageCell
, SBUUserMessageCell
, and SBUFileMessageCell
classes to display the messages in the channel. It's also in charge of auto connecting to Sendbird server and internal functions to handle core features of UIKit such as pagination and real-time updates.
Note: You can initialize
SBUGroupChannelViewController
by setting the value ofChannelURL
orGroupChannel
. If you've already createdMessageListParams
, we recommend you to set all of the objects together. Otherwise, the default values are used for these classes.
You can start building a chat in group channel view through the SBUGroupChannelViewController
class. Use either the init(channelURL:messageListParams:)
or init(channel:messageListParams:))
initializer to create the instance and display the view.
Usage
The following items are key elements of SBUGroupChannelViewController
that are used to create a functional chat in group channel view.
Module components
In the SBUGroupChannelViewController
class, SBUGroupChannelModule
and its components are used to create and display the group channel view. The module is composed of three components: HeaderComponent
,ListComponent
, and InputComponent
.
Property name | Type | Default value |
---|---|---|
HeaderComponent | SBUGroupChannelModule.Header | SBUModuleSet.GroupChannelModule.HeaderComponent |
ListComponent | SBUGroupChannelModule.List | SBUModuleSet.GroupChannelModule.ListComponent |
InputComponent | SBUGroupChannelModule.Input | SBUModuleSet.GroupChannelModule.InputComponent |
When the loadView()
method of the view controller is called, the module components get added to the view in the setupView()
method of the Sendbird UIKit's view life cycle. Then, the configure
method of each module component is called to set the property values and display the view.
HeaderComponent
The HeaderComponent
includes a channel title, a back button that takes the user to the previous view, and a button that takes the user to the channel settings view. Each property corresponds to the elements in the navigation bar of the view controller.
The following table shows the parameters of the configure
method of the HeaderComponent
.
Parameter name | Type |
---|---|
delegate | SBUGroupChannelModuleHeaderDelegate |
theme | SBUChannelTheme |
Note: To learn more about the delegate and the properties of the
HeaderComponent
for group channels, go to the API reference page.
ListComponent
The ListComponent
shows a list of all the messages in the group channel. The following table shows the parameters of the configure
method of the ListComponent
.
Parameter name | Type |
---|---|
delegate | SBUGroupChannelModuleListDelegate |
dataSource | SBUGroupChannelModuleListDataSource |
theme | SBUChannelTheme |
Note: To learn more about the delegate, data source, and the properties of the
ListComponent
for group channels, go to the API reference page.
InputComponent
The InputComponent
shows the input field of a channel where users can type and send their messages. The following table shows the parameters of the configure
method of the InputComponent
.
Parameter name | Type |
---|---|
delegate | SBUGroupChannelModuleInputDelegate |
dataSource | SBUGroupChannelModuleInputDataSource |
theme | SBUChannelTheme |
Note: To learn more about the delegate, data source, and the properties of the
InputComponent
for group channels, go to the API reference page.
View model
The SBUGroupChannelViewController
class uses a view model that is a type of the SBUGroupChannelViewModel
class. The view model is created in the initializer of the view controller through the createViewModel(channel:channelURL:messageListParams:startingPoint:showIndicator:)
method. When the view model object is created, it retrieves message list data from Chat SDK to the view controller and updates the view through the baseChannelViewModel(_:didReceiveNewMessage:forChannel:)
event.
Note: If the value of
channel
orchannelURL
is invalid, the view model cannot retrieve the message list.
The following table shows the parameters of the createViewModel
method.
Parameter name | Type | Description |
---|---|---|
channel | BaseChannel | Specifies the channel value. (Default: |
channelURL | String | Specifies the URL of the channel. You can find this URL from the |
messageListParams | MessageListParams | Specifies a parameter needed to retrieve message list data from Chat SDK. (Default: |
startingPoint | Int64 | Specifies the timestamp value that marks the starting point of the message list. (Default: |
showIndicator | Bool | Determines whether to show the loading indicator when fetching channel messages. (Default: |
Message order
In the SBUGroupChannelViewModel
message list, known as fullMessageList
, messages are organized based on their sending status and their arrival time.
In this layout, older messages are positioned at the top of the list, while the most recent messages appear at the bottom. As new messages are successfully sent and received, they are displayed at the lower end of the list, just above any messages that are pending or have failed. Below these, you'll find any messages that are still pending or have failed to send. These are ordered based on their original sending time. Furthermore, if the bubble typing indicator
feature is enabled for your channel, this indicator will be consistently shown at the very bottom of the message list, regardless of the statuses of other messages. This layout prioritizes the visibility of new, successful messages while maintaining awareness of pending and failed messages, as well as ongoing typing activity.
Note: To learn more about the methods and the event delegates of the view model, go to this API reference page.
SBUBaseChannelViewController properties
The SBUBaseChannelViewController
class provides properties and methods that are used in both group channels and open channels. To learn more about these properties, go to the API reference page.
Customization
You can customize the chat UI of a group channel by making changes to the following parts:
Message cell
You can customize the message cells by inheriting different message cells as shown in the list below. Each of the following message cell inherits SBUContentBaseMessageCell
.
SBUUserMessageCell
SBUFileMessageCell
SBUMultipleFilesMessageCell
SBUAdminMessageCell
SBUTypingIndicatorMessageCell
To customize the message cells listed above, you can override each message class. You can selectively override the components, methods, or add custom views into the existing view hierarchy.
The below is an image of the view hierarchy of SBUContentBaseMessageCell
.
The code below shows an example of adding a UILabel view into SBUUserMessageCell
.
View controller
There are two ways to customize the view controller: change the default view controller value in the global SBUViewControllerSet
class or set a single-use custom view controller in the key function.
The custom view controller in the code below is used in the following customization examples.
- Change the value of
SBUViewControllerSet.GroupChannelViewController
.
- Use a one-time custom view controller in the chat in group channel view.
Module component
There are two ways to customize a module component: change the default component value in the global SBUModuleSet.GroupChannelModule
class or set a single-use custom module component in the view controller. If there is no set custom value in the loadView()
method of SBUGroupChannelViewController
, the module components will use the default values.
The custom header component in the code below is used in the following customization examples.
- Change the value of
SBUModuleSet.GroupChannelModule.HeaderComponent
.
- Change the module component in
SBUGroupChannelViewController
.
Note: To learn more about the methods of
SBUGroupChannelModule
, go to the API reference page.
View model
In order to use a customized view model or customize the existing view model's event delegate, you must override the view controller.
- Use a customized View model.
- Customize the view model's event delegate.