For messages sent by the current user, the delivery status is shown in the message cell.
Delivery status can be one of the following:
- pending send (when a message is queued to be sent)
- sending failed (when message sending has failed)
- sent (when a message is sent but not yet seen by any channel member)
- read (when a message is seen by 1 or more channel members)
For group channels with more than 2 members, the number of members who have seen the message is shown next to the read indicator.
|Pending send||Sending failed||Sent||Read||Read by many|
The diagram below shows how message delivery state changes.
When user taps send button in message composer, the message is saved to local database and queued for sending. When it happens, message appears in the channel in
pending send delivery status.
When message sending fails (e.g. because of missing Internet connection), a transition from
pending send to
sending failed state happens. In that case, delivery status gets hidden and error indicator appears.
If message sending has failed the long-pressing the message shows a pop-up with Resend action available. When user initiates message resend, the
sending failed ->
pending send transition happens.
When message sending succeeds, the state goes from
pending send to
sent and single checkmark appears. At this moment, channel members receive a web-socket event that the new message is posted to the channel which increments unread messages count for the channel.
When a channel member opens the channel / scrolls the channel to bottom and sees the message, the delivery state moves from
read and double-checkmark is shown.
Another case is when a new member is added to the channel. When it happens, all messages in the channel get
read by this member.
The transition happens when a message is read by a single channel member when this member is removed from the channel. In that case, message moves back to
read_events are turned OFF for the channel, delivery indicators are hidden.
To know more on how to customize delivery indicator UI check out Customize Message Delivery Status guide.