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)
| Parameter | Type | Description |
|---|---|---|
channelIdentifier | ChannelIdentifier | The target channel identifier (required). |
pageSize | Int | Number of messages per page. Default: 20. |
isAscending | Boolean | false (default): newer-to-older. true: older-to-newer. |
messageTypes | List<String>? | Filter by message object names. null (default): all types. |
- Kotlin
- Java
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
}
}
}
}
GroupChannel channel = new GroupChannel("groupId");
MessagesQueryParams params = new MessagesQueryParams(channel.getChannelIdentifier());
params.setPageSize(20);
params.setAscending(false);
MessagesQuery query = BaseChannel.createMessagesQuery(params);
query.loadNextPage((messages, error) -> {
if (error == null && messages != null) {
for (Message message : messages) {
System.out.println("Message: " + message.getContent());
}
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
- Java
// 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 by server UID (messageId)
GetMessageByIdParams params1 = new GetMessageByIdParams();
params1.setMessageId("C3GC-8VAA-LJQ4-TPPM");
BaseChannel.getMessageById(params1, (message, error) -> {
if (error == null && message != null) {
System.out.println("Message content: " + message.getContent());
}
});
// Get by local client message ID (messageClientId)
GetMessageByIdParams params2 = new GetMessageByIdParams();
params2.setMessageClientId(12345);
BaseChannel.getMessageById(params2, (message, error) -> {
if (error == null && message != null) {
System.out.println("Message content: " + message.getContent());
}
});
Get messages around a time point
Use channel.getMessagesAroundTime() to retrieve messages before and after a specific timestamp.
- Kotlin
- Java
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
}
}
GetMessagesAroundTimeParams params = new GetMessagesAroundTimeParams(
targetMessage.getSentTime(), 10, 10
);
channel.getMessagesAroundTime(params, (messages, error) -> {
if (error == null && messages != null) {
// Messages from 10 before to 10 after the target time
}
});
- 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):
| Parameter | Type | Description |
|---|---|---|
dateTime | Long | Start timestamp (ms). 0 fetches the latest messages. Default: 0. |
count | Int | Number of messages per page. Range: (0–100]. Default: 20. |
isAscending | Boolean | false (default): older messages first. true: newer messages first. |
includeLocalExistMessage | Boolean | true: include messages already in local DB. false (default): skip local duplicates. |
For history retrieval with the currently published Android API surface, use the public query APIs documented above, such as BaseChannel.createMessagesQuery() and channel.getMessagesAroundTime().