Message Reactions API for PubNub Dart SDK

Add or remove actions on published messages to build features like receipts, reactions, or to associate custom metadata to messages. Clients can subscribe to a channel to receive message reaction events on that channel. They can also fetch past message reactions from Message Persistence independently or when they fetch original messages.

Terminology

All message reactions in code are collectively called message reactions in the docs and the term applies both to reacting to a message (through emojis) and acting on a message (by deleting it).

Add Message Reaction

note
Requires Mobile Push Notifications add-on

This method requires that the Mobile Push Notifications add-on is enabled for your key in the Admin Portal. Read the support page on enabling add-on features on your keys.

This method adds a message reaction to a parent message. Parent message is a normal message identified by a combination of subscribeKey, channel and timetoken. Returns the added reaction in the response.

Parent message existence

Server doesn't validate if the parent message exists at the time of adding the message reaction. It does, however, check if you haven't already added this particular action to the parent message.

For a given parent message, there can be only one message reaction with type and value.

Method(s)

To Add a Message Reaction you can use the following method(s) in the Dart SDK:

pubnub.addMessageAction(
{String type,
String value,
String channel,
Timetoken timetoken,
Keyset? keyset,
String? using}
)
ParameterTypeRequiredDescription
typeStringYesType of message reaction.
valueStringYesValue of message reaction.
channelStringYesSpecifies channel name to publish message reactions to.
timetokenTimetokenYesThe publish timetoken of a parent message.
keysetKeysetOptionalOverride for the PubNub default keyset configuration.
usingStringOptionalKeyset name from the keysetStore to be used for this method call.

Basic Usage

  var result = await pubnub.addMessageAction(
type: 'reaction',
value: 'smiley',
channel: 'my_channel',
timetoken: Timetoken(15610547826969050));

Returns

The addMessageAction() operation returns a AddMessageActionResult which contains the following property:

Property NameTypeDescription
actionMessageActionAdded message reaction.

The MessageAction object contains the following properties:

Property NameTypeDescription
typeStringType of message reaction.
valueStringValue of message reaction.
actionTimetokenStringTimetoken assigned to added message reaction.
messageTimetokenStringTimetoken of message.
uuidStringUUID of sender.

Remove Message Reaction

note
Requires Mobile Push Notifications add-on

This method requires that the Mobile Push Notifications add-on is enabled for your key in the Admin Portal. Read the support page on enabling add-on features on your keys.

Remove a previously added action on a published message. Returns an empty response.

Method(s)

To Remove a Message Reaction you can use the following method(s) in the Dart SDK:

pubnub.deleteMessageAction(String channel,
{Timetoken messageTimetoken,
Timetoken actionTimetoken,
Keyset? keyset,
String? using})
ParameterTypeRequiredDescription
channelStringYesChannel the message was sent to.
messageTimetokenTimetokenYesPublish timetoken of the original message.
actionTimetokenTimetokenYesPublish timetoken of the message reaction to be removed.
keysetKeysetOptionalOverride for the PubNub default keyset configuration.
usingStringOptionalKeyset name from the keysetStore to be used for this method call.

Basic Usage

  var result = await pubnub.deleteMessageAction(
'my_channel', Timetoken(15610547826969050), Timetoken(15610547826969159));

Returns

The deleteMessageAction() operation returns a DeleteMessageActionResult which does not have actionable data.

Get Message Reactions

note
Requires Mobile Push Notifications add-on

This method requires that the Mobile Push Notifications add-on is enabled for your key in the Admin Portal. Read the support page on enabling add-on features on your keys.

Get a list of message reactions in a channel. Returns a list of actions sorted by the action's timetoken in ascending order.

Method(s)

To Get Message Reactions you can use the following method(s) in the Dart SDK:

pubnub.fetchMessageActions(
String channel,
{Timetoken? from,
Timetoken? to,
int? limit,
Keyset? keyset,
String? using})
ParameterTypeRequiredDefaultDescription
channelStringYesThe channel name.
fromTimetokenOptionalMessage Reaction timetoken denoting the start of the range requested (return values will be less than from).
toTimetokenOptionalMessage Reaction timetoken denoting the end of the range requested (return values will be greater than or equal to to).
limitintOptional100Specifies the number of actions to return in response. Default/Maximum is 100.
keysetKeysetOptionalOverride for the PubNub default keyset configuration.
usingStringOptionalKeyset name from the keysetStore to be used for this method call.

Basic Usage

  var result = await pubnub.fetchMessageActions('my_channel');

Response

{
"status": 200,
"data": [
{
"type": "reaction",
"value": "smiley_face",
"actionTimetoken": "15610547826970050",
"messageTimetoken": "15610547826969050",
"uuid": "terryterry69420"
}
],
"more": {
"url": "/v1/actions/sub-c-6ba5f838-6456-11e8-9307-eaaa55e2558c/channel/my_channel?start=15610547826970050&end=15645905639093361&limit=2",
"start": "15610547826970050",
"end": "15645905639093361",
show all 19 lines

Returns

The fetchMessageActions() operation returns a list of FetchMessageActionsResult object containing following properties:

Property NameTypeDescription
actionsList<MessageAction>List of message reactions.
moreActionsMoreActionPagination information.

The MessageAction has following properties:

Property NameTypeDescription
typeStringType of message reaction.
valueStringValue of message reaction.
actionTimetokenStringTimetoken assigned to added message reaction.
messageTimetokenStringTimetoken of message.
uuidStringUUID of sender.

The MoreAction has following properties:

Property NameTypeDescription
urlStringURL to fetch next page of message reactions.
startStringStart timetoken value for next page.
limitintLimit count for next page.

Other Examples

Fetch Message reactions with paging

// this loop continue fetching message reactions when next batch is available
var fetchMessageActionsResult = FetchMessageActionsResult(<MessageAction>[]);
var loopResult, from, to, limit;
do {
loopResult = await pubnub.fetchMessageActions('my_channel',
from: from, to: to, limit: limit);

fetchMessageActionsResult.actions.addAll(loopResult.actions);

if (loopResult.moreActions != null) {
var more = loopResult.moreActions;
from = Timetoken(BigInt.parse(more.start));
to = Timetoken(BigInt.parse(more.end));
limit = more.limit;
}
show all 17 lines
Last updated on