Skip to main content

Get message history

Retrieve message history from the local database or from the remote server.

Prerequisites

To fetch remote messages for direct and group channels, enable the Cloud Message Storage service for your App Key in the Console.

Get local messages

Use BaseChannel.createMessagesQuery() (static companion method) to create a paginated query for local messages.

Parameters (MessagesQueryParams)

ParameterTypeDescription
channelIdentifierChannelIdentifierThe target channel identifier (required).
pageSizeIntNumber of messages per page. Default: 20.
isAscendingBooleanfalse (default): newer-to-older. true: older-to-newer.
messageTypesList<String>?Filter by message object names. null (default): all types.
kotlin
val channel = GroupChannel("groupId")

val params = MessagesQueryParams(channel.channelIdentifier).apply {
pageSize = 20
isAscending = false // Fetch older messages
}

val query = BaseChannel.createMessagesQuery(params)

query.loadNextPage { messages, error ->
if (error == null && messages != null) {
messages.forEach { message ->
println("Message: ${message.content}")
}
// Load more pages if available
if (query.hasMore) {
query.loadNextPage { nextMessages, nextError ->
// Handle next page
}
}
}
}

Get a message by ID

Use BaseChannel.getMessageById() to retrieve a specific message by its server UID or local client ID.

kotlin
// Get by server UID (messageId)
BaseChannel.getMessageById(GetMessageByIdParams(messageId = "C3GC-8VAA-LJQ4-TPPM")) { message, error ->
if (error == null && message != null) {
println("Message content: ${message.content}")
}
}

// Get by local client message ID (messageClientId)
BaseChannel.getMessageById(GetMessageByIdParams(messageClientId = 12345)) { message, error ->
if (error == null && message != null) {
println("Message content: ${message.content}")
}
}

Get messages around a time point

Use channel.getMessagesAroundTime() to retrieve messages before and after a specific timestamp.

kotlin
val params = GetMessagesAroundTimeParams(
sentTime = targetMessage.sentTime,
beforeCount = 10,
afterCount = 10
)

channel.getMessagesAroundTime(params) { messages, error ->
if (error == null && messages != null) {
// Messages from 10 before to 10 after the target time
}
}
tip
  • Whether users can access group messages from before they joined depends on the Console setting. Turn on Enable pre-join history access by new member under Chat > Chat settings > Group Channels on the Chat settings page.
  • By default, users must be group members to fetch group history. To allow non-members, turn off Restrict chat history access to members in the same location.

Internal parameters (reference only)

The internal remote history retrieval method accepts the following parameters directly (not wrapped in a Params class):

ParameterTypeDescription
dateTimeLongStart timestamp (ms). 0 fetches the latest messages. Default: 0.
countIntNumber of messages per page. Range: (0–100]. Default: 20.
isAscendingBooleanfalse (default): older messages first. true: newer messages first.
includeLocalExistMessageBooleantrue: include messages already in local DB. false (default): skip local duplicates.
info

For history retrieval with the currently published Android API surface, use the public query APIs documented above, such as BaseChannel.createMessagesQuery() and channel.getMessagesAroundTime().