brainCloud 4.14 is live!
We know, we know – you really want brainCloud 5 — not 4.14! It will be here soon — we promise!
In the meantime, this is the last in our 4.X series of releases – and it features a bunch of important updates.
Plus, as a bonus, in a few weeks, we will be granting preview access to the new brainCloud 5 Portal!
Important Changes
Note: there are a few important (and potentially disruptive) changes in this release – specifically:
- For un-owned Group Entity Creates (i.e.
CreateGroupEntity()
(withisOwnedByGroupMember == false
) andSysCreateGroupEntity()
) – the following two changes apply:- if
acl
is specified, it must include both theother
andmember
fields… Also,member
cannot be more restrictive thanother
- Also – if
acl
is not specified, it now defaults to{ "member": 2, "other": 0 }
. It did this before when acl was empty map, but when acl was null, it defaulted to{ "member": null, "other": 1 }
– which was both less secure and problematic.
- if
- Also regarding Group Entity creates – the entityType must no longer be null or empty string ← it was never supposed to be allowed in the first place!
- When using Shared Accounts(i.e. apps with parent and child profiles) – the following change applies:
- calling
Identity.GetChildProfiles()
will no longer return the child profiles for apps that have been soft-deleted
- calling
- Apps by default are now initially limited to max of 15 custom entity collections. See Custom Entity Improvements section for more information.
Release Highlights
Portal-X! (available shortly after 4.14 release)
Our next-gen Design Portal (codenamed Portal-X), will be available as part of brainCloud 4.14.
The new Portal has been completely re-designed and re-written from the ground up to give us a strong foundation for new features moving forward.
Portal-X is more capable, more scalable, more mobile-friendly, and easier to use. It is also a work-in-progress – and will definitely improve over time as we polish it. We look forward to your feedback!
Group Files API [Beta]
brainCloud 4.14 adds support for group-managed files.
Group Files are similar to Group Entities – in that they are associated with, and potentially private to, a specific group.
Group Files features include:
- folder structure within a group
- ACL permissions at folder and file levels
- operations for creating, moving and deleting folders
- operations for moving, copying and deleting files
- ability to copy/move user files to group files
Note that Portal support for Group Files will be added to our Next-gen Portal in coming releases. For now, support is API only.
Also note, that like user files, group files do not migrate to downstream apps during deployment.
Relay Server Improvements
We have made several changes and improvements to our Relay Servers:
- Added a new “END_MATCH” call to better support ending a game session while players remain attached to the lobby that spawned it.
- Fixes for websocket packet handling that span frames.
- Added missing passcode validation for match join-in-progress.
- Lots of logging cleanup.
- Updated documentation accordingly.
Client Library Improvements
In addition to incorporating the 4.14 API changes, the following additional improvements have been made to the client libraries:
- Objective-C / Swift Library (C++)
- Fixed errors for Xcode 14 update (multiple definitions of http_status_codes)
- Fixed Cocoapod compiler warnings
- Builds for WatchOS
- Improved compile time
- Unity Library
- At long last, Unity Package Manager support!
- Added support for new RelayServer EndMatch() call
- Relay Communication: TCP and UDP bug fixes
- Unreal Engine
- Code fix for UE 5.1 no longer accepts deprecated IOnlineStorePtr type
- Facilitates proper/complete disconnect from relay server (send disconnect to server then handle cleanup in client closed callback)
- More detailed connection status in RTT comms to include CONNECTING, more precise DISCONNECT
- Improved compile time
- IMPORTANT: IWYU paradigm is promoted for UE5 and has been implemented in our brainCloud plugin. Monolithic include Engine.h replaced with CoreMinimal.h. Client projects may incur build errors and if so will need to include required headers directly (JSON reader, Platform file manager, etc).
- There is a known Clang compiler issue when using Xcode 14 with UE 4. There will be errors in redefinitions of HTTP_STATUS codes in third-party libraries used by Unreal and brainCloud. This issue is resolved in UE 5. In order to continue development in previous versions of Unreal, the file Engine/Source/ThirdParty/libWebSockets/libwebsockets/include/Mac/libwebsockets.h can be overwritten by the updated one downloaded from Epic Games’ developer GitHub.
- Java
- Updated documentation for client setup
- Javascript
- Eliminated redundant callbacks in the Relay service
Custom Entity Changes and Improvements
- Portal now uses a paged API for retrieving Custom Entity types
- Max # of custom entities now enforced (see note below)
- New Raw Lines import/export format. This is a more efficient format for larger imports.
- API – Recount now skipped on subsequent page requests BV
Deployment and Import/Export Changes
We have been working to improve the performance and scalability of our app deployment and import/export mechanism.
Some of these changes are effective right away – and others will be enabled in the coming weeks after more production testing.
Import / Export
There is a new file format for App Configuration Data imports/exports, which separates each migratable custom entity collection into its own file. [feature is backwards-compatible and will be initially disabled]
Deployments
- The target app’s game record is no longer temporarily deleted during the deployment process. The old record is updated directly instead.
- Migrateable Custom Entity collections are now copied directly collection-to-collection – instead of being exported to and imported from intermediate files. This lowers the memory footprint of deployments considerably. [feature is backwards-compatible and initially disabled]
Example App Improvements
The following improvements have been made to the example apps:
- All Unity Examples will be updated to 4.14 shortly after release
- All Unreal Examples will be updated to UE 5 before the next release
- Authentication Demo (Unity)
- We have completely re-worked the Unity Authentication demo
- Version 1.0 includes clear examples of how to handle user authentication and the various services within the brainCloud API when using Unity (including Entity, Custom Entity, Global Statistics, Identity, Player Statistics, Script, and Virtual Currency)
- More methods of authentication and examples of other services to come
- You can find the new release, alongside all other Unity examples, here: GitHub – getbraincloud/examples-unity: Example projects using the Unity brainCloud client
- brainCloud Clashers (Unity)
- a One-Way Multiplayer Example
- We have a new Clash-style game implemented to demonstrate the use of our one-way multiplayer APIs – complete with playback streams
- Java Demo
- A new Android demo based on the Unity Authentication example that demonstrates how to use various services within the brainCloud API
- You can find the new release here: GitHub – getbraincloud/examples-java: Example projects using the Java brainCloud library
- Relay Test App (Unity Version)
- Takes advantage of the new Relay Server “END_MATCH” feature to properly support long-lived lobbies.
- Unreal Functional Test Suite and Device Demo
- Added scripts to switch between UE 4.27, 5.0 and 5.1 with documentation
- Improved logging-in editor
- Include required headers for the project in replacing Engine.h with CoreMinimal.h
- Changes made to build in Xcode 14 (the new options added do not exist in previous versions so compiler errors will occur with UE 4/Xcode 13 setup – see project Readme regarding fix)
- Added scripts to up-convert to UE 5 and to ensure asset compatibility for UE 4
- Relay Test App (Unreal Version)
- Changes made to build in Xcode 14 (the new options added do not exist in previous versions so compiler errors will occur with UE 4/Xcode 13 setup – see project Readme regarding fix)
- Added build scripts for continuous integration
- Android C++ Demo App
- Improvements to Java layout and test output
- Relay Test App (C++ Version)
- Added gradle project to existing source code for deployment to Android devices
- Swift UI and Basic Example
- Updated for Xcode 14 and improved command-line builds
Additional Features / Changes
- Auto-Delete Users
- We have made a change so that Auto-Delete settings are no longer propagated during deploys. This allows developers to have separate settings for Development vs. Production app instances.
- Group Entities
- Increased enforcement of parameters when creating new Group Entities. See API section for details.
- External Web Services
- We have improved the caching of the external service endpoints – so calls to these services should be a bit faster… (especially at higher volumes)
- Logging
- The system will no longer record “user session has expired” warnings. The system already provides an appropriate response to the client. There is no value to retaining them on the server (and they just waste log storage).
- MongoDB 4.4
- This release has been fully tested on MongoDB 4.4. All brainCloud deployments will migrate to MongoDB 4.4 in the coming months.
- Offline Matchmaking
- Database Index Optimizations for faster performance
- PlayStation
- Added new option to ensure that the user’s Profile Pic url is updated at each login
- Portuguese (Brazilian)
- We have updated our global list of supported locales to include Portuguese (Brazillian)
- Ultra Blockchain
- The Ultra Blockchain components have been updated to support NFT v1
- WebPurify Integration
- Improvements to WebPurify error logging
From Previous Patches
Additional changes that were added in 4.13 patches:
- Increased Max Leaderboard “Days” value from 7 → 28 days
- Added the ability to extend the Max Server Session time from 6 hours → 24 hours
Features for licensees
These features are of special interest for customers who have their own private instance of brainCloud:
- Auto Hard-Deletion
- New settings to automatically trigger hard-deletion of soft-deleted apps – after a period of days, and only if the app’s users are lower than a specified threshold
- This helps to keep to keep the database slim and trim
- Auto-Delete Users
- The deployment changes will allow private licensees to enable deletion of Dormant Accounts in development apps – without having those settings necessarily migrate to their production apps.
- Portal Password Standards
- brainCloud can now enforce minimum password standards for portal users
- The settings are controlled via the new
portalPasswordEnforcement
brainCloud property
{
"isEnabled": true,
"minLength": 8,
"maxLength": 25,
"minDigits": 1,
"minUppercase": 1,
"minLowercase": 1,
"minSymbols": 1
}
Portal Changes
We have also made the following changes to the legacy portal:
Design
- Core App info | Application IDs
- New [x] Always update profile pic url option added to the Playstation settings. Ensures that the PlayStation avatar picture will be refreshed each time a user logs in – even if the pic had been previously set before.
- Cloud Code | My Servers
- Can now specify Custom Environment settings for GameLift servers
- Cloud Data | Custom Entities
- Retrieving the list of custom entity types is now paged properly (under the hood) for better performance
- Integrations | Blockchain
- Updated the Ultra System plugin to support optional CloudFlare service tokens
Team
- Manage | Team Info
- The Billing Information section will now display the team’s Credit Balance (if it has one).
API Changes
The following changes/additions have affected the brainCloud API:
- Event
- New
SysSendEventRTTOnly()
method can be used to send events to users via RTT-only — i.e. without persisting them to disk. This eliminates the need to delete the event once received. RTT-only events have aneventId
of""
(i.e. empty string).
- New
- Group
- For un-owned Group Entity Creates (i.e.
CreateGroupEntity()
(with isOwnedByGroupMember == false) andSysCreateGroupEntity()
) – the following two changes apply:- if acl is specified, it must include both the other and member fields… Also, member cannot be more restrictive than other
- Also – if acl is not specified, it now defaults to
{ "member": 2, "other": 0
}. It did this before when acl was an empty map, but when acl was null, it defaulted to{ "member": null, "other": 1 }
– which was both less secure and problematic.
- Group Entity creation calls now enforce that groupEntities must specify an entityType – can’t be null or empty string
- For un-owned Group Entity Creates (i.e.
- GroupFile [NEW!]
- File Info –
CheckFilenameExists()
,CheckFullpathFilenameExists()
,GetFileInfo()
,GetFileInfoSimple()
,GetCDNUrl()
,GetFileList()
,UpdateFileInfo()
- File Operations –
CopyFile()
,MoveFile()
,DeleteFile()
,MoveUserToGroupFile()
- Sys File Info Operations (Cloud Code Only; ignore permissions) –
SysCheckFilenameExists()
,SysCheckFullpathFilenameExists()
,SysGetFileInfo()
,SysGetFileInfoSimple()
,SysGetCDNUrl()
,SysGetFileList()
,SysUpdateFileInfo()
- Sys File Operations (Cloud Code only) –
SysCopyFile()
,SysMoveFile()
,SysDeleteFile()
,SysMoveUserToGroupFile()
- Folder Operations (Cloud Code only) –
SysCreateFolder()
,SysMoveFolder()
,SysUpdateFolder()
,SysLookupFolder()
,SysDeleteFolder()
- File Info –
- Identity
- calling
Identity.GetChildProfiles()
will no longer return the child profiles for apps that have been soft-deleted
- calling
- Leaderboard
- New
PostScoreToDynamicLeaderboardUsingConfig()
andPostScoreToDynamicGroupLeaderboardUsingConfig()
have been added as more flexible versions of the older API calls. In particular, these new calls allow the developer to specify an optionalexpireInMins
value that will automatically queue the leaderboard for deletion after the prescribed number of minutes. - Note that these two new calls are currently cloud-code only. They will be added to the client libs for brainCloud 5 though!
- New
- Messaging
- New
SysDeleteMessages()
call allows multiple messages to be deleted in a single call.
- New
- RelayServer
- New
EndMatch()
call allows the owner of a game session to tell the RelayServer to shut down the match – without having each player disconnect from the client (which also causes them to leave the lobby). This is a better flow for long-lived lobbies.
- New
Miscellaneous Changes / Fixes
- Updated libraries
- All libraries have been updated with the latest API enhancements. Go get ’em!
- Documentation updates
- The latest APIs have been incorporated into the docs
- Important Fixes
- TBC
- Fixes included from 3.14.1 patches
- BCLOUD-1518 – Fix to lobby screen – disband on start no longer automatically selected
- BCLOUD-3060 – Blockchain Integration – Enforce a minimum value of 1 for the “Timeout (minutes)” fields.
- BCLOUD-3109 – Improvements to json response exception reporting from scripts
- BCLOUD-3115 – Added header and bundle appId to s2s dispatcher
- BCLOUD-3119 – Fixed issues with the reset password screen.
- BCLOUD-3123 – Monitoring Group Entities – Fixed displayed member ACL in the table
- BCLOUD-3179 – Support search on name of definition id for Item catalog
- BCLOUD-3184 – Detach identity confirm anon fix
- BCLOUD-3295 – Corrected permissions check on app passwords feature
- BCLOUD-3362 – Fix to serialization issue for cloud code version of LobbyService.GetLobbyInstances()
- BCLOUD-3371 – Made hosting cost billing adjustment values super properties
- BCLOUD-3411 and 3412 – Extended max Room Server Session time past 6 hours (new property – roomServerMaxSessionTimeMins)
- BCLOUD-3581 – Custom Entities skip recount on user page requests
- BCLOUD-3555 – PS5 Profile and Friends Support
- BCLOUD-3687 – Passing through custom fields in fusebill get plan details
- BCLOUD-3652 – Fixed issue with monthly aggregates for ccx overages
- BCLOUD-3805: Fixed encoding of URL parameters when a player confirms their email address ← important for email addresses with “+” in them
- BCLOUD-3836 – Fix for collecting RTT cx usage stats
- BCLOUD-3844 – Improvements to WebPurify error handling
- Plus miscellaneous fixes and performance enhancements…