Release 2.19.0

Firstly, a reminder that we are on reduced support availability over the holidays while our team spends some well-earned time with their families (Dec 24th, 2015 – Jan 4th, 2016).  The servers of course will still be fully monitored, and we’re definitely still available to respond to emergencies.

This being our holiday release, we thought we’d try to finish off the year by focusing on a few more customer requests. There’s something in here for everyone!

Release Highlights

Key features of this release include:

  • Profanity Filter API + WebPurify Integration – we’ve had several requests from developers to support profanity filtering in the platform. Although simple enough in concept, profanity filtering gets pretty complicated when you start taking into account multiple languages, custom whitelists and blacklists, identifying vs. replacing profane strings, etc. We’ve addressed this in two parts – we’ve added a new abstract Profanity Filter API to brainCloud, and partnered with the good folks at WebPurify to allow you to easily add profanity filtering to your apps.
  • User Export [Beta] – we’ve always said that brainCloud’s data is your data – and we happily provide custom exports when requested. That said, it’s a lot more efficient to provide a way for you to export your user data yourself – which is of course what our new User Export feature is for. So, whether you are looking to do some additional analytics analysis, or maybe import your user e-mails into a mailing list platform – brainCloud now supports exporting the data you need in both .CSV and .JSON formats.
  • Idle timeouts – we’ve refactored how the Design Portal handles user timeouts. To start, we’ve extended the timeout to 1 hour (from 20 minutes) – but we’ve also added a dialog to warn you that the session is about to timeout, and to definitely tell you once you have timed out. We’re much happier with the new system. Let us know what you think.

 

Portal Changes

Changes to the portal:

  • WebPurify Integration settings – can be found in Design | Integrations | Manage Integrations. You simply enter the WebPurify API key, and choose what languages to filter on. Note that you can choose to automatically filter the user’s name field. If selected, brainCloud will automatically filter all calls to UpdatePlayerName() – and raise an exception if the name contains profanity. You can get a WebPurify account for as little as $15 / month at www.webpurify.com. Note that for brainCloud billing purposes, calls to WebPurify are counted as an external web service API call.
  • Refresh button in Custom Files – we now cache the list of custom files, so we no longer have to access the file system to retrieve the directory.  This cache is updated each time a new file is added or deleted – but should you have reason to think that it’s out-of-date, just hit the [Refresh File List] button on the Design | Custom Config |  Files page.
  • Export User Data – available under Reporting.  You can specify some filter criteria for which users to export, as well as select what types of data to include. We support both .CSV and .JSON file formats. Note – there are more data options associated with the JSON format (since it’s more flexible).
  • Web Idle Timer – we’ve refactored how the web portal handles user timeouts. We’ve extended them timeouts, added better activity tracking, and improved the communication of when the session has expired. Let us know what you think.

 

API Changes / Additions

Changes and additions to the API:

  • Profanity Filter API – There are 3 key methods for the Profanity Filter API – ProfanityCheck() returns true if foul language is found; ProfanityReplaceText() will actually replace bad words with a substitution character that you provide; and ProfanityIdentifyBadWords() returns a list of the bad words found (mostly useful for debugging). Remember, you need to set up a WebPurify() account to enable these APIs.
  • Player State JSON enhancements – we’ve enhanced our Authentication and ReadPlayerState() calls to return additional user data – basically all the info that is displayed in the User Summary page of User Monitoring. So in addition to the slew of data that was already being returned, you now get emailAddresscreatedAt, lastLogin, previousLogin, language, timezoneOffset, amountSpent (in cents) and refundCount.  Note that amountSpent refers to the reference price that you specify in the IAP entries, and is not a precise estimate of what a user paid, since it doesn’t take into account currency exchanges, the platform’s take, etc.

 

Miscellaneous Changes / Fixes

Additional improvements to this release:

  • Big performance boost to GetFileList() and GetUpdatedFiles().  We now cache the data instead of reading from the file system each time – so performance is now approximately 3 times faster!
  • brainCloud is now available directly from the Unity Asset Store!  (The brainCloud Bombers and brainCloud Space Shooter example games are there too!)  Feel free to drop by and give us a review! 🙂
  • All client libraries have been updated with the latest APIs
  • Misc defect and performance fixes

 

Release 2.18.0

Release Highlights

This release marks the debut appearance of a key roadmap item for brainCloud – our DataStream Architecture. Currently in beta, the concept behind DataStream is to enable a meaningful flow of data and events from your apps to value-added tools. And to do this as painlessly as possible – i.e. little to no client code – leveraging the data and server-side interactions that brainCloud already knows about.

brainCloud DataStream Architecture

 

DataStream is being implemented with the concept of extensible channels – which will be used to enable a great variety of integrations.

Our first channel is a doozy – Segment.com.  Connecting to Segment instantly gives us over 100 service integrations – including MixPanel, Google Analytics, HeapTreasure Data and more.  There’s even support for generic webhooks.

Trying out DataStream is very simple. To do so:

  • Register for a free Segment Developer account, and create a project to use
  • Go to the brainCloud portal, and enter the Segment project information in the new Design | Integration section
  • Optionally connect another service to Segment – like MixPanel, Google Analytics, etc.

That’s it – once you do this brainCloud will immediately begin sending the following events:

  • Identify – contains base information (like profile id, name, e-mail etc) about a user interacting with Segment. Sent before we send any other events associated with that user.
  • Login – triggered when a user logs in (via the Authenticate API)
  • Register – triggered when a new user account is created (via the Authenticate API)
  • RecordedScore – triggered when a user posts a score to a leaderboard
  • LevelledUp – triggered when a user gains an experience level
  • AwardedAchievement – triggered when a user is awarded an achievement
  • AwardedMilestone – triggered when a user is awarded a milestone
  • AwardedQuest – triggered when a user is awarded a quest
  • WasSentNotification – triggered when a remote push notification was sent to the user
  • CompletedOrder – triggered when a user completes an IAP purchase

In addition, your app can send custom events of it’s own (from the client or via Cloud Code).  There is a new DataStream service with three methods to support this:

  • CustomTrackEvent – used to track custom user behaviours throughout your app – for example, a puzzle game might record “RoundStarted” with information on what round the user is playing, and what boosts they’ve selected for the round, together with a “RoundCompleted” event that summarizes the results. CustomTrackEvent() takes as parameters the name of the event, and set of custom key+value pairs for attributes.
  • CustomScreenEvent – used to record that the user i
  • CustomPageEvent – same as the above, but oriented toward web pages

Billing note – in addition to the regular tracking of API calls, each event sent out on a DataStream Channel counts as an additional API count.

We are very excited about the new possibilities that DataStream opens up for brainCloud apps – give it a try and send us feedback!

 

Additional Highlights

Additional features of this release include:

  • Push Notification refactoring – we’ve refactored our push notification support to make it more efficient and reliable. Although none of the existing Client APIs have changed, you’ll notice:
    • Device tokens now expire after a settable period of time. This helps to keep all tokens recent and reliable, and also to ensure you’re not wasting API counts sending notifications to long-gone users.
    • Invalid Device Tokens (flagged by iOS and Android servers) are now automatically removed from profiles
    • Devices will no longer receive notifications from multiple users – if your app allows users to log in and out, it was possible to end up with multiple users with the same hardware device token. This is no longer possible – a token can now be associated with one and only one user.  That said, if you allow users to log out, you will call the new RemoveDeviceToken() call just before the logout, to ensure that the user’s profile no longer refers to the device.
    • There is a new Delete All Tokens menu option in the Design | Notifications | Settings screen, which allows you to clear all tokens of specific type (iOS, Android, etc.).  This is useful for when you switch between Sandbox and Production certificates on iOS, and you want to delete all the old tokens.
  • Redemption Code Improvements – we’ve made some changes under the covers to make our implementation more efficient at high volumes of codes. The biggest change is that scan codes are no longer local to a code type, but are now global across all code types for an app id. This saves us a bunch of index space, and in practice better matches the datasets of our customers anyway.
  • API Pre- and Post- Hook Improvements – we’ve improved the capabilities of API Pre- and Post- Hooks. As you may or may not know, Pre- and Post- hooks allow you to change the behaviours of brainCloud’s API calls themselves – inserting code to be run before and/or after the API call completes. Pre-hooks can now have the ability to change the parameters being sent into the API call.  And Post-hooks can now access the original parameters sent to the API (providing useful context).
  • Updated Unreal plug-in – Finally, we’ve made improvements to our Online Subsystem portion of our Unreal 4 libraries.

 

Portal Changes

Changes to the portal:

  • Moved Email Authentication section – we’ve moved the Email Authentication settings from the Advanced Settings page to their own page under Design | Authentication.
  • New Integrations section – we’ve added a new Design | Integrations section, which currently contains only the Segment integration from our new DataStream feature
  • Revamped Notification Settings – the settings dialogs have been revamped to be clearer, and we’ve added an expiry drop-down.  You can also choose to delete existing iOS or Android device tokens.
  • Get Test Redemption Codes – you can now search your datafill for a redemption code to use during testing.  You the Type and State of the code, and brainCloud will display the first one that matches. Available from the Global Monitoring | Redemption Codes screen.
  • Reset Universal Authentication passwords – you may now reset the password of Universal Authentication users via the design portal. Simply choose the Set Password option in the new action menu displayed in the Credentials section of the User Monitoring | User Summary page.
  • Managing Device Tokens – device tokens are used to push notifications to iOS and Android devices. The device tokens section of the User Summary page has been updated to display when the token was last registered (note – brainCloud only applies the first registration within a 24-hour period), and has a new [Reset Device Tokens] button to delete all the existing tokens for this user.

 

API Changes / Additions

Changes and additions to the API:

  • Push Notification Tokens – two methods have been added to allow client apps greater control over the device tokens associated with user accounts.  DeregisterPushNotificationDeviceToken() will delete the associated device token from the user profile (), and DeregisterAllPushNotificationDeviceTokens() will delete all tokens associated with the user… (useful if you app contains a global toggle to disable all notifications to the user – as it will delete all notification tokens for this user, not just the token associated with the current device).
  • DataStream Events – as mentioned in the highlights section above, new API calls have been added for custom DataStream events

 

Miscellaneous Changes / Fixes

Additional improvements to this release:

  • Adjusted S2S Explorer so that it returns results in alignment with the API Explorer
  • Added GlobalApp proxy to Cloud Code bridge
  • Refactored C++ Comms to push common code into a single class
  • Fixes to API Hook error handling – more descriptive error messages
  • Miscellaneous fixes and performance improvements