brainCloud Product Updates logo
Back to Homepage Subscribe to Updates

Product Updates

See the latest features, improvements, and product updates

Labels

  • All Posts
  • release
  • Announcement
  • Improvement
  • Fix
  • blog

Jump to Month

  • March 2025
  • January 2025
  • November 2024
  • September 2024
  • May 2024
  • February 2024
  • November 2023
  • September 2023
  • July 2023
  • April 2023
  • March 2023
  • February 2023
  • January 2023
  • December 2022
  • November 2022
  • July 2022
  • June 2022
  • April 2022
  • March 2022
  • February 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • June 2021
  • May 2021
  • March 2021
  • November 2020
  • September 2020
  • July 2020
  • April 2020
  • February 2020
  • December 2019
  • November 2019
  • September 2019
  • June 2019
  • May 2019
  • February 2019
  • December 2018
  • October 2018
  • July 2018
  • March 2018
  • January 2018
  • December 2017
  • October 2017
  • July 2017
  • June 2017
  • April 2017
  • March 2017
  • February 2017
  • January 2017
  • October 2016
  • August 2016
  • July 2016
  • June 2016
  • May 2016
  • April 2016
  • March 2016
  • January 2016
  • December 2015
  • November 2015
  • October 2015
  • September 2015
  • August 2015
  • July 2015
  • June 2015
  • May 2015
  • April 2015
  • March 2015
  • February 2015
  • January 2015
  • December 2014
  • November 2014
  • October 2014
  • September 2014
  • August 2014
  • June 2014
  • May 2014
Changelog byAnnounceKit

Create yours, for free!

Announcement
7 months ago

Note - Migration to MongoDB 6.0 - changes to be aware of!

brainCloud BaaS will be upgraded to MongoDB 6.0 on Wednesday, September 25th, starting at 8pm Eastern.  It is a rolling upgrade that may take up to 3 hours to complete.  All API and Portal services will be fully available during the upgrade. The Portal will NOT be disabled.



Note that all brainCloud Private Instances will be upgraded in the following weeks - before October 31st, 2024.

brainCloud 5.4 has been tested to be fully compatible with MongoDB 6.0.

That said, MongoDB 6.0 contains an Important Change that brainCloud developers must be aware of:

In MongoDB 6.0, $regex Find Queries No Longer Ignore Invalid Regex.  This means that while invalid $regex expressions were ignored in MongoDB 5.0 -- in MongoDB 6.0, the same query will return an error.

For example, in MongoDB 5.0, the following query, which includes an invalid regex option (i.e., "bad"), returns a successful database response with a document.

In MongoDB 6.0, that same query returns an error from the database - thus, brainCloud also returns an error.

 

This change only affects brainCloud's list and paging-style calls (which accept custom query JSON) - and ONLY apply if the developer-provided queries have invalid $regex or $options.  These calls include:

  • Custom Entity - GetEntityPage(), SysGetEntityPage()
  • Entity - GetList(), GetListCount(), GetPage()
  • Global Entity - GetList(), GetListCount(), GetPage(), GetSystemEntityList() GetSystemEntityListCount(), GetSystemEntityPage()
  • Group - ListGroupsPage(), GetRandomGroupsMatching(), ReadGroupEntitiesPage(), SysGetRandomGroupsMatching(), SysListGroupsPage(), SysReadGroupEntitiesPage()
  • Item Catalog - GetCatalogItemsPage(), SysGetCatalogItemsPage()
  • Leaderboard - SysGetLeaderboardConfigsPage()
  • Messaging - GetMessagesPage(), SysGetMessagesPage()
  • RedemptionCode - SysGetCodeTypePage()
  • User - SysGetPage()
  • User Items - GetUserItemsPage()


So - in summary:

  • If your app isn't using $regex expressions in your query - you have nothing to worry about
  • If your app is using VALID $regex expressions and valid $options - you have nothing to worry about
  • If your app is using INVALID $regex expressions or $options - then brainCloud may now flag that error


A description of MongoDB 6.0 $regex and $options can be found here.


Feel free to reach out to brainCloud Support if you have questions.


releaseAnnouncement
8 months ago

brainCloud 5.4 is live!

brainCloud 5.4 is a massive update - and furthers our goals of advancing brainCloud’s support for Product Management, Customer Support, and Multiplayer Developers.

This release includes:

  • New EdgeGap Multiplayer integration!
  • New Matchmaking Monitor screen for visualizing the performance of Online Matchmaking.  Plus we’ve significantly improved the performance of matchmaking to boot!
  • New Server Monitor screen for viewing hosted Room and Relay servers. We’ve added new launch progress events. And we have also added hosting capabilities for private deployments on Azure and Google Cloud!
  • New Region, Language, and App Store analytics
  • A bunch of API enhancements
  • and much, much more! 

Plus - we bid farewell to our legacy portal! Long live Portal-X! 😀  

Notice - the new Region, Language, and App Store analytics screens will not be available until the nightly jobs can generate the required data. 



Compatibility Notes

Ensuring stability and backward compatibility for existing apps is a key priority. 

brainCloud 5.4 adds one new compatibility flag (enabled by default for existing apps) which allows devs to suppress the new server launch progress events.  This is a safety measure in case the client apps don’t automatically ignore them.

 Disable Room Server Launch Progress Messages




Release Highlights

EdgeGap Multiplayer

As you know, brainCloud provides everything you need right out of the box for easy-to-implement multiplayer. We’ve got flexible Online Matchmaking, Lobbies, Peer-to-peer and Dedicated-Server Examples, and built-in support for Room and Relay Servers that can be launched in regions all around the world.

But what if I told you that with hardly any changes to your multiplayer container - you can level up your multiplayer even further?  We’re talking lower latencies for players; faster cold starts; lower idle costs - and overall cost efficiency!

Too good to be true? Well - that’s what you get with our new EdgeGap Integration!

Just (1) set up an EdgeGap Account, (2) configure a server in brainCloud via the My Servers page (App > Design > Servers > My Servers), (3) link your lobbies to the new EdgeGap server type, and (4) modify your server code to tell EdgeGap when a session completes. That’s it - no client changes at all!

Pricing - requires a paid EdgeGap account. brainCloud does not add hosting fees on top of the EdgeGap charges. To compensate for matchmaking server usage, brainCloud adds 5 api counts per player matched to EdgeGap servers.


Matchmaking Monitor [Beta] & Sharded Matchmaking

brainCloud’s Online Matchmaking can be a tough process to visualize - until now!  

Our new Matchmaking Monitor screen (App > Global > Multiplayer > Matchmaking Monitor) provides real-time insights on matchmaking load and performance. Just select a lobby type and voila - the stats start streaming in.

And brainCloud’s matchmaking is now dynamically sharded - so extra CPU resources are brought online when you need them.

2024-08-30_00-19-12.png

Note that this is a beta version of our Matchmaking Monitor - additional stats, better memory handling, and some more UI polish will be added in future releases.


Server Monitor [Beta*]

For those using brainCloud’s native Room and Relay Server Hosting - we’ve added a new Server Monitor screen (App > Global > Multiplayer > Server Monitor) to help visualize the running nodes and containers. Just select a server type and the screen will start updating.

Note that this is a beta version of our Server Monitor - there are plans to add CPU and Memory utilization metrics in the future.

2024-09-05_09-53-31.png


Additional Improvements

brainCloud 5.4 includes a ton of other improvements as well:

  • AppStore Transactions

    • We’ve added new cloud code-only methods for retrieving purchases recorded in brainCloud. Note that this API does not return data from the legacy transaction collections.
  • Azure and GCloud Hosting

    • Private and Platform Licensees on Microsoft Azure and Google Cloud can now natively host Room and Relay Servers in those environments. Customers should contact brainCloud support to deploy the feature.
  • Completed Divisions

    • Divisions no longer immediately disappear from getMyDivisions() once they have been claimed. They will now remain available in a COMPLETED state for as long as the division results are available.
  • Dart & Flutter!

    • Our client team is hard at work creating a Dart version of the brainCloud library - suitable for use in Flutter and other apps.
    • It’s still early going - but feel free to check out the develop branch for an early look at things!
  • IfExists Methods

    • Sometimes an error is okay - and there is no need to log it!
    • We have added new IfExists versions of several key methods (in the Leaderboard and Event services) to help keep your logs clean.
  • Invisible Presence

    • Devs can now configure Presence so that users are initially invisible.  This is configured from the App > Design > Messaging > Presence screen.
  • Remote DevTool

    • The Remote DevTool (remote to the brainCloud platform) allows developers to host Room Servers locally on their workstations for debugging purposes
    • Added a new and improved Debug Mode to better debug dedicated servers and hit breakpoints
  • Replay System

    • brainCloud Playback Stream service is normally used for one-way multiplayer match replays - as demonstrated in the brainCloud Clashers demo.
    • This release adds new “Sys” and S2S-compatible APIs so that Playback Streams can be used by Custom Room Servers to directly enhance the gameplay experience. Think ghosts in racing games, crowds in hub worlds, etc.
    • In addition to the APIs - we’ve got a new example game, Invaders, that demonstrates the feature - and a great knowledge base article that describes how to make it work for your game!
  • Server Launch Progress Messages

    • New events will be sent to all lobby members when starting hosted Room or Relay Servers
    • These events can be safely ignored – or can be used to communicate more information to clients as servers launch
  • /servertime endpoint

    • A /servertime endpoint has been added to brainCloud, which returns the current server time in simple JSON format. 
  • Status Effect Behaviour

    • Devs can now control, from the item catalog definition, whether status effects extend or replace the duration of the effect.   ← Initially introduced as a patch in 5.3
  • WebHook Log Security

    • As a security feature, devs can now configure webhooks so that key parameters received are not recorded in the server logs




Portal Changes

We continue to rapidly evolve the new Portal. 

In addition to the new Matchmaking and Server Monitor screens (see above), 5.4 adds new Analytics, Usage, and Usability features!

Analytics

New & Returning Users

The new Daily Active Users chart added to the App Dashboard and App Analytics pages gives you immediate feedback on how your app community is evolving daily.

2024-08-30_16-22-39.png

 

Region and Language Analytics

We have refactored our Region and Language analytics processing - and added new pages to better communicate who is using your app!

2024-09-03_11-55-12.png

 Notice - these screens will not be available until the nightly jobs can generate the required data. 

Store Analytics

The new Store Analytics page shows your app’s financial performance by platform.

2024-08-30_16-35-35.png

 Notice - this screen will not be available until the nightly jobs can generate the required data. 

Usage

API Usage

The API Usage screen now displays trend icons depicting how this month’s extrapolated usage compares with the previous month.

Monthly History

Speaking of previous months - you can now travel back in time to see what your app’s usage looked like in previous months!

Script Usage

We have added a new chart to the Script Usage screen to help you zero in on the cloud code scripts that could benefit most from optimization. 

Just bring up the page - and work your way down the list from top to bottom!

2024-08-30_18-16-04.png

Remember - fewer API calls → fewer server resources → faster responses → lower costs. It’s win:win:win!


Usability

API Explorer & Portal Authentication

We have replaced the default Authenticate and [Quick Auth] features in the API Explorer and Script Editor with a new Portal authentication type.  This new identity type is only useable from within the Portal - and can be attached to any end-user account.

This change fixes an issue where [Quick Auth] would not work properly for apps that had Password Enforcement standards enabled. 

Note that “Portal” auth is the new default authentication type for the API Explorer.  The first time you use it it will by default create a new user account with that identity type.  It uses the email address associated with your Portal account as the id.

If you would like to attach that Portal identity to an existing end-user account:

  • Log into the API Explorer as that end-user account.  This would normally be accomplished by finding the user via the User Browser, and then clicking the [Login as User] button.
  • Attach your Portal identity to the account. In the API Explorer, navigate to the Identity service and Attach operation. Your portal email address will automatically be filled into the externalId. Leave all other fields as is. Click [Execute].

And voila - from now on, clicking [Quick Auth] will log into the account that you selected!

2024-09-03_17-52-38.png

 

User Activity

We have added an informative preview pane to the User Activity screen.  Now if you click on a login entry - you’ll see a summary of what changed during that play session!  Increased/decreases in XP, purchases, virtual currencies - etc. Super helpful!

2024-09-03_12-21-39.png

 

Advanced Settings > Compatibility Flags

This screen has been enhanced to make it easier for developers:

  • Compatibility flags are now listed from newest to oldest - and we even display the brainCloud release in which a particular flag was added.
  • By default - only the enabled flags are shown. [No reason to show old flags that do not apply for your app!].  Remember - when we add new compatibility flags to the system - they are automatically enabled for your app. We encourage devs to review whether they need a flag enabled though - and disabled it if they do not. brainCloud apps will perform best with all compatibility flags disabled!
  • Flags are now searchable! ← note - be sure to uncheck the [x] Only show enabled option to search across all flags.
2024-09-03_12-25-59.png


Filtered Global Entity Exports

The App > Global > Global Data > Global Entities screen now allows you to export a sub-set of a type of Global Entities.

Simply use the [Refine] button to find a subset of the entities - and then export as normal from the Bulk Actions menu. You’ll notice “filtered” in the export options - confirming that it is a subset of the objects that will be exported.

2024-09-03_13-49-06.png

 



API Changes

The following enhancements have affected the brainCloud API:

  • AppStore Service

    • [New!] SysGetTransactionsPage(), SysGetTransactionsPageOffset() - new methods for returning a summary list of a users' purchases.  Note - does not include all fields. 
    • [New!] SysGetTransactionDetails() - returns additional information about the specified transaction.
  • Event Service

    • [New!] UpdateIncomingEventDataIfExists() - a variant of UpdateIncomingEventData() - but doesn’t write an error log entry if the evId specified no longer exists.  Useful for keeping the error logs clean when that’s a normal use case.
  • Leaderboard Service

    • [New!] IfExists variants of calls won’t log an error if the leaderboard does not exist. Helps to keep your logs clean!

      • GetGlobalLeaderboardPageByVersionIfExists()
      • GetGlobalLeaderboardPageIfExists()
      • GetGlobalLeaderboardViewByVersionIfExists()
      • GetGlobalLeaderboardViewIfExists()
      • GetPlayersSocialLeaderboardByVersionIfExists()
      • GetPlayersSocialLeaderboardIfExists()
      • GetSocialLeaderboardByVersionIfExists()
      • GetSocialLeaderboardIfExists()
    • [New!] PostScoreToDynamicLeaderboardUsingConfig() method has been added to all client libraries. This is a much more flexible version of PostScoreToDynamicLeaderboard() which is now deprecated.  In particular,  PostScoreToDynamicLeaderboardUsingConfig() allows dynamically created leaderboards to have an expiry TTL - which is highly recommended for timed leaderboards!
  • Lobby Service

    • [Improved!] FindOrCreateLobby() and its variations now send additional RTT events if/when hosted Room or Relay Servers are being launched. These events are entirely informational and can be ignored - though developers may want to use them to trigger on-screen updates for the end user.
  • Tournament Service

    • [Improved!] GetMyDivisions() - now returns divisions that have been claimed in a new COMPLETE status…  Completed divisions will be returned as long as the associated leaderboard data is still available.

We have also deprecated the following methods:

  • Leaderboard Service

    • PostScoreToDynamicLeaderboard() - will be removed from the client libraries after September 2025. Use PostScoreToDynamicLeaderboardUsingConfig() instead. The legacy method will continue to work for apps using old client libraries.




Libraries and Examples

Client Libraries

All Libraries

  • Removed cxId parameter from cancelFindRequest function
  • Added “IfExists” versions of various leaderboard functions that do not return an error if a leaderboard does not exist or is expired)
  • Added PostScoreToDynamicLeaderboardUsingConfig() function
  • Added “IfExists” version of UpdateIncomingEventData() function for Event Service

braincloud-csharp (C#/Unity/Godot)

  • Added conditions to correct country code to ensure consistent formatting

    • “419” would become “_LA_”
    • “Hans” and “Hant” would become “CN”

braincloud-unreal-plugin (Unreal)

  • Fixed compatibility issues with Unreal Engine 5.4

braincloud-cpp (C++)

  • Added conditions to correct country code to ensure consistent formatting

    • “419” would become “_LA_”
    • “Hans” and “Hant” would become “CN”

braincloud-js (JavaScript)

  • Fixed bug with usage of Node Buffer module

braincloud-dart (Dart)

  • Pre-alpha version of our new Dart-based client library

 

S2S Libraries

brainclouds2s-cpp (C++)

  • Added vcpkg.io to the S2S CPP library, allowing it to build for both Windows and Linux (MacOS still a WIP). With vcpkg dependencies are managed dynamically, so static libraries were removed from the repo and replaced with libraries that are downloaded through vcpkg.


Examples

Note: brainCloud example apps are dependent upon the brainCloud published client libraries - and are thus released in the two weeks that follow a new brainCloud release. 

Stay tuned for updates!




Documentation and Tutorials

BootCamp

  • Additional Godot tutorials are now available!
  • Updated the Portal images in many of the Unity tutorials ← PortalX is moving too fast!
  • Be sure to check out bootcamp.braincloudservers.com if you haven't already!

Documentation

  • All the latest API additions and changes have been incorporated into our new doc site at docs.braincloudservers.com !
  • New knowledgebase articles available:

    • Implementing a Replay System in brainCloud
    • Implementing a Jackpot System in brainCloud

 

 

releaseAnnouncement
12 months ago

brainCloud 5.3 is live!

brainCloud 5.3 is a significant release that reflects our goals of advancing brainCloud’s support for Product Management, Customer Support, and Multiplayer Developers in 2024.

Most urgently - this release includes support for Google’s Firebase Cloud Messaging (FCM) V1 API – just in time because the old FCM APIs will cease functioning in June 2024. Devs will want to upgrade their app configurations in short-order before the deadline.

This release includes improved handling of In-App Purchases, new Product Analytics, performance improvements for Lobby Matchmaking and Room/Relay Servers, new API calls and more! 

Finally, we have packed in a bunch more Portal polish - including our redesigned Context Banner, new User Menu, and new User Unlock feature! 

Compatibility Notes

As always - we have done all of this with an emphasis on preserving stability and backward compatibility for existing apps. Developers should be aware of the following changes:

  • Google FCM HTTP v1 API - To use the new FCM API, developers must update their Google push settings to include a Service Account JSON.
  • Country Codes - We have improved the country code lookup functionality in our client libraries and are now validating the codes sent to the server to enforce a standardized set. A new capability flag controls this behavior: “[x] Do not enforce valid Country code” which defaults to checked for existing apps to maintain the previous (legacy) behavior.
  • Posting Scores with null extra data -  Now - if the app updates a score (via PostScoreToLeaderboard() or similar calls) while specifying null for the data parameter, the system will preserve the existing data associated with the score. (Previously, it would clear it).  There is a new capability flag to control this behavior: “[x] Do not preserve Post score with data null” - which defaults to checking for existing apps to maintain the previous (legacy) behavior.
  • For apps with Tournaments and RTT - brainCloud will now send RTT-enabled events when a tournament has completed. This will allow the app to notify the user in real-time.
    Note that we did not implement a compatibility flag for this - as it should “just work” for apps that are already using Tournaments and RTT - but contact support if there are issues. We can disable it on a per-app basis!



Release Highlights

Google FCM V1 API

Google’s legacy Google Firebase Cloud Messaging APIs, which brainCloud up to 5.2 still uses, are being removed in June 2024.

brainCloud 5.3 has been updated to use the new APIs - but to do so, developers must update their Google push settings to include a Service Account JSON.  This is done via the portal's App > Design > Notifications > Settings page.

Technically devs do not need to update their client code to use the new notifications. But devs using the raw push notification methods may want to update the raw JSON they send to take advantage of new FCM V1 features.

Product transactions

We have made big improvements to the recording and reporting of Product Transactions (i.e. In-App Purchases) in brainCloud, namely:

  1. We are now more accurately distinguishing between sandbox and production purchases.
  2. Sandbox and Mock store purchases are no longer included in daily and monthly metrics
  3. Pending purchases now expire (and are deleted) after X days
  4. Mock AppStore purchases can now be performed via the Client API - but only by users flagged as “Testers” in the system


Refreshing previously calculated all-time revenue

We have added a feature to allow an app’s total revenue metric to be re-calculated… (to remove the impact of previously recorded sandbox, mock, and/or pending transactions).


This process will scan through all transactions - properly skipping over sandbox, pending, and mock transactions. 

Limitations:

  • The scan does not include revenue from legacy transactions (those that occurred before November 2018)
  • It also will not pick up the revenue from deleted users (as their transactions are deleted with them).
    • By default, Dormant User Deletion skips users with purchases - so the totals are unlikely to be affected by the dormant user deletion process - it would just be users with purchases that chose to delete their accounts.

Note that this process does not update previous daily or monthly totals - just the all-time revenue and purchase counts.

The function can be accessed from the Team > Manage > Apps page - by selecting “Refresh Revenue…” from the app’s action menu.


Country Codes

We have significantly improved both the:

  • Retrieval of country codes [by our client libraries]
  • Validation of country codes [by our servers]

Previous versions of the client libraries were simply retrieving an "assumed" country code from the locale APIs of the client device. This means that if you choose "US English" the system would assume that you are in the US - even though that just may be a language preference... (eg. lots of folks in Canada would choose "US English" simply because they prefer US spellings - like "color" instead of "colour" - "favorite" instead of "favourite", etc.). But that doesn't mean those folks are in the US!

Also - this mechanism can lead to further ambiguities - as Spanish is spoken in so many South American countries that the country code comes back as the number "419" (which indicates "Latin America Spanish").

So... here is how the new processing works (in priority order)

  1. The client libs on supported platforms (iOS, Android, Playstation, etc) will now first attempt to fetch the country code from a more appropriate region selection (instead of from the language locale)
  2. If that is not available, the client will use the language locale (as before)
  3. If the language locale comes back as "419" (which indicates "Latin America Spanish") - our libs will convert that to a special country code of "_LA_" <- for latin america

And finally, our servers now validate the country code being sent to them - rejecting bad values (and preserving the existing country code stored against the account if there is one).  And note that we have the special Latin America ("_LA_") country code that we use in place of 419 if that's the only information that we have.

Important notes:

  • This new country code lookup functionality is only available in the 5.3 client libraries and above - so be sure to upgrade!
  • A new capability flag controls the server-side valication: “[x] Do not enforce valid Country code”.  This compatibility flag is automatically enabled for existing apps, and disabled for new apps.


Additional Improvements

But wait - there is more! Other improvements include:

  • Cloud Code Scripts

    • Improved importing of scripts from zips (with folders) when the scripts do not have metadata
  • Lobbies

    • Multiple improvements to Lobby matchmaking performance
  • Purchases

    • Improvements to purchase data captured - now included item title and originalPrice - but drops the unused description field.
  • Room Servers

    • Improved scalability of launching multiple Room / Relay Servers in parallel




Portal Changes

There are significant changes to the Design Portal in 5.3.

Context Banner

The Team / App / User Context Banner has been re-implemented to be more informative and yet take up less space on the screen. It even has a new mini version that tucks up into the corner of the screen when you collapse it! 


[New!] User Menu

The most obvious change in brainCloud 5.3 is the introduction of the new User menu. Your users are the heart of your application - and it’s about time that brainCloud treated them that way!


The User menu elevates player searches to a top-level feature and is much more accessible for non-development personnel (i.e. Customer Support Reps, etc.).

User Unlocking

To further streamline support, live user data can now be edited without fully unlocking the app. 

The new User Lock is a single-click mechanism that unlocks a specific user for editing (by the local Portal user). This mechanism is quicker, safer, and less scary than fully unlocking an app to make changes.

User Summary Data

User Summary Data is now displayed more prominently throughout the portal. You’ll see it in User Previews and on the revamped User Summary page itself - where you can even edit it directly!


User Virtual Currency

The User Virtual Currency screen has been enhanced with a chart of the user’s currency balances for the past 30 days.


In-App Purchase Transactions

Two new screens have been added to the portal:

Global Transactions

The new Global Transactions screen (available at App > Global > Marketplace > Transactions) provides a view of recent IAP purchases by app store.  Note that users without the All or Reporting Role permissions can only see item counts - they do not see revenue totals.


Product Analytics

The new Product Analytics screen (available at App > Reports > Analytics > Product) for all users with All or Reporting Role permissions, provides an overview of purchases by product for the selected timeframe.


My Servers

We have improved the configuration dialog for Room and Relay Server hosting to better communicate the performance and/or cost impact of certain settings.

The most common confusion is how Min Ready Containers combines with Containers per Server to affect the number of servers that are running 24x7 - even if they are idle. 

Explanation:

  • Setting Min Ready Containers to > 0 reduces the average launch times for Room and Relay Servers, because brainCloud will attempt to keep enough server VMs running with free spots for the specified number of containers. We call this feature Quick Launch.
  • For example - If Min Ready Containers is set to 8, and Containers per Server is set to 4, a minimum of 2 servers will run at all times to satisfy the Min Ready Containers requirement.
  • Furthermore, in the above example, if Containers Per Server were changed to 1, it would mean that 8 servers would run at all times!

This can lead to surprising bills for customers - which obviously is not what we want. 

The My Servers list page now displays:

  • Quick Launch - an icon to indicate that Min Ready Containers is > 0 - which allows matches to start faster since there should generally be a warm server around to host them
  • Idle Servers - a calculation of the minimum number of servers that will be running at all times - so that the developer has a heads up! 


In addition - we have added additional help text and costing indicators ($ - $$$$$) to help developers better understand the cost impact of the configuration settings.




API Changes

The following changes/additions have affected the brainCloud API:

  • AsyncMatch

    • The new UpdateMatchStateCurrentTurn() function - which allows the current player in the game to overwrite the matchState and statistics without completing their turn or adding to matchHistory
  • Group

    • The new DeleteGroupJoinRequest() method allows an end-user to delete their request to join a group.
  • Leaderboard

    • The new SysDeleteLeaderboardConfig() method allows devs to delete leaderboards even if tournaments are configured against them. This method is available in Cloud Code only.
  • PlayerState

    • New UpdateCountryCode() method that allows a user’s country code to be updated. This method is available in Cloud Code only.
  • Tournaments

    • New behavior - for apps with Tournaments enabled - brainCloud will now send RTT-enabled events for when a tournament has completed. This can allow the app to notify the user in real-time.
      Note that we did not implement a compatibility flag for this - as it should “just work” for apps that are already using Tournaments and RTT - but contact support if there are issues. We can disable it on a per-app basis!




Client Libraries

All Libraries

  • Created canReconnect() helper method that returns true if there are stored Anonymous and Profile IDs on the device that can be used for reconnect authentication
  • Added logout functions to Wrapper for application close events
  • Changed how country code is retrieved on devices, instead of getting the country code from the language selection locale, there is now specific code per platform to fetch the country code from a more appropriate region selection on the supported OS platforms. (PC, Mac, Android, iOS, PlayStation, Nintendo)
  • Added updateMatchStateCurrentTurn() function: Allows the current player in the game to overwrite the matchState and statistics without completing their turn or adding to matchHistory

braincloud-csharp (C#/Unity/Godot)

  • as above

braincloud-unreal-plugin (Unreal)

  • Added new module to plugin that provides access to native Android functions to get device information, including a function that gets the country code of the device. It first attempts to get it from the SIM card, if the device doesn’t have a SIM card, it tries to get it from the connected wi-fi network and if the device is not connected to any network, it will default to getting the country code from the selected Language (country) locale.

braincloud-cpp (C++)

  • as above

braincloud-java (Java)

  • as above

braincloud-js (JavaScript)

  • Added logout functions to Wrapper for application close events

    • logoutOnApplicationClose() uses the Fetch API to send a logout request. When triggered by a "beforeunload" event, this attempts to send the request when the page/tab is closed/refreshed
    • runScriptAndLogoutOnApplicationClose() is similar to logoutOnApplicationClose(), but it sends a request to run a Cloud Code script before logging out

S2S Libraries

  • no updates

Examples

All Examples

  • Added logout on windowClosing for all demos
  • Added logout buttons to applicable demos
  • Implemented reconnect authentication in applicable demos

    • attempts reconnect automatically on app start and displays login fields if not successful

examples-unity (C# Examples)

  • Bombers, BCChat, TicTacToe all got updates and bug fixes
  • BC Clashers UI overhaul, gameplay features added
  • Invaders: Added features for when a user is connecting to a room

examples-godot (Godot Examples)

  • Improved RelayTestApp demo

example-csharp (Xamarin Examples)

  • Xamarin examples updated

examples-java (Java Examples)

  • Added logout on windowClosing for RelayTestApp
  • Added logout buttons to Android demos
  • Implemented reconnect authentication

    • attempts reconnect automatically on app start and displays login fields if not successful

examples-javascript (JavaScript Examples)

  • Implemented new logout functions as described in the brainCloud-JS changes above so that the examples will automatically logout when closed
  • Added logout buttons to RelayTestApp and Warstone as there was previously no way to logout of these examples manually
  • RelayTestApp now uses getLobbyData()

    • populate lobby types options list
    • read rules to determine if users can join in-progress matches or return to lobby with same members (END_MATCH)
    • read teams to determine game mode (Free-For-All or Team)

examples-unreal (Unreal Examples)

  • Improved test app for deployment to consoles and devices
  • reconnect and logout features as above, plus Remember Me feature
  • BCChat, Relay Basters and Tappy Chicken various improvements, features, bug fixes

braincloud-roomserver-unreal (Dedicated Demo)

  • reconnect and logout features as above

examples-swift

  • reconnect and logout features as above

examples-cpp

  • reconnect and logout features as above



Documentation and Tutorials

BootCamp

  • More Godot BootCamp video lessons

Documentation

  • All the latest API additions and changes have been incorporated into our new doc site at docs.braincloudservers.com !
releaseAnnouncement
a year ago

brainCloud 5.2 is live!

brainCloud 5.2 is a hefty release and includes:

  • a new and improved Redemption Code system
  • new user metrics and visualizations
  • a more refined Design Portal - with improvements for the whole team!

In addition, there are a bunch of significant technology upgrades under the covers (Java 11 → 17, Spring 5->6, etc.) – all to ensure that the platform remains performant and secure!


Compatibility Notes

As always - we have done all of this with an emphasis on preserving stability and backward compatibility for existing apps. Developers should be aware of the following changes:

  • Redemption Codes

    • When calling RedeemCode() without specifying the optional codeType, the API now assumes that scan codes <= 20 characters are Shared Codes, and codes >= 25  are Personal Codes.
    • All redemption codes are now stored in UPPERCASE format. All lookups first convert the incoming code to UPPERCASE for case-insensitive lookups. Before 5.2, codes were generated in lowercase and stored “as is”. 
    • Lookups of older codes will still work as long as the “[x] Support legacy case-sensitive redemption codes ('personal' scan codes)” compatibility flag is on. It defaults to ENABLED for existing apps. Note that this involves an extra look-up if the compatibility flag is enabled (which is way slower of course!).  It is strongly recommended that apps have this flag DISABLED if they don't need it!
  • Email validation

    • brainCloud 5.2 can validate the format of emails passed during Authentication, Identity, and other Mail-related calls - rejecting invalidly constructed email addresses. This enforcement will be enabled shortly after the launch of 5.2.



Release Highlights

Redemption Codes

The brainCloud Redemption Code system has been completely re-designed and overhauled.


brainCloud now supports two very different types of redemption codes:
  • Personal codes - these are the sort of individualized codes that you might find in a Happy Meal or as a gift card. Each code is unique - and can only be redeemed by a single user. 
  • Shared codes [NEW!] - these are sort of a shared coupon code system. The same shared code can be redeemed by multiple people (once each).

While brainCloud has always supported personal codes - support for shared codes is new! The advantage of shared codes is that they are much easier to manage and distribute - and therefore much more convenient for regular promotional campaigns.

Note - a full overview of the new Redemption Code system will be provided in a subsequent update post.

Devs using the older Redemption Code system should keep the following in mind:

  • Existing Redemption Code APIs work for both older (Personal) and newer (Shared) redemption codes.
  • We have, however, changed how codes are stored. The actual scan codes are now stored in UPPERCASE format (to better support case-insensitive lookups). To ensure previously generated codes still work, a compatibility flag has been added (and it defaults to enabled for existing apps). The new flag is “[x] Support legacy case-sensitive redemption codes ('personal' scan codes)”
  • When attempting to Redeem codes without specifying the optional code type (now known as campaign name), the system will assume that codes <= 20 characters are Shared Codes, while codes 25 characters or greater are Personal Codes.


Session Duration (and other metrics)

brainCloud 5 aims to improve the metrics and analytics available to app developers.

brainCloud will never be a full-on analytics platform (that’s a whole product category of its own) - but increasing the scope of what we are providing (from 7-day analytics to 30-day analytics) will greatly help our community in understanding the health of their apps and their users.

To start, brainCloud has added support for Session Duration. This is an important metric for assessing the engagement of the users of an app. But we need your help to collect it!

brainCloud will now record the duration of a session in the loginLog entry of the player… IF the app calls Logout() to inform the servers when the session is over.  Many apps are already calling this (it is an existing method on the playerState service) and thus they don’t need to change anything.

To make it more convenient, we have also added a new Logout() method to the wrapper itself. 

You can check to see if session durations are being recorded for your app by examining the Duration column in the new App > Users > Summary > User Activity screen.  If it has values - you are good! If not - add that Logout() call!

Important - to record the duration of a session brainCloud needs to be told when the session ends. This is done by calling Logout() on the wrapper or playerState service.

brainCloud 5.2 is now collecting additional metrics that will be leveraged in upcoming releases.

These metrics include:

  • session activity - we have refactored and expanded our loginLog. brainCloud now tracks the last 30 days' worth of logins for a player.
  • session duration - as mentioned above, we now record the duration (in seconds) of a session - IF the logout() method is called. 
  • hourly counts - we have increased the number of metrics that we record hourly (as opposed to daily). This will improve our ability to report on user engagement throughout a day - and relative to the previous day at this time
  • session balances - we are recording the balances of certain metrics (like XP, currencies, etc) at the start of a session - so that we can compare sessions and report when changes have occurred. This will help brainCloud to better communicate the behavior of a user during the last 30 days in your app 
  • last purchase date - a new field to help devs assess the current value of a user to their app. 

Devs will see the benefits of these metrics in future releases of brainCloud.


Portal Customization

In addition to improving the usability of the base screens themselves - we have added a new App > Design > Portal section that allows devs to customize the configuration of the Design Portal for their app. We plan to build upon this feature heavily in future releases.

To start - we have added the ability to customize elements of the User Browser and User Summary. These sections allow devs to simplify the portal by hiding options that don’t make sense for their app (i.e. there is no need to be able to search by PSN ID if your app does not support Playstation!).

On a somewhat related note - devs can now set colors to be associated with Virtual Currencies. These colors are specified on the App > Design > Marketplace > Virtual Currencies screen.


Additional Improvements

brainCloud 5.2 includes a ton of other improvements as well. These include:

  • Archived Users - Post-archive scripts

    • Devs can now choose to run a script after a user has been archived. This is convenient if deleting a user may leave a bit of secondary data that needs clean-up. Configure via the App > Design > Core App Info > Archive Settings screen.
  • Builder API / CLI

    • Now supports improved exporting and importing of cloud code scripts - so that meta-data can be preserved properly.
  • Checkpoints

    • Every time brainCloud does an import or a deployment into your app - it creates a checkpoint - which is a backup of your app.
    • Checkpoints back up your app’s meta-data, scripts, migrate-able custom entities, and migrate-able global entities. They do not include a backup of files - or any user data.
    • This release adds the ability for a dev to manually create a new backup checkpoint
    • Checkpoints are accessed via the App > Design > Admin Tools > Checkpoints screen.
  • Email validation

    • Up until now, brainCloud has been fairly lax in verifying the format of email addresses used in the system (requiring our customer’s apps to take on that burden themselves).
    • brainCloud 5.2 now enforces that emails added to the system are validly formatted. ← note - this feature will be enabled a few days after the deployment of the 5.2 software.
  • Hosting

    • Launching servers - the system has additional retry logic to help deal with errors that occasionally happen (normally associated with just-in-time patch updates) when launching cold Room & Relay Servers.
  • Relay Servers

    • Reconnects - Relay Servers now better handling reconnect scenarios. There is also an option to allow reconnects even if the user’s session has changed ("ALLOW_REJOIN_BY_PROFILE_ID": "true").
  • Push Notification Tokens

    • There have been some odd occurrences where users end up accumulating hundreds of push notification device tokens - which can result in rate limiting from Apple & Google when we attempt to send notifications.
    • We have made two changes to help address this:

      • The maximum expiry for push notification device tokens has changed from NEVER to 365 days.
      • User accounts are now limited to a maximum of 10 device tokens. Adding an 11th token will result in the oldest token being deleted.  [Note - this limit is customizable on a per-app basis. Contact support if your app needs an exception.]
  • Virtual Currencies

    • By default - our currency system prevents currency balances from going below zero.
    • That said - there are certain situations where the developer (or a CSR) may need to revoke a player's currency - and in those cases the balance _should_ go less than zero (otherwise it would open up a window for fraud).
    • The Design Portal and the APIs have been extended to incorporate the concept of "revoked" currencies.
  • Web Services

    • We have added a new [x] Preserve during deploy setting for Web Services
    • This allows your app to have different web service endpoints configured for different stage versions of your app (i.e. Dev vs. Test vs. Production) – and keep deployments from overriding those settings!




Portal Changes

We continue to rapidly evolve our next-generation design portal, Portal-X. This release brings significant improvements and new features - and we’re still just getting started!

Important - we will be removing support for our Legacy Portal soon! If you have feedback on how Portal-X isn’t meeting your needs - now is the time to tell us! Let us know via the Chat Widget or Forums!


Banners and General UI

We are working to make our Portal more useful and user-friendly - especially for non-development personnel like Product Managers and Customer Support Representatives (CSRs).

Our new Live Lock banner reflects this direction - providing a bit more information on what is going on and how to interact with it. 

We have also adjusted the controls for our Context and Screen Info banners - making it easier to understand how to toggle them on and off. 

The placement of the Screen Help hyperlink and the Sharing URL links have been updated as well.


Full-screen Script Editor

Laptop users - we have heard your cries! 

The new Script Editor layout is designed to be easier on screen real estate. We have even added a new Full-screen Mode to take things to the max! 

We have also made the API description sections of the API Explorer and S2S Explorer screens collapsible.


User Screens

One of our big goals for brainCloud 5 is to improve the experience for CSRs (Customer Support Representatives) using brainCloud.

As initial steps toward this goal - we have made several improvements to the Users section of the portal.

To start with, we have improved the experience of searching for users:

  • Search

    • Email Search - the system can now do a partial search for a user’s email identity
    • Customization - you can customize the list of search methods via the new App > Design > Portal > User Browser Settings screen.
  • User Browser

    • More info faster! - the user browser has been redesigned to surface more information (like which users are spenders on your platform).  The User Browser is also faster and more responsive now.
    • Segments - The Browse tab of the User Browser has been enhanced to support filtering the user list by segment! 
    • User Preview - more useful context regarding the currently selected user.
      Note that you can turn off the Revenue section via the App > Design > Portal > User Summary Configuration screen if your app doesn’t use brainCloud for in-app purchases.

Once you have located the user account - we have put more information at your fingertips!

  • User Summary

    • User Activity - a list of the last 30 days of user sessions
    • Recent Errors - a subset of Global Monitoring’s Recent Errors screen - but for the selected user
    • Unreadable Requests - any invalid client API requests that were received (and not processed) from this user
  • Marketplace

    • Transactions - An improved view of this user’s purchases - complete with a new chart of the past 30 days of activity.
    • Redemption Codes - an updated view of any Personal or Shared redemption code activity for this user

Lastly, we have improved the Virtual Currency screens to make it easier to understand and adjust a customer’s currency balances (via the App > Users > Marketplace > Virtual Currency screen).

Custom Entity Monitoring Enhancements

We have significantly enhanced the Custom Entities Monitoring screen (App > Global > Global Data > Custom Entities), to make it more responsive - and to offer more custom query capabilities.

The screen now requests the “document count” in the background - so that the initial page of results can be displayed more quickly. When available, it will present the currently “cached” value of the count (which it updates once the full count result is available).

In addition, there are new [Sort] and [Hint] tabs available - so that requests can be fully tailored before sending them to the server.


Portal Scalability

Sometimes our customers surprise us with how heavily they use portions of our system. >10K leaderboards? Really?!! 

We have made significant improvements to the performance of the following screens:

  • App > Design > Leaderboards > Leaderboard Configs
  • App > Global > Leaderboards > Leaderboards
  • App > Global > Global Data > Custom Entities
  • App > Global > Global Data > Global Entities ← it’s faster, but more improvements are coming
  • App > Users > User Browser




API Changes

The following changes/additions have affected the brainCloud API:

  • Authenticate

    • AuthenticateEmailPassword() will now validate the email format before attempting to create a new account. If the provided email is not in the proper format, it will return an error with a reasonCode of 40221 - with the message "Email address fails validation"
  • Identity

    • attachEmailIdentity() will now validate the email format before attempting to create a new account. If the provided email is not in the proper format, it will return an error with a reasonCode of 40221 - with the message "Email address fails validation"
  • Leaderboard

    • SysGetLeaderboardConfigsPage() / SysGetLeaderboardConfigsPageOffset() - new paged Leaderboard retrieval APIs -- useful for apps with a crazy number of leaderboards! 
  • Redemption Code 

    • AddCode() - the method for adding a new code to a Personal Code campaign will now return a warning if the scanCode provided is < 25 characters. Personal Codes should be 25 characters or greater.
    • RedeemCode() - if the optional codeType is not provided, the system assumes that codes <= 20 characters are shared ('multi-use') codes - while codes >= 25 characters are personal ('single-use') codes. 
    • SysAddMultiUseCodeType() - new cloud code-only method for creating Shared campaign redemption codes. (Also known as multi-use redemption codes).
    • SysGetCodeTypePage() / SysGetCodeTypePageOffset() - a new set of cloud code-only methods for retrieving the list of redemption code campaigns. 
  • VirtualCurrency

    • RevokeCurrency(), RevokeParentCurrency() and RevokePeerCurrency() methods have been added
  • Wrapper

    • AuthenticateEmailPassword() will now validate the email format before attempting to create a new account. If the provided email is not in the proper format, it will return an error with a reasonCode of 40221 - with the message "Email address fails validation"
    • Logout() - new convenience method used for ending a user's API session. Functionally equivalent to the playerState method of the same name, though the wrapper version includes a forgetUser option to clear the profileId saved to the device as well. ← useful for apps that force a full login each time




Libraries and Examples

Client Libraries

All Libraries

  • A new Logout() call has been added to the brainCloud wrapper. Includes a forgetUser parameter to clear the stored user's profileId.

braincloud-csharp (C#/Unity/Godot)

  • Wrapper Initialize() method has improved validation of the serverUrl parameter:

    • Prepends "https://" if not included in the URL.
    • Automatically appends "/dispatcherv2" if absent (and if there's no other slash with content included in the URL).
  • Fixed a bug with the Event service where certain calls used int instead of long for tick values.
  • Improvements and bug fixes for Godot Engine.

braincloud-unreal-plugin (Unreal)

  • Improvements and bug fixes in WebSockets
  • Updated CI to ensure stable builds and compatibility across engines and platforms
  • More tools exposed for blueprints

braincloud-cpp (C++)

  • Improved error logging for relay disconnect

braincloud-java (Java)

  • Fixed SmartSwitch bug in BrainCloudWrapper.java

    • A callback containing authentication request was not being called
  • Added Logout method to BrainCloudWrapper.java

braincloud-js (JavaScript)

  • Added Logout function to brainCloudWrapper.js

 

S2S Libraries

All S2S libraries

  • Added RTT / WebSocket support

brainclouds2s-unreal (Unreal)

  • S2S Library repository is now usable as an Unreal plugin and can be added as a submodule to a project
  • The S2S Unreal plugin depends on the BrainCloud Unreal plugin for utility functions
  • Created a new repository for the S2S Unreal Unit Test project that demonstrates the use of the S2S library

brainclouds2s-cpp (C++)

  • Added brainCloud namespace

 

Examples

All Examples

  • All examples have been updated to showcase the use of the BrainCloudWrapper Logout() call.
  • RelayTestApp Cursor and Shockwaves normalized to send percentage position that ranges from 0,0(for top left corner) to 1,1 (for bottom right corner) for reliability across devices and screen sizes.

examples-unity (C# Examples)

  • The marketplace example now has support for iOS Push Notifications and App Store in-app purchases and subscriptions.
  • BCChat example has been updated with a new UI and showcases a more automated process for handling channel connects, disconnects, and other Chat server calls.
  • Relay Test App has additional features including:

    • 2 sets of Disconnect/Reconnect buttons have been added to demonstrate how to handle Relay disconnection (IE: From a network connection loss). But only for lobbies that have the right room configuration. Info on setting this up can be found in the README.md.
    • Lobby types are now filled in using Global Properties to display in the drop-down menu from the main menu. Info on setting this up can be found in the README.md.

examples-godot (Godot Examples)

  • Added Script, Global Statistics, Player Statistics, XP, and Virtual Currency services to the demo

    • Run Cloud Code scripts
    • Increment statistics and experience points
    • Award/spend virtual currency

examples-javascript (JavaScript Examples)

  • Added Team Mode to Relay Test App

    • Users can send shockwaves to everyone (both teams), opposing team members, or the same team members based on click type (left, middle, right)
  • Added EndMatch and JoinMatch features to the Relay Test App

    • Users can “End Match” to return to a lobby with the same players rather than exiting the game completely
    • Users can “Join Match” from a lobby if other users have already started a match

examples-unreal (Unreal Examples)

  • Updated to Unreal Engine 5.3 (tested in Unreal Engine 5.4)
  • Retired 4.27 branch. A demo 4.27 app is available in the main branch.
  • New minimal test app to quickly test developer blueprints or source code on devices and consoles.
  • Improved Leaderboard project
  • FPS Example includes features such as:

    • Friend System (Includes inviting people as friends, Joining friends that are in a lobby, and remove friend)   
    • Lobby System + Lobby Invite through Friends List
    • Relay Service Rooms with Ping data (Using First Person Shooter Template)
    • Chat System, one in Main Menu as the Global Message board and second in Lobby as Lobby Message board.
    • Create Custom Game (Includes changing lobby room name, time duration, region, and map selection)
    • RTT (Real Time Tech) callbacks to demonstrate how to utilize Presence (in friends list it shows who is online), Event system(handles friend request system), Chat system for global and lobby messages, and Lobby system.
  • New BCChat project




Documentation and Tutorials

BootCamp Tutorials

  • Additional Godot tutorials are now available!


Documentation

  • All the latest API additions and changes have been incorporated into our new doc site at docs.braincloudservers.com !





a year ago

brainCloud Pricing Updates - February 2024

Hi folks,

Heads up that we will be making a few revisions to brainCloud's Public BaaS Pricing - effective for the February 2024 billing cycle.

Background: We regularly review the costs we incur in providing the brainCloud service vs. the costs passed on to you - and adjust our pricing accordingly (up or down). We work very hard to ensure that brainCloud continues to provide the very best value for your backend dollar!




brainCloud Hosting

Amazon has announced that they are charging additional fees for external IPv4 IP addresses starting February 1st, 2024. Our hosted Room and Relay servers use IPv4 IPs - so our hosting costs are affected.

As a result, the per-hour Hosting Management fee is increasing from $0.02 / hour -> $0.03 / hour.

Note - the Cloud Provider mark-up percentage of servers remains unchanged.


GameLift Hosting

brainCloud's support for Gamelift is essentially a BYOH (Bring Your Own Hosting) offering - where the hosting is done using the app developer's own AWS account (without markup).

brainCloud does charge a set API count per player delivered to the hosted GameLift servers.  Our analysis shows that this count isn't fully covering the costs of the associated lobby + matchmaking services - so we are increasing the API count Per Player fee from 5 -> 10 API counts.




These updates will be updated on getbraincloud.com in the next week or two.

Feel free to reach out to support if you have questions.

releaseAnnouncement
a year ago

brainCloud 5.1 is live!

brainCloud 5.1 is live! This release includes:

  • Godot Support!
  • brainCloud Blast! (an Unreal Server example!)
  • Room Server DevTool
  • Enhanced Global Entities
  • PS5 friend optimizations

And much more. Read on for the full details!



Release Highlights

Godot Support

brainCloud now officially supports the Godot Game Engine!

We have added instructions on how to get started to the readme of the braincloud-csharp repo.  <- Note, you may have to switch to the develop branch if you are checking it out early!

And stay tuned - we are working on more brainCloud examples in Godot!


brainCloud Blast! (Unreal Room Server Example)

We're pleased to announce the availability of brainCloud Blast, our latest Unreal example game. 

Blast is a fun little FPS built on Unreal 5.1. Most importantly - it is a full authoritative Room Server example built using Unreal dedicated server tech. It is a great example for teams looking to build multiplayer Unreal games on brainCloud!

Check out braincloud-roomserver-unreal for more info!


Room Server DevTool

To go with our new Room Server example - we have also released a cool little utility that allows you to run brainCloud Room Servers on your own workstation. This gives multiplayer developers the option to run + debug locally -- while still being fully integrated with brainCloud!

Check out braincloud-roomserver-devtool for more info!


Enhanced Global Entities

The Global Entity service has been enhanced to support the optional migration of un-owned entities (also referred to as system entities) during deployments and/or imports (i.e. similar to the handy migration feature for Unowned Custom Entities!).

This makes Global Entities very convenient for maintaining your app's reference data - which is how we refer to the data your app uses that isn't owned by users and does not dynamically change during a session (i.e. think tuning files, level design files, country lists, player roles, etc.)  

This sort of data is essentially an extension of the meta-data of your app -- and now brainCloud can automatically migrate those entities with the rest of your meta-data during deployments!

This is a great new option for:

  • Developers that were already using Global Entities for this purpose - but were manually migrating them via the export+import facilities after deployment.
  • Developers that are currently using Custom Entities for this sort of reference data. (Remember - Global Entity storage is free - no Plus! plan required!)

(For our private licensees - Global Entities are also more efficient for reference data because they don't consume a Mongodb namespace for each custom collection).

⚠ Note - Migration of Global Entities during Deployment must be configured specifically on the Design > Cloud Data > Global Entities page. There are no changes to the deployment process if this step has not been done.


Additional Improvements

Additional improvements in this release include:

  • PS5 Friend Optimizations - brainCloud now batches PS5 friend calls for a significant performance improvement!
  • Relay Server Enhancements - Relay Servers now better support long-lived lobbies - by automatically sending in heartbeats to keep the lobbies alive
  • iOS Push Notifications - Remove length check from APNS token handling to appropriately handle tokens of unusual size
  • Job Queue - the status column in the Global > Logs > Job Queue screen is now color-coded for easy readability. 
  • Builder API Enhancements - added new features for:
    • Getting and setting an app's compatibility flags
    • Ability to set brainCloud properties (Super API only)
  • For Private Licensees
    • Team Usage - We have added a new Super > Metrics > Team Usage screen - to easily distribute brainCloud costs across teams
    • Themes - Added the ability to control the default theme (light vs. dark) and whether users can override it



Client Libraries and Examples

Client Libraries

braincloud-csharp (C#/Unity/Godot)

  • Now supports Godot!
  • Now supports actual PING-based latency tests for the FindLobbyWithPingData() API calls.  (Used to use simple HTTP-based requests before, but newer Unity versions restrict non-HTTPS calls.)
  • Fix to the AuthenticateHandoff() call when called from the brainCloud Wrapper
  • Improved test beds for Android and iOS

braincloud-unreal-plugin (Unreal)

  • This git repo has been renamed from braincloud-unreal-plugin-src to braincloud-unreal-plugin
  • BrainCloud Widget can be added to your project to help set up your portal-connected apps
  • Verified for Unreal Engine 4.27 through latest 5.3.1
  • IWYU headers incorporated for BCOnlineSubsystem
  • Fix to end match and disconnect in RelayComms and RTTComms

braincloud-cpp (C++)

  • Fixes for latest clang (XCode 15)

braincloud-java (Java)

  • Fix to the AuthenticateHandoff() call when called from the brainCloud Wrapper

braincloud-js (JavaScript)

  • Fix to the AuthenticateHandoff() call when called from the brainCloud Wrapper

braincloud-objc (Objective-C/Swift)

  • Improved podspec, removes warnings and adds header search paths


Examples

Unity

  • New MarketPlace and Push Notification example

Unreal

  • brainCloud Blast! (Unreal Room Server Example)(see more info above)
  • End Match feature added to RelayTestApp

Objective-C/Swift

  • New example to build with pre-compiled framework (without cocoapods)
  • Updated for Android Studio and XCode

C++

  • Updates to GUI libraries and deploying to mobile devices



Portal Changes

Colored job status

Colored job status for the Global > Logs > Job Queue screen.

brainCloud 5.1 includes some significant Portal improvements:


General

  • Improved spit and polish! - we have upgraded to Material UI v5, added strategic drop shadows, and more :)
  • 6-digit appIds - SmartSearch has been enhanced to support 6-digit appIds
  • Performance Improvements - you should see performance improvements in several screens, including App > Design > Cloud Data > Custom Entities.

Team Section

  • Platform News - Now integrated with our new-and-improved updates site

App Section

  • API Explorer - all links have been updated to point to the new docs!
  • Entity Editors - we are working to make our new entity editors more useful - especially on smaller screens. 
  • Error Log - the Global > Logs > Errors screen better handles larger error logs - including a new option to view the log in a separate window
  • Global Entities - the new Design > Cloud Data > Global Entities screen allows devs to configure which Global Entity types should be migrated during deployments. Plus there are new options in the Design > Admin Tools > Checkpoints, Design > Admin Tools > Configuration Data and Design > Admin Tools > Deployment screens for including/excluding Global Entities during those operations. 
  • Job Queue - the status column in the Global > Logs > Job Queue screen is now color-coded for easy readability. 
  • User Brower - added the ability to Hide multiple logins from the same user to the Recently Active tab.
  • User Banner - added Copy User URL button to the User Banner

Super section (Super-Users only)

  • Super Dashboard - added the Recent Forum Posts widget to the Super Dashboard screen
  • Team Usage - added new Metrics > Team Usage screen




API Changes

Friend Service

  • GetPresenceOfFriends() - Now returning the list of friend platforms that a friend is on

Push Service

  • RegisterPushNotificationDeviceToken() - iOS tokens are now sanitized when they are registered



Miscellaneous

  • Documentation updates
    • Our new documentation site is live at docs.braincloudservers.com!
  • Important Fixes/Changes
    • BCLOUD-5696 - Add long-lived lobby support to relay server
    • BCLOUD-5933 - Now returning list of friend platforms that a friend is on in presence calls
    • BCLOUD-5830 - Sanitize IOS push token on register rather than send
    • BCLOUD-5815 - Remove length check from APNS token handling to appropriately handle tokens of unusual size
    • BCLOUD-5612 - BuilderAPI - add ability to set a brainCloud property
    • BCLOUD-5778 - BuilderAPI - Add support for gettings/setting app compatibility flags
    • BCLOUD-5829 - Retrofit all cron jobs to use java routes and super property configuration
    • BCLOUD-5836 - Update NewRelic agent to version 8.6.0
    • BCLOUD-6153 Fixed API errors table to display callName instead of apiOperation
    • BCLOUD-6163 Segment criteria using AmountSpent is comparing input dollar amount (with decimal) to users' amountSpent in cents
    • Upgraded Portal-X to use Material UI 5 - so everything performs snappier!
  • Plus miscellaneous fixes and performance enhancements…


releaseAnnouncement
a year ago

brainCloud 5 is live!

brainCloud 5 is finally here – and it will boost your team’s productivity to new heights!

brainCloud 5 features:

  • Design Portal (Portal-X) – our completely re-designed and re-engineered web environment
  • Integrated Forums to build community
  • brainCloud BootCamp tutorial videos to get developing in brainCloud quickly
  • Documentation system – to allow you to find what you need faster (even from within our script editor!) (coming soon!)

But don’t take my word for it – check out our trailer!


We will be adding tons of new features to the brainCloud 5 platform in the coming months.

Stay tuned – and thanks for choosing brainCloud!


Release Highlights

Portal-X

Our next-generation portal, Portal-X, is now the default for all users!

For those who don’t know, Portal-X features:

  • Completely new navigation model – quicker and easier to find things, plus mobile-friendlier!
  • All screens are designed to be more scalable – for the largest apps with the largest communities!
  • New multi-pane Cloud Code Editor with syntax highlighting!
  • Dark and light mode support!
  • RTT-enabled API Explorer!
  • New Dashboards and analytics screen for more information on your apps!

For more information on some of the basics of Portal-X – check out the brainCloud 4.15 release notes. Or go to https://portalx.braincloudservers.com now and give it a try!

Note – our legacy portal will continue to be available for the next few releases. You can access it by selecting “Switch to Legacy View” from the right-hand Personal Panel menu in Portal-X.

Forums Integration

We realize that our existing Forums don’t get used much. We aim to change that!

Not only does our new Team Dashboard prominently feature the latest forum posts – but starting in 5.0 users will now be automatically signed into the forums if you launch them from Portal-X!

So please – take a moment – explore the forums – and give us some feedback on brainCloud 5!

brainCloud BootCamp

We are very pleased to announce the general availability of brainCloud BootCamp – our new online training site!

We have been working on these lessons for over a year – and are super-happy to be able to finally be able to share them with you!

There are over 75+ video lessons available – organized into two “Bootcamp” courses to start:

  • Unity Bootcamp – Everything you need to know to get brainCloud up and running in Unity!
  • Unreal Bootcamp – Everything you need to know to get brainCloud up and running in Unreal!

And the best part – Bootcamp is completely free!

Check them out at https://bootcamp.braincloudservers.com


Additional Features

In addition to the new brainCloud 5 features – there are some important functionality-level additions in this release.

These features include:

  • Updated Google purchase integration – Google has made a bunch of changes in the past few months and we’re just catching up! brainCloud 5.0 adds support for Google Play Billing Library version 5.
  • Improved iOS Appstore purchases – a new parameter allows apps to exclude returning old purchases in receipt data. Especially helpful when dealing with recurring subscriptions.
  • Email “cc” and “bcc” field support – has been added to the SendAdvancedEmailByAddress() api call.
  • Send events to multiple profiles – in a single call (see API section).
  • Improved Long-lived lobby support – servers can send SYS_ROOM_KEEP_ALIVE calls to lobbies to ensure stay around as long as the room/relay servers themselves.

Server improvements

  • Server support for System RTT Connections ← we will be building on this
  • Better RTT Manager & Event Server connection management – improves RTT scalability
  • Better detection of duplicate packet ids (server-side)

Client Libraries and Examples

  • Unity
    • updated Authentication Example – includes Google, GoogleOpenID, Apple and Facebook authentication.
  • Unreal
    • added TCP Support for Relay Comms
  • C#
    • Improvements to JsonResponseBundleV2 deserialization
  • JavaScript
    • Updated our JavaScript libraries to work better with K6
    • Produced updated K6 example package
  • Objective-C/ Swift 
    • Updated to JSonCpp 1.1.4 
    • Updated Swift examples for XCode 14.3
    • Cocoapods updated

Portal Changes

Of course – all of Portal-X is new!

But you’ve had access to it in the 4.15 preview – so we will focus on the new features this release.

Note that these new features only refer to Portal-X. We will no longer be making feature enhancements to the legacy portal (though we may deprecate features for safety reasons in the coming months).

We have made the following portal changes:

Team Menu

  • Dashboard
    • The Helpful Links section has been updated to provide more helpful links!
    • The Recent Forum Posts section now integrates more tightly with the Forums – and will automatically log the user (creating an account if necessary) if a forum link is clicked.

App Menu

  • Dashboard
    • Dashboard graphs now work properly in Safari!
  • Design > Admin Tools > Deployment
    • A new option, “Do not migrate Global Entities”, has been added to the deployment screen – but it is not editable in 5.0. This option is related to new Global Entity enhancements coming in a future release.
  • Design > Cloud Code > Scripts
    • The editor now stays in Edit mode after the script is saved.
    • The script editor now automatically senses the tab settings for a script. Those settings can not be overridden by the developer as well.
    • Improved handling of editor sessions and script versions.
  • Reports > Usage > Profile
    • The Profile screen provides a useful summary of the feature and resource usage of the app.
  • Reports > Usage > Script Usage
    • The new Script Usage screen can be used to get a better understanding of the performance profile of an app’s cloud code scripts.
    • It is especially helpful when optimizing an app to improve performance / API count usage.

Miscellaneous Changes / Fixes

  • Documentation updates
    • Our legacy documentation site has been updated with the latest 5.0 APIs
    • We also have a brand new documentation site that we will be rolling out very soon!
  • Important Fixes
    • TBC
  • Plus miscellaneous fixes and performance enhancements…


releaseAnnouncement
a year ago

brainCloud 4.15 is live!

Okay – we said that 4.14 was the last release before 5.X – but it turns out that enough under-the-hood changes are happening that we feel it is best to separate the launch into two releases.

The good news is that we are making Portal-X available to all users with this release! (see details below).



Note - Although 4.15 doesn’t have a lot of API changes – it does have an enormous amount of under-the-hood changes – including:

  • Upgrade from Java 8 → Java 11
  • MongoDB Atlas 5.X support
  • Updates to Spring, Karaf, Camel, & Vert.x frameworks and other libraries
  • Refactoring of Redis connections across the board
  • Migration to standardized apiserver images
  • Removal of our legacy portal SSO ← mostly affects private brainCloud deployments
  • Misc security and performance improvements


The release has been heavily tested (including several canary traffic tests) – but if you notice anything amiss – please report it ASAP! We will jump on it right away!


Release Highlights

Portal-X

Portal-X is now enabled for all users!

See the Portal Changes section for more info!


Returning Friend Platforms

The Friend Service’s ListFriends() call now returns a list of the friend platforms that each friend was found on – which helps to optimize certain usage scenarios.


Archive Deleted Accounts

When we introduced our Auto-Delete service (i.e. Dormant Account Deletion) – we added a feature to keep a temporary archive of a user’s account. We later expanded this feature – so that user accounts that were deleted programmatically were also archived if this feature was enabled.

In brainCloud 4.15 we are officially promoting this functionality into a separate Archive Account feature – so that apps can enable archiving of accounts-to-be-deleted – even if the app is not using the Auto-Delete service.

You will find the new feature under Design | Core App Info | Archive Settings in the portal.

Note that the settings for this feature are not updated or overwritten during deploys. This allows an app to have separate archive settings on a per app-instance basis.

Also note that – because this feature uses Custom Entities – it is limited to apps on Plus or Bulk+ plans.


Custom Entity “Explain” Support

Developers are now able to access Atlas “explain” information for Custom Entity GetPage() queries – via the API Explorer ONLY!

This can be useful when evaluating whether your indexes are sufficient to cover specific queries. The explain results can tell you what indexes Atlas will utilize for the query – and stats on the resulting query performance.

To request the explain data for a GetEntityPage() query – simply supply an “options” section with the desired “explain” level. For example:

The following 3 levels are supported:

  • QUERY_PLANNER – MongoDB runs the query optimizer to choose the winning plan for the operation under evaluation – and returns the queryPlanner information for the evaluated method.
  • EXECUTION_STATS – MongoDB runs the query optimizer to choose the winning plan, executes the winning plan to completion, and returns statistics describing the execution of the winning plan
  • ALL_PLANS_EXECUTION – MongoDB runs the query optimizer to choose the winning plan and executes the winning plan to completion. In “allPlansExecution” mode, MongoDB returns statistics describing the execution of the winning plan as well as statistics for the other candidate plans captured during plan selection.

The explain results are returned in a map named explain under the data section of the results JSON.

For more information on Explain and the results returned – see this MongoDB page – db.collection.explain()

Client Library Improvements

There aren’t a ton of new API calls in 4.15 – but there are some important improvements to the client libs themselves – so be sure to grab them!

  • C++ / Objective-C / Swift Library
    • RelayComms: Fix for tracking latest packetIds of ordered packets when joining an in-progress game session (BCLOUD-4584)
  • Unity Library
    • RelayComms: Fix for tracking latest packetIds of ordered packets when joining an in-progress game session (BCLOUD-4584)
    • Remember – our Unity Library is now available via Unity Package Manager for easy updates!
  • Unreal Engine
    • Migrated websockets to use Unreal’s IWebSocket for greater cross-platform compatibility (including Xbox!). 
      • Note – IWebSocket is considerably less performant than the previous libwebsocket implementation. As such, we do not recommend using WebSocket for real-time RelayServer communications – use UDP instead.
      • Update – there is a configuration fix to improve IWebSocket performance – check the library source readme!
    • RelayComms: Fix for tracking latest packetIds of ordered packets when joining an in-progress game session (BCLOUD-4584)
  • Java
    • RelayComms: Fix for tracking latest packetIds of ordered packets when joining an in-progress game session (BCLOUD-4584)
    • Our Java libs are now published on Maven in 3 packages: braincloud-java, braincloud-java-android and brainclouds2s
    • S2S library improvements
      • Added standardized log message format (now includes timestamps at ms level)
      • Fixed bug where a failed request would cause future requests to be ignored
      • Fixed bug where an error in the message callback would cause future requests to be ignored
      • Fixed bug where server response would be parsed as json even when no json would be available
      • Improved error responses to more accurately reflect what actually failed
  • JavaScript
    • Improved packetId handling and unit tests



Portal Changes

Portal-X is now available to all users!

Our legacy portal is still the default for 4.15 – but Portal-X is available as an alternate UI for everyone. Here is how to access it:

Launching Portal-X

After logging into the legacy portal, just click on your user image in the top-right hand corner, and click Open Portal-X to try out our new Portal. You can also navigate to it directly via https://portalx.braincloudservers.com.

You can switch back to the legacy portal at any time by clicking Switch to Legacy View from the top-right menu – or by navigating to https://portal.braincloudservers.com.

Portal-X Menus

One of the biggest changes to Portal-X is in the area of navigation.

In Portal-X, we have collapsed (and expanded) the main menus to a single left-hand menu system. You first switch between the Team and App menus via the tabs at the top. From there, the main sections are:

  • Design ← this is the old Design menu, much as it was in legacy portal
  • Global ← this is the old Monitoring | Global Monitoring menu
  • Groups ← this is the old Monitoring | Group Monitoring menu
  • Users ← this is the old Monitoring | User Monitoring menu
  • Reports ← this is the old Reports menu, largely unchanged

Menu Flyouts

To aid in navigation – we have added fly-outs to the app menus. Click on a fly-out to expand it and quickly view all of its sub-menus!

Dashboards

Portal-X features improved Team and App Dashboards – providing more information at a glance!

Smart Search

The smart search bar at the top of the screen allows you to quickly search across the system for apps, users, screens and more!

Favorites

Click the star in the breadcrumb menu to add a screen to your favorites list. Clicking Favorites from the menu shows you your list – plus the most recent screens you have visited.

Dark Mode

You can toggle between Light/Dark Themes via the right-hand menu (click on your profile pic in the top-right corner)

Getting Help!

Click the (?) icon to display a list of help resources – or click the chat bubble next to it to talk to Support!

More Portal-X Features

Be sure to check out these additional Portal-X features:

  • Brand new multi-pane Script Editor with Intellisense!
  • New API Explorer with RTT support!
  • New User Browser with more ways to look up users
  • New Profile screen gives a deeper overview of brainCloud resource utilization for your app
  • New Script Usage screen makes it easier to assess, prioritize and track script optimizations over time



API Changes

There are very few API changes in this release:

  • Friend Service
    • ListFriends() – now returns the platforms that a friend was discovered upon as part of the results
  • HTTPClient
    • New PostTextResponseJson() – call fills in this missing usage scenario
    • General – a default accept header is now added to all calls to improve overall compatibility. This new behaviour is disabled by the new compatibility flag – which is enabled by default for existing apps: [x] Do not add default response media type accept header for responses (can interfere with request signatures if apps are not aware)



Miscellaneous Changes / Fixes

  • Updated libraries
    • All libraries have been updated with the latest API enhancements. Go get ’em!
  • Documentation updates
    • The Learn More help pages have largely been updated for Portal-X – though additional updates are still in progress
  • Important Fixes
    • BCLOUD-26 Modify RTT event server to use session-based S2S calls
    • BCLOUD-1308 Add Custom Entity API support for explain() for paging queries
    • BCLOUD-3253 Move to Camel 3.11.7 (from 2.25.4)
    • BCLOUD-3436 Add more checking to Ultra Identity Validator
    • BCLOUD-3697 Review use of IGameDao getAllGames() and optimize where possible (especially if only gameId required)
    • BCLOUD-4182 Audit log paged read requests should only returns logs for apps non-admin team member has access to
    • BCLOUD-4294 Tighten up PSN service type with an enum and server side validation <- I think this might have been released in 4.14, but didn’t make it into release notes?
    • BCLOUD-4370 Further work on segregating redis connections
    • BCLOUD-4371 Retire the old spring oauth support to get rid of deprecation warnings and possible security vulnerabilities ← need to change prod-baas before traffic test
    • BCLOUD-4372 Retire jets3t component as it is no longer required and has not been updated since 2015
    • BCLOUD-4545 Implement super property caching for Client API Dispatcher
    • BCLOUD-4557 Add trackable New Relic events (errors?) for Portal Login failures
    • BCLOUD-4563 Look for blank gameId as well as null in checking logic in the S2S dispatcher
    • BCLOUD-4575 Marketplace – Products fail to load AND globalApp PRELOAD fails if BAD defaultPriceId — need to use readMultipleRobust DAO method to skip products that fail on deserialize
    • BCLOUD-4700 Fix for NPE in Global Monitoring->S2SLogs
    • BCLOUD-4701 User should not be able to delete currency when it is added to Item Catalog
    • BCLOUD-4751 Convert DeferredMessage processing to Newer DeferredCallback mechanism (includes OneWayMatch)
    • BCLOUD-4769 Orphan Room Server instances are not being terminated
    • BCLOUD-4777 New sysMetrics collection to collect nightly global (and some app) collections totals
    • BCLOUD-4780 New server endpoint to delete “INVITED”, “REQUESTED” users in groups screen
    • BCLOUD-4784 Update libraries identified in docker hub vulnerability report (snakeyaml, commons-collections, google auth client (1.33.3), spring (5.1.X->5.3.27), jason-smart (1.3.3->1.5), commons-fileupload(1.3.3->1.5))
    • BCLOUD-4785 Update Redisson library to 3.15.6 -> 3.16.8
    • BCLOUD-4791 NPE from AnalyticsEventConsumer process
    • BCLOUD-4799 Remove DeferredMessage karaf component and core service as it is obsolete
    • BCLOUD-4800 Implement a “system” RTT connection for non-player RTT interactions
    • BCLOUD-4804 Evs healthcheck now returns non-200 status code if connectivity is lost with RTTManager or S2S server
    • BCLOUD-4806 Server changes to move to MongoDB 5
    • BCLOUD-4818 Make SEDA queue sizes configurable via brainCloud property
    • BCLOUD-4826 Update vertx version from 4.2.1 to 4.2.7
    • BCLOUD-4834 Improve some less efficient queries (including queries that don’t require collections to be checked / created)
    • BCLOUD-4835 Create a start/poll version of direct api call method used by API explorer
    • BCLOUD-4836 Support audit logging from purge project and log team update for unlinking app from team for Auto Hard Deletion processing (excluding before and after snapshots)
    • BCLOUD-4851 Configurable security checking of packetId -1 (being used for deferred message handling)
    • BCLOUD-4852 Event server doesn’t handle failed S2S calls very well with new session-based S2S client
    • BCLOUD-4853 Added friendPlatforms to FriendService->ListFriends call
    • BCLOUD-4854 Make S2S local dispatcher asynchronous
    • BCLOUD-4862 Add Http client method postTextResponseJson
    • BCLOUD-4873 Improve bc-tools support for argo-rollouts
    • BCLOUD-4874 NPE when saving unset PSN integration
    • BCLOUD-4880 Getting ClassNotFoundException with memcache locks in karaf
    • BCLOUD-4851 Configurable security checking of packetId -1 (being used for deferred message handling)
    • BCLOUD-4872 Add server support for updating of a players “createdAt” timestamp from portal
    • BCLOUD-4890 Legacy Portal – Support auto redirect to Portal-X when hitting the “/login” JSP.
    • BCLOUD-4915 Remove @Required annotations from server classes and do applicable clean up of imports
    • BCLOUD-4916 Breakup existing LogProducer class into a log producer for api servers and one for everybody else
    • BCLOUD-4966 Provide support to make S2S Explorer session based similar to API Explorer
    • BCLOUD-4970 Need more Dowloader stats to better report errors – add gameId and profileId to new relic transactions
    • BCLOUD-4979 Change audit log for Quests to include serialized Tasks data
    • BCLOUD-5010 Update deprecated Nimbus JWT support – affects auths – Apple, FacebookLimited, GoogleOpenId, Ultra, PSN4/5, Nintendo
    • BCLOUD-5018 Update deprecated code for braincloud-camel-sqs component
    • BCLOUD-5020 Update Spring ExposablePropertyPlaceholderConfigurer based on deprecated PropertyPlaceholderConfigurer
    • BCLOUD-5022 Updated deprecated JsonParser reference
    • BCLOUD-5023 Update Microsoft client to use non-deprecated security and reflection mechanisms <– NOTE – test by verifying Microsoft store receipt! (probably cannot do!)
    • BCLOUD-5024 Update Saml service to use non-deprecated auth method
    • BCLOUD-5032 A couple more misc deprecation updates – CustomOidcUserService & FacebookCreditService <- test with Forum Login and Facebook purchase
    • BCLOUD-5039 Server build script does not recognize failures properly
    • BCLOUD-5043 Added support for Google Analytics 4
    • BCLOUD-5051 Fix camel http client code that the camel 3 update broke
    • BCLOUD-5054 Standardize apiserver images ← ensure deployment dir is ready for this
    • BCLOUD-5061 More direct error reporting when webhook output is wrong
    • BCLOUD-5063 Remove activemq/sqs replacement classes
    • BCLOUD-5073 When scheduling a script inside another script, the client wants the scriptData shown inside the Context of error log
    • BCLOUD-5081 Provide support to make S2S Explorer session based similar to API Explorer
    • BCLOUD-5082 Assign unique session ids to webhook calls
    • BCLOUD-5083 [Portal-X, Legacy] Design | Servers | My Servers – When user change Server Type from ‘Custom Server’ to ‘Relay Server (hosted)’ or ‘Room Server (hosted)’ an error message display
    • BCLOUD-5115 Make Oauth client auth method configurable
    • BCLOUD-5123 System metrics indexes
  • Plus miscellaneous fixes and performance enhancements…
Announcement
2 years ago

Enable new 2FA today!

Twilio is retiring the Authy API that brainCloud uses as of May 1, 2023.

All 2FA users MUST migrate to our new Google Authenticator compatible system by May 1st, 2023.

Users who do not migrate by that date will find their accounts locked as a security precaution. See the FAQ below for instructions on how to re-enable your account. 


Enabling the new 2FA

The good news is that our updated solution (which uses the Twilio Verify API), is Google Authenticator compatible – so you can use any compatible app – including:

  • Google Authenticator
  • Microsoft Authenticator
  • Twilio Authy 

(Why is Authy on this list? Although Twilio has terminated the Authy Server API – they continue to fully support the app. It is still a good authenticator that works well across multiple devices.)


Configuring the new 2FA is simple:

  • Click on your name in the top-right corner of the Portal
  • Choose Edit Profile
  • Navigate to the Two-factor tab

You will see one of the following two screens.  If you’ve previously enabled our Authy-based 2FA – you will see a screen that looks like this:

If you are enabling 2FA for the first time, you will see a screen that looks like this:

Click either the [Verify API] or [Click to Enable 2FA] button – depending upon the dialog you see – to continue.

Click the [Link] button to continue.

Then get your Authenticator app out – and scan the QR code on the next page.

And finally, enter the code displayed in the app to finalize linking your account.

That’s it. Your account is now configured with our shiny new 2FA system.

The next time you login, you’ll see this prompt:

Note that you can choose to have brainCloud remember your device (so that you don’t have to re-enter the Authenticator code at each login) for 30 days.


Frequently Asked Questions

How can I tell if my account is using Authy-based 2FA?

The easiest way to be is to check your user settings:

  • Click on your name in the top-right corner of the Portal
  • Choose Edit Profile
  • Navigate to the Two-factor tab

If you see that your account is linked to a phone number (and the red Authy logo below it) – then your account is currently using Authy for 2FA verfication.


What will happen if I don’t migrate by May 1, 2023? 

At the stroke of midnight UTC on April 30th, we will lock all accounts using Authy 2FA that have not migrated to the Verify API.  This is to prevent any nefarious actors from being able to log into a newly unprotected account.

To re-enable their accounts, users will need to invoke the “Forgot Password” link on the Portal – which will email them a link to use to reset their password. (This proves that the actor logging in has access to the user’s email account).

Once reset, the user will be able to log back into their account.

I like the Authy App. Can I still use it?

We like it too! And yes you can.

You can use Authy as your Google Authenticator app for validating brainCloud Portal logins. (And note, although Twilio is no longer supporting the Authy API, they have stated that Authy is still supported as a client app for this very purpose).

Unfortunately that doesn’t give us the one-touch capability that brainCloud users used to enjoy. Twilio says that they are working to enhance their APIs to support Authy One-touch in the future – but there is no timeframe for delivery. If/when it becomes available, we will strongly consider supporting it.

What if I am using a preview of Portal-X?

If using Portal-X, the screens are a bit different. This screen (with the Authy logo, and the yellow warning above) tell you that you are using the old 2FA system. Click on the [VERIFY API] button to enable the new 2FA system.


releaseAnnouncement
2 years ago

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() (with isOwnedByGroupMember == false) and SysCreateGroupEntity()) – 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 empty map, but when acl was null, it defaulted to { "member": null, "other": 1 } – which was both less secure and problematic.
  • 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
  • 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 an eventId of "" (i.e. empty string).
  • Group
    • For un-owned Group Entity Creates (i.e. CreateGroupEntity() (with isOwnedByGroupMember == false) and SysCreateGroupEntity()) – 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
  • 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()
  • Identity
    • calling Identity.GetChildProfiles() will no longer return the child profiles for apps that have been soft-deleted
  • Leaderboard
    • New PostScoreToDynamicLeaderboardUsingConfig() and PostScoreToDynamicGroupLeaderboardUsingConfig() have been added as more flexible versions of the older API calls. In particular, these new calls allow the developer to specify an optional expireInMins 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!
  • Messaging
    • New SysDeleteMessages() call allows multiple messages to be deleted in a single call.
  • 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.

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…