This article was originally published at https://www.pubnub.com/docs/release-notes/2025/january
We're kicking off the year with quite a few interesting documentation changes.
We've revamped the keyset configuration experience for easier access, introduced message drafts in gaming chat SDKs, and added event-based decisions in Illuminate.
Plus, we've got new features in the client-side mute list, message reactions in the PHP SDK, and more intuitive advanced presence settings in the BizOps Workspace.
Let's dive into the details!
General 🛠️
New keyset configuration experience
Type: Enhancement
This month, we completely revamped the keyset creation process on the Admin Portal.
Creating an app and a set of keysets is one of the initial steps if you want to start exploring PubNub. These keysets enable secure and controlled access to PubNub's real-time messaging capabilities, ensuring that only authorized users can publish or subscribe to channels in your app.
Until now, when you created keysets, you often didn't even know what configuration they had until you stumbled upon an obstacle in your app and could not use features like Presence or App Context. Only then did you explore the keyset's configuration and look for proper setup options.
Until now, keysets were created with a default configuration that turned off most options. We decided to expose keyset configuration more and let you make a deliberate decision about which configuration option to enable at the very initial step of keyset creation.
After creating a keyset, you can still return to the Admin Portal and change your mind about enabled features.
We hope this change will let you spend less time on configuration and makes it easier for you to get started quickly with PubNub.
Keyset number limit
Type: Adjustment
This month we also worked on updating our policy regarding keyset access to free accounts.
For optimization reasons, we decided to limit the number of keysets you can have at once on a free account to a maximum of 3.
If your account exceeds this limit, you must delete existing keysets to create new ones.
This change is effective as of February 3.
Whitelisting IPs
Type: Improvement
Following your feedback, we updated the docs to include information on how you can allow traffic to specific domains (and subdomains) associated with PubNub (e.g., *.pubnub.com
, *.pndsn.com
) if your firewall blocks them.
You can typically whitelist domains by configuring your firewall or network settings to allow traffic to and from those domain names.
However, suppose your firewall system or network configuration does not support domain-based rules and requires IP addresses instead. In that case, you can contact PubNub support to get the complete list of PubNub Network IP addresses for whitelisting.
This option is available only for customers on paid plans.
Logging
Type: Improvement
Following another round of feedback, we summarized information on how PubNub lets you monitor real-time activities and diagnose issues effectively in your apps by configuring logging for your apps.
Most PubNub SDKs provide configuration options to enable and control the level of logging output.
Read the Logging document for details.
Custom domains
Type: Improvement
There is a number of reasons for which you might want to have your own domain name for your PubNub-based apps, including unique branding, compliance and control, or improved traffic management.
PubNub lets paid customers set up custom application domain names to access PubNub’s real-time messaging infrastructure instead of the default PubNub endpoint ps.pndsn.com
.
For details on the process, refer to this instruction.
SDKs 📦
Message drafts in gaming chat SDKs
Type: New feature
This month brought another round of support for message drafts in Chat SDKs by adding this functionality to our gaming SDKs: Unreal Chat SDK and Unity Chat SDK.
- Unreal
- Unity
// Assuming you have a valid UPubnubChannel* pointer named Channel
// Define a configuration for the message draft if needed (using default configuration here)
FPubnubMessageDraftConfig DraftConfig; // This might include settings like initial content or behaviors
// Create a message draft from the channel with the specified configuration
UPubnubMessageDraft* MyMessageDraft = Channel->CreateMessageDraft(DraftConfig);
// Now MyMessageDraft can be used to build and send messages
MyMessageDraft->InsertText(0, "Hello there! Please review and confirm.");
MyMessageDraft->Send();
var messageDraft = channel.CreateMessageDraft();
This way, we can proudly announce that we now support message drafts in all Chat SDKs. 🎉
Client-side mute
Type: New feature
We added the client-side mute list to the Chat object in the Kotlin and JavaScript Chat SDKs. This new feature lets users mute other users on all channels and, as a result, stop seeing all messages and events originating from the muted users.
The new feature also lets you unmute muted users and retrieve a list of all users you muted on a given channel.
You also get the new configuration option (syncMutedUsers
parameter) to automatically synchronize the mute list across sessions and devices using a specific App Context User object.
- Kotlin
- JavaScript
import com.pubnub.chat.Chat
import com.pubnub.chat.config.ChatConfiguration
val chat = Chat.init(
ChatConfiguration(
publishKey = "demo",
subscribeKey = "demo",
userId = "myUniqueUserId"
)
)
val userToMute = "user_1905"
chat.mutedUsersManager.muteUser(userToMute).await()
import { Chat } from "@pubnub/chat"
const chat = Chat.init({
publishKey: "demo",
subscribeKey: "demo",
userId: "myUniqueUserId"
})
let userToMute = "user_1905"
await chat.mutedUsersManager.muteUser(userToMute)
Message reactions in PHP SDK
Type: New feature
Not to lag behind other SDKs, the PHP SDK finally supports the Message Reactions API, letting you add, remove, and get the list of reactions in a given channel.
$messageAction = new PNMessageAction([
"type" => "reaction",
"value" => "drooling_face",
"messageTimetoken" => $messageTimetoken // the timetoken of the message you want to add the reaction to
]);
$result = $pubnub->addMessageAction()
->channel("pizza_talks")
->messageAction($messageAction)
->sync();
Migration guide for JavaScript SDK
Type: Enhancement
Since some of our clients were having difficulty using our JavaScript SDK after migrating from v7 to v8, we decided to create a migration guide to list changes you need to perform in your app code for the SDK to work as expected.
These include removing the @types/pubnub
package dependency, as the types are now included within the SDK, and updating your import statements for PubNub types to align with the new endpoint groupings in version 8.0.0, such as AppContext.GetMembershipsParameters
, ensuring your code references are updated to reflect these structured namespaces.
Custom message type (follow-up)
Type: New feature
As a follow up, we added support for the custom message type parameter in the Ruby SDK in the following APIs: Publish, Subscribe, and Message Persistence.
pubnub.publish(
channel: 'my_channel',
message: { text: 'Hi!' },
custom_message_type: 'text-message'
) do |envelope|
puts envelope.status
end
Membership type (follow-up)
Type: New feature
To follow up on last month's updates in a few SDKs, we added support for the membership type in the Ruby SDK to let you categorize memberships more easily.
Changelogs in Chat SDKs
Type: Enhancement
Addressing documentation debt, the JavaScript Chat SDK, Kotlin Chat SDK, and Swift Chat SDK now include changelogs so you can track in detail what a new SDK version adds, removes, or updates.
Utility methods in Kotlin Chat SDK
Type: Enhancement
Kotlin Chat SDK now has a document listing utility methods for converting PubNub timetokens to and from dates, UNIX timestamps, and Instant objects. This enables you to display or manipulate date and time information in a human-readable format or align it with other systems.
BizOps Workspace 🏢
Advanced presence settings
Type: Enhancement
This month, we got down to the Presence Management section in BizOps Workspace.
We changed the UI by exposing the more advanced presence settings, which let you decide whether to track Subscribe Heartbeats or Presence Heartbeats on a given channel or channel pattern.
While Subscribe Heartbeats define how long the server considers the client alive for presence to ensure that the client does not lose its subscription to a channel due to inactivity, Presence Heartbeats specify how often the client will send heartbeat signals to the server, offering more granular control over client activity tracking than Subscribe Heartbeats.
While Presence Management lets you decide which of them you want to track (one of them is required for any presence rule to be enabled on a channel), you enable/configure both during your SDK initialization (through presenceTimeout
and heartbeatInterval
settings).
Illuminate 💡
Event-based Decisions
Type: New feature
Until now, you were only able to create Decisions in Illuminate based on aggregations (metrics), This means that a specified calculation, like max, average or sum of events, had to be reached to trigger an action in a Decision.
We now added an event trigger to actions, letting you trigger actions each time a given event is detected.
For example, a metric-based decision would activate dynamic pricing when the average number of orders is greater than 30, while in an event-based decision, coins can be given as soon as a participant joins an online show.
UI improvements in Decisions
Type: Enhancement
While working on event-based Decisions, we also tweaked the UI for Decisions, adding more clarification on why you must choose a Business Object to start with and let you more intuitively select publish and subscribe keys for an action (automated choice instead of manually pasting the values).
Top comments (0)