Release 4.1 is live!
Note – you can also view the highlights in our new Roadmap!
Release Highlights
Group Leaderboards
Although brainCloud has long supported filtering leaderboards to group members, it has not supported true Group Leaderboards – where each entry in the leaderboard represent’s a Group’s (not a Player’s) score. Until now that is.
Now, when creating a leaderboard, you will first choose whether it is a Player or a Group Leaderboard.
Important notes regarding Group Leaderboards:
- Any member of a group can post a score on behalf of their team
- Post group scores via the new PostScoreToGroupLeaderboard() method. Additional new calls are described in the API section (below).
- Group Leaderboards cannot be used as the basis for Tournaments or Divisions
Note – we are considering adding Group Tournament and Division support in the future. If it is important to you, vote for it in our Roadmap!
Group Enhancements
We have made a bunch of enhancements to Groups and the Group APIs to go along with the new leaderboard support:
- Group Summary Data – we have added the concept of summary data to groups. This is an additional bit of custom JSON, associated with your groups, that can be read by non-members. This is useful when searching for groups with specific qualities and also when viewing group leaderboards ← the summary data gets returned in the leaderboard calls
- Enhanced Searching – when searching for groups, you can now include additional fields (
isOpenGroup
,updateAt
,createdAt
, andsummaryData
) in the filter and sorting clauses. - Get Random Groups – we have added a new API call for retrieving a random selection of groups that fit the specified criteria. See GetRandomGroupsMatching().
Voting Leaderboards
Since we were already in the Leaderboard code, we thought we would cover another customer request.
Voting Leaderboards are special leaderboards where the user doesn’t post their own score – rather, a player increments the score of another player. This makes the most sense for a CUMULATIVE
leaderboard (where posts from players increment a total). You can imagine using this system to allow players to vote on custom content created by other players – like custom maps layouts, etc.
Important notes:
- This technically isn’t a new type of leaderboard – it’s merely a new leaderboard call – PostScoreToLeaderboardOnBehalfOf(). Note that this call be made from Cloud Code only.
- The API does not prevent users from voting (i.e. posting on behalf of another user) multiple times. We leave that enforcement up to the app (if desired, of course).
Multi-Region Support
In V4 we introduced the ability to host Relay and Room Servers. When configuring your servers, you had the ability to choose which region to host them in.
This was a good start, but for global coverage developers would need to create individual server configurations for each of the regions they want to support. And if they’re using our matchmaking and lobby services, they would need to set up separate lobby configurations for each region as well.
Release 4.1 greatly improves things:
- You can now select multiple regions for a Room or Relay Server configuration in My Servers
- There are new Client APIs that allow you to retrieve the list of regions associated with lobby type(s), and calculate the latency (i.e. ping times) to them
- When launching a Room or Relay Server from a lobby, the Lobby Service will now automatically choose the best region for the members of that lobby
Dynamic Chat Channels
And last but not least, this release introduces a new type of chat channel.
Dynamic chat channels are special channels that any user can create and/or join. They exist only for as long as there is activity. Once the channel inactivity timeout expires (typically 30 days), the history (and the channel itself) are automatically deleted and cleaned up.
Note that developers need to manage the “membership” to the channels themselves. If a user of an app connects to a dynamic channel during a session, and you want them to reconnect the next time the app launches as well – you’ll need to save that information somewhere in your app (likely in a user entity).
Portal Changes
We have made the following portal changes:
Design
- Core App Info | Application IDs
- Renamed “Facebook Secret” to “Facebook App Secret” to better clarify what it is
- Core App Info | Admin Tools
- Added new options to the Deployment section to prevent overwriting the Lobbies and MyServers page settings. This is important because you very likely want to configure different performance + availability settings for dev vs. prod environments
- Cloud Code | My Servers
- Enhanced the Room Server and Relay Server configuration screens to support multiple regions
- Note that each region can use the default configuration settings (server size, # containers, etc); or you can override those settings on a region-by-region basis
- Leaderboards | Leaderboard Configs
- When creating a new Leaderboard config, you can now choose between Player and Group entry types (default is Player).
- Once the entry type has been set, it cannot be changed
- Tournaments and Division Templates cannot be enabled for Group leaderboards
- The entry type has been added to the Leaderboard Config list screen as well
Monitoring
- Global Monitoring | Leaderboards
- Have been enhanced to show the results of Group Leaderboards
- The column displayed now automatically change depending upon the leaderboard type being displayed
- Clicking on a group id will bring you to the group.
General
- DOCS menu
- Added a link to the new Roadmap site
API Changes
The following changes/additions have affected the brainCloud API:
- Chat Service
- SysCreateChannel() can be used to create a new dynamic chat channel. Cloud code only.
- SysDeleteChannel() is used to delete the specified chat channel. Cloud code only.
- Group Service
- [New!] CreateGroupWithSummaryData() allows the creation of a group with summary data.
- [New!] GetRandomGroupsMatching() returns a list of random groups that match the supplied criteria
- [New!] SysChangeGroupType() changes the group type of a group. Useful for leveling up the maximum number of players in a group. Cloud code only.
- [New!] UpdateGroupSummaryData() allows a member to update the summary data of the app. Note that the user must be the owner of the group; or the group’s data ACL must be set to “member”: 2 to perform the update.
- [Update] ReadGroup(), GetMyGroups(), ListGroupsPage(), and ListGroupsPageByOffset() will now return the
summaryData
associated with groups - [Update] Additional fields (
updatedAt
,createdAt
,isOpenGroup
, andsummaryData
) can now be used as filter and sort criteria in group calls.
- Leaderboard Service
- [New!] GetGroupLeaderboardView() and GetGroupLeaderboardViewByVersion() for retrieving the leaderboard results, relative to the specified group
- [New!] PostScoreToGroupLeaderboard() for posting scores to group leaderboards. Note that the user must be a member of the specified group.
- [New!] PostScoreToLeaderboardOnBehalfOf() for posting scores to a leaderboard on behalf of another player. Cloud code only.
- [New!] RemoveGroupScore() for removing a group score.
- Lobby Service
- [New!] GetRegionsForLobbies() retrieves a list of super-set of regions for the specified list of lobbies. Is used by the client app to determine with regions to ping test.
- [New!] PingRegions() tells the client to ping the retrieved set of regions. Should be called after GetRegionsForLobbies() has completed.
- [New!] CreateLobbyWithPingData(), FindLobbyWithPingData(), FindOrCreateLobbyWithPingData() and JoinLobbyWithPingData() are enhanced versions of the regular calls, with the obvious addition of ping data that the server will use to select the best region when launching a Room or Relay Server. Note that the library will automatically provide the ping data for those calls (there are no additional parameters)
- [New!] SysSendSignal() allows cloud code scripts to send signals to members of a lobby.
- [New!] SysDisbandLobby() allows cloud code scripts to disband a lobby.
- Tournament Service
- [New!] PostTournamentScoreOnBehalfOf() for posting scores to a leaderboard on behalf of another player. Cloud code only.
Note that we have also made a small change to GetGlobalLeaderboardViewByVersion() and GetGlobalLeaderboardPageByVersion() to allow you to once again pass in -1 as the version id. That behaviour had regressed in 4.0. Apologies for the inconvenience!
Miscellaneous Changes / Fixes
- Updated libraries
- All libraries have been updated for the 4.1 release! Go get ’em!
- The Unreal Library now includes beta-level support for our Relay Communications protocol!
- Warning – there is a known issue with Unity 2019 on IOS devices that affects brainCloud (and really any app making web requests). More info here!
- Documentation updates
- New Roadmap Site – https://portal.productboard.com/braincloud/1-braincloud-baas-roadmap/tabs/35-coming-soon/tabs/4-coming-in-4-1
- Significant updates to the S2S sections of the API Reference
- Docs updated with all 4.1 APIs
- Important Fixes
- BCLD-4714 Mismatch of Service and Operation on API Explorer after quick authenticate
- BCLD-4833 Importing an invalid script zip file and choosing “Full Sync” deletes all existing scripts
- BCLD-4832 Facebook transactions – some transactions are being displayed as “null”
- BCLD-4812 Need ability to preserve My Servers and Lobby configurations on Deploy and Import
- BCLD-3193 SendEvent operations gives a positive response without entering profileID
- BCLD-4751 Descriptive text on “Edit Lobby Type” popup is out-of-date
- BCLD-4737 Can’t delete a group after using “Delete Users”
- Plus miscellaneous fixes and performance enhancements…