Swift Native Message Actions API Reference for Realtime Apps
Note
The PubNub Swift 3.0 SDK contains many significant changes from the 2.x SDK, including breaking changes. Please refer to the PubNub Swift 3.0 Migration Guide for more details.
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 action events on that channel. They can also fetch past message actions from PubNub Storage independently or when they fetch original messages.
Add Message Action
Requires Storage & Playback add-on Requires that the Storage & Playback add-on is enabled for your key. See this page on enabling add-on features on your keys:
https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-
Description
Add an action on a published message
. Returns the added action in the response.
Method(s)
To Add a Message Action you can use the following method(s) in the Swift SDK:
addMessageAction( channel: String, type actionType: String, value: String, messageTimetoken: Timetoken, custom requestConfig: RequestConfiguration = RequestConfiguration(), completion: ((Result<PubNubMessageAction, Error>) -> Void)?)
Parameter Type Required Defaults Description channel
String Yes The name of the channel type
String Yes The Message Action's type value
String Yes The Message Action's value messageTimetoken
Timetoken Yes The publish timetoken of a parent message. custom
RequestConfiguration Optional RequestConfiguration()
An object that allows for per-request customization of PubNub Configuration or Network Session completion
((Result<PubNubMessageAction, Error>) -> Void)? Optional nil
The async Result
of the method call
Completion Handler Result
Success The
PubNubMessageAction
that was added.public protocol PubNubMessageAction { /// The type of action var actionType: String { get } /// The value that corresponds to the type var actionValue: String { get } /// The `Timetoken` for this specific action var actionTimetoken: Timetoken { get } /// The `Timetoken` for the message this action relates to var messageTimetoken: Timetoken { get } /// The publisher of the message action var publisher: String { get } /// The channel the action (and message) were sent on var channel: String { get } }
Failure An
Error
describing the failure.
Basic Usage
pubnub.addMessageAction(
channel: "my_channel",
type: "reaction",
value: "smiley_face",
messageTimetoken: 15_610_547_826_969_050
) { result in
switch result {
case let .success(messageAction):
print("Action type \(action.actionType) added at \(action.actionTimetoken) with value \(action.actionValue)")
print("`\(action.publisher)` added action onto message \(action.messageTimetoken) on `\(action.channel)`")
case let .failure(error):
print("Error from failed response: \(error.localizedDescription)")
}
})
Remove Message Action
Requires Storage & Playback add-on Requires that the Storage & Playback add-on is enabled for your key. See this page on enabling add-on features on your keys:
https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-
Description
Remove a previously added action on a published message.
Method(s)
To Remove a Message Action you can use the following method(s) in the Swift SDK:
removeMessageActions( channel: String, message timetoken: Timetoken, action actionTimetoken: Timetoken, custom requestConfig: RequestConfiguration = RequestConfiguration(), completion: ((Result<(channel: String, message: Timetoken, action: Timetoken), Error>) -> Void)?)
Parameter Type Required Defaults Description channel
String Yes The name of the channel. message
Timetoken Yes The publish timetoken of a parent message. action
Timetoken Yes The action timetoken of a message action to be removed. custom
RequestConfiguration Optional RequestConfiguration()
An object that allows for per-request customization of PubNub Configuration or Network Session completion
((Result<(channel: String, message: Timetoken, action: Timetoken), Error>) -> Void)? Optional nil
The async Result
of the method call
Completion Handler Result
- Success A
Tuple
containing the channel, messageTimetoken
, and actionTimetoken
of the action that was removed. - Failure An
Error
describing the failure.
Basic Usage
pubnub.removeMessageActions(
channel: "my_channel",
message: 15_610_547_826_969_050,
action: 15_610_547_826_970_050
) { result in
switch result {
case let .success(response):
print("Action published at \(response.action) was removed from message \(response.message) on channel \(response.channel)")
case let .failure(error):
print("Error from failed response: \(error.localizedDescription)")
}
})
Get Message Actions
Requires Storage & Playback add-on Requires that the Storage & Playback add-on is enabled for your key. See this page on enabling add-on features on your keys:
https://support.pubnub.com/hc/en-us/articles/360051974791-How-do-I-enable-add-on-features-for-my-keys-
Description
Get a list of message actions in a channel
. Returns a list of actions in the response.
Truncated response
Number of message actions in the response may be truncated when internal limits are hit. If the response is truncated, a more
property will be returned with additional parameters. Send iterative calls to storage adjusting the parameters to fetch more message actions.
Method(s)
To Get Message Actions you can use the following method(s) in the Swift SDK:
fetchMessageActions( channel: String, page: PubNubBoundedPage? = PubNubBoundedPageBase(), custom requestConfig: RequestConfiguration = RequestConfiguration(), completion: ((Result<(actions: [PubNubMessageAction], next: PubNubBoundedPage?), Error>) -> Void)?)
Parameter Type Required Defaults Description channel
String Yes The name of the channel. page
PubNubBoundedPage? Optional PubNubBoundedPageBase()
The paging object used for pagination custom
RequestConfiguration Optional RequestConfiguration()
An object that allows for per-request customization of PubNub Configuration or Network Session completion
((Result<(channel: String, message: Timetoken, action: Timetoken), Error>) -> Void)? Optional nil
The async Result
of the method call
Completion Handler Result
Success An
Array
ofPubNubMessageAction
for the request channel, and the next requestPubNubBoundedPage
(if one exists).public protocol PubNubMessageAction { /// The type of action var actionType: String { get } /// The value that corresponds to the type var actionValue: String { get } /// The `Timetoken` for this specific action var actionTimetoken: Timetoken { get } /// The `Timetoken` for the message this action relates to var messageTimetoken: Timetoken { get } /// The publisher of the message action var publisher: String { get } /// The channel the action (and message) were sent on var channel: String { get } }
public protocol PubNubBoundedPage { /// The start value for the next set of remote data var start: Timetoken? { get } /// The bounded end value that will be eventually fetched to var end: Timetoken? { get } /// The previous limiting value (if any) var limit: Int? { get } }
Failure An
Error
describing the failure.
Basic Usage
pubnub.fetchMessageActions(
channel: String,
) { result in
switch result {
case let .success(response):
print("The actions for the channel \(response.actions)")
if let nextPage = response.next {
print("The next page used for pagination: \(nextPage)")
}
case let .failure(error):
print("Error from failed response: \(error.localizedDescription)")
}
})