brainCloud 5.7 is on its way!
This release adds an improved Team Dashboard, Self-Service Delete & Branding, Node Resource Monitoring, Online Matchmaking Improvements, and more. It also readies the platform for MongoDB 8.
Compatibility Notes
All brainCloud releases emphasize preserving stability and backward compatibility for existing apps. That said, developers should be aware of the following changes:
Lobbies
Join In Progress change
- The system no longer allows additional members to be added to a lobby while it is in the STARTING state.
- If Join In Progress is enabled, new members can join once the lobby moves to the ACTIVE state.
- This change addresses a race condition whereby it was possible for the lobby members to have "readied up" but for a new lobby member to be joined to the lobby in a non-ready state before the associated room instance was completely launched.
Release Highlights
Improved Team Dashboard
We have reworked the Team Dashboard to make it more useful (and prettier!), especially for teams with multiple apps.
Improvements include:
- New Live Apps widget - displays Daily Active Users, New Users, Revenue, and Purchase Count charts for the last 14 days
- New Recently Active Members widget - so you know who has been online in the system recently
Plus improvements to the look-and-feel of the existing widgets.
Self-Service Branding
As a backend service, brainCloud provides very little UI for end-users. That said, we do provide a few web screens to:
- Verify email addresses
- Enable password resets
- Unsubscribe from tournament emails
The existing screens were functional but plain. brainCloud’s development community has been wishing for the ability to customize the look-and-feel of those screens.
And in 5.7 you get your wish! We have re-designed the screens and tied them to a new Self-Service Branding feature that controls their look and feel. Using the new system, developers have a lot more control over the screens, including:
- Separate studio and app branding
- Control of header, background, font, and button colors
- Multiple header layout options
- Add custom buttons to screens
- Optional footer section - with links to privacy page, support, etc.
- And more…
The new App > Design > Self-Service > Branding page customizes this look and feel and features a Live Preview so developers can see how their choices will look in Mobile or Desktop browsers.
Self-Service Account Deletion
We built the branding feature (above) so that we could build this feature properly! 😀
Some app stores (
Scenario 1 - For email-based accounts (fully automated)
The Self-Service Account Deletion feature provides an URL for end-users to delete their accounts.
To delete their accounts, end-users will:
- Navigate to the provided self-service deletion URL
- Provide the email address associated with their account
- The system will then send an email(s) to that address, with a link to click to delete their account. Note that multiple emails will be sent if there is more than one account associated with an email (which can happen with contact emails).
- The user receives the deletion email and clicks the link. Note that the link for account deletion is valid for a limited period of time ← set to 2 hours currently.
- The user follows the prompts to complete the deletion of their account.
Developers can enable and configure this feature from the new App > Design > Self-Service > Delete Account page.
A few important notes:
- The template used to create the email sent to the user is customized with the other Sendgrid email templates, on the App > Design > Authentication > Email Authentication page. Instructions for creating a template can be found here.
- CSRs can also manually trigger the sending of the deletion email to users directly from the Portal. Choose “Send Deletion Email…” from the Action menu of the user's User Summary page.
Scenario 2 - API-based Automation (For non-Email Identity Types)
Devs can use this feature and associated APIs to build a custom site for deleting accounts.
The use case would look something like:
- The custom site would prompt the user for their login info, and then, using brainCloud APIs, log in and retrieve the
profileId
of the associated account. - The site would then call the new
User.SysCreateSelfServiceDeletionUrlForUser()
method to create a deletion URL. - The site would then redirect the end-user to that URL so the user could complete the deletion steps.
Scenario 3 - Manual Via CSR (Customer Support Representative)
CSRs can support the deletion requirements via the new Design Portal features.
The use case looks something like this:
- A form or customer service application prompts the user for the information to identify their account.
- A CSR looks up the user’s account and navigates to the User Summary page of that user.
- The CSR then clicks the Copy Deletion URL… button on the action menu to create and copy the deletion URL for that user.
- The CSR then sends the end-user a response, with the URL to click on for the user to delete their account.
Node Resource Monitoring
The Server Monitor now allows developers to monitor the resource utilization of individual nodes. Including these metrics marks the Server Monitor’s graduation from [Beta] to official release!
Clicking on a node and selecting the Usage tab displays the following charts:
- Containers - the number of containers running on the node
- CPU - the % cpu utilization of the node (across all containers)
- Memory - the % memory utilization of the node (across all containers)
- Storage - the % storage used by the node
The CPU, Memory, and Storage metrics are retrieved from our New Relic monitoring system. There can be an initial lag of up to 5 minutes for newly launched servers in retrieving these metrics. The Container Count metric is received directly from our Room Server Framework via RTT. Still, there is no history, so the data is retrieved and available only while the Server Monitor screen is displayed.
Additional Improvements
brainCloud 5.7 includes a ton of other improvements as well. These include:
App Alerts
- We have added a new alert to warn users when their Tournament auto-claim settings are out of sync with the required compatibility flag.
Builder API
- The Builder API has been enhanced to support new Dynamic API Keys, which are dynamically created and are good for only 16 hours
- Dynamic API keys can be created as part of the new SSO functionality that we have built into the platform.
Edgegap Hosting
- The control of the
skip_telemetry
option is now configurable by devs. Previously, it was hard-codedtrue
for faster server launches (but at the expense of perfect placement of servers).
- The control of the
GameLift Hosting
- There is a new AWS EventBridge option for more scalable reporting of hosted server status. Configuring this is optional, but highly recommended for production deployments.
Item Catalog Images (via API)
- New API methods have been added to allow Item Catalog images to be set via Global or User Files. See the API section for more details.
Online Matchmaking
- Has improved support for adding groups of players to a lobby
- Previously, all players would be placed on the same team if a team was specified in the matchmaking call, but if not, the provided players would be dispersed between the available teams.
- The extension allows developers to ensure players are placed together on a team without having to specify which team.
- See the API section for more details.
Portal Changes
This release adds some significant quality-of-life improvements to the Portal.
Live Lock
We have made the live lock more convenient. Devs can now drag the app’s name instead of re-typing it into the confirmation field.
Redemption Codes
We have added additional functionality and polish to the design and monitoring Redemption Code screens:
App > Design > Marketplace > Redemption Codes
- Now includes a new Search option
- The list now shows the number of redemptions redeemed - instead of the number available for redemption…. (which is a bit more consistent when showing expired codes)
App > Global > Marketplace > Redemption Codes
- If there has been no activity in the past 30 days, the Campaign Activity widget now displays a new [Show the most recent activity] button, which automatically adjusts the chart's date settings when clicked.
Personalized Pricing
The User > Marketplace > Personalized Pricing screen has been completely reworked to help developers understand which prices a user sees and why.
This greatly aids in understanding and debugging automated promotions.
Additional Improvements
The following additional portal improvements have been made:
Login, Registration, and Recovery
- The screens for user login, new user registration, and account recovery have been improved
Team > Manage > Apps
- The [+ New App] dialog has been redesigned to make selecting supported platforms easier.
Platforms are now separated into the following categories:
- Mobile & Web
- Desktop & Console
- Legacy
Team > Manage > Members
- The Builder API key permission has changed somewhat. It now indicates whether the team member has permission to create and use Static API Keys. The label has been adjusted to reflect this change.
Team > Setup > Team Info
- The Builder API access permissions have been slightly refactored. There are now separate permissions for general access to the Builder API and for allowing the use of static keys.
App > Design > Admin Tools > Deployment
- This includes a new option for preserving self-service branding during deployment. Useful if the branding for development and production versions of apps is different (for testing purposes)
App > Design > Notifications > Settings
- Now supports deleting Apple Push Notification certificates
App > Global > Leaderboards > Leaderboards
- The leaderboard entry preview blade shows the user’s profile image, if available.
App > Design > Self-Service
- New section for setting Self-Service feature options. See feature description in the Release Highlights section.
User > User Browser, Search
- Searching by email now searches for emails in the Contact Email field and Profile Identities, in addition to the Email Identity
User > Summary > User Summary
- Screen action buttons have been reorganized under a new Action menu
Includes new actions for the new Self-Service Account Deletion feature:
- Send Deletion Email…
- Copy Deletion URL…
User > Gamification > Milestones
- Refactored and separated from the old Milestones & Quests screen
- Supports new filtering and searching options
User > Gamification > Quests
- Refactored and separated from the old Milestones & Quests screen
- Supports new filtering and searching options
API Changes
The following calls have been added to the brainCloud API:
ItemCatalog
Added two new methods (cloud code & S2S-only) for copying image files to the item catalog programmatically:
SysCopyItemImageFromGlobalFile()
- copies (or moves) a file from Global Files to be used as the image for an Item Catalog entry.SysCopyItemImageFromUserFile()
- copies (or moves) a file from User Files to be used as the image for an Item Catalog entry.
Lobby
- The lobby matchmaking APIs have been extended to support additional options for team selection when dealing with groups of players (as specified using the
otherUserCxIds
parameter). This new behaviour is controlled by new special “team names” that can be passed into the
teamCode
parameters of the API calls:“team1”
- all players will be assigned to the specified team (existing functionality)““
ornull
- players will be individually (and randomly) assigned to teams that have [x] Auto assign players enabled. Players are NOT guaranteed to be kept together on the same team. (existing functionality)“___”
(three underscores) - assign all provided players as a group to any team at random. Note that only teams with [x] Auto assign players enabled are considered. Players are kept together. (New functionality!)“___:team1,team2,…”
- attempt to join `team1`, attempt to join `team2`, etc. until the list is exhausted. Players are kept together. (New functionality!)
- The
FindLobby()
,FindLobbyWithPingData()
,FindOrCreateLobby()
,FindOrCreateLobbyWithPingData()
,JoinLobby()
,JoinLobbyWithPingData()
,SysAddMember()
, andSysAddMemberWithPingData()
have all been extended to accept these new team codes
- The lobby matchmaking APIs have been extended to support additional options for team selection when dealing with groups of players (as specified using the
User
Added a new S2S call for creating the self-service deletion URL for a user:
SysCreateSelfServiceDeletionUrlForUser()
Client Libraries
All Libraries
- Increased the amount of time the client library waits for a CONNECT message from the Relay Server before resending its connection request. Timeout is now 2 seconds (up from 0.5 seconds).
Unity, C#, and Godot
- Fixed bug that caused empty notification tokens to be saved if an end-user denied push notifications
Unreal
- Fixed issue where the WebSocket object is not cleaned up properly on destroy
- Fixed issue with the OnRecv function passing in a reference to the json message, it is now passing a copy of that json message instead of a reference to account for a crash issue happening where the reference points to a null value on rare occasions.
- Fixed bug that caused empty notification tokens to be saved if an end-user denied push notifications (STILL IN PROGRESS)
C++
- Fixed bug that caused empty notification tokens to be saved if an end-user denied push notifications
Java
- Fixed bug that caused empty notification tokens to be saved if an end-user denied push notifications
JavaScript
- Fixed bug that caused empty notification tokens to be saved if an end-user denied push notifications
Objective-C
- Fixed bug that caused empty notification tokens to be saved if an end-user denied push notifications
Examples
- Invaders Demo greatly improved with Replay Functionality
Documentation and Tutorials
Documentation
- All the latest API additions and changes have been incorporated into our new doc site at docs.braincloudservers.com !
Tutorials
- A new Knowledge Base article discusses how to add a Replay System to your game using brainCloud Playback Streams. Find it here.