Data type in PlayFab

In the old good time, games were not connected to their studio and/or publisher backend. Everyone was leaving with the absolute faith in their own knowledge about game usage, player habits and behavior. Many times, this was imperfectly right, but enough to take decisions. Now, as almost all computers (and foremost games) are connected, studios & publisher can make better assumption on the way to improve title and player experience.

This is one of the LiveOps benefits to become a Data driven company.

PlayFab Data is a set of tools for data analytics, storage, processing, and exports. Many features rely on or produce data: Title, Players, Characters, Groups, Economy, Rewards, … but not only. Your own data can be loaded to stay connected with the ongoing operations. Let’s have a look on what you can do with.

Title Data

Title Data is a set of key/value pairs that you can use to manage configuration or any other shared information for your game. You can set these data in Game Manager > Engage > Content, or via APIs. As Title Data is cached in PlayFab servers, and changes may take up to fifteen minutes to be reflected. Title Data is best suited for Global Constant/Static Data and is not suitable or reliable as Global Variables.

The value part can be a single string or a JSON blob that offer ability to store hierarchical data.

{
  "Enemies": 
  {
    "enemies": [
      {
        "name": "Cyberbird",
        "hp": 50,
        "damage": 5,
        "xp": 25
      },
      {
        "name": "Dreadrat",
        "hp": 200,
        "damage": 20,
        "xp": 100
      }
    ],
    "enemyGroups": [
      {
        "name": "easy",
        "enemies": [
          "Cyberbird",
          "Cyberbird"
        ],
        "droptable": "enemy-easy"
      }
  	]
	},
  "Stores": ["Weapons", "Armor"]
}
Data in the Game Manager GUI

There are three modes of access to player data:

  • Title Data: This is title data that is available to your title client to read. You use the client APIs GetTitleData to read data for the player.
  • Overrides: Title Data Overrides are sets of key/value pairs which are stored and managed to override the Primary Title Data. This override set of key/value pairs persist as an additive operation. Using Override, one can:
    • Add a new key-value pair, by naming a key-value pair that isn’t included in the default data.
    • Change an existing key-value pair by naming a key-value pair that’s already in the default data. This new data will replace the existing key-value data.
    • Remove an existing key-value pair by including an existing key but with an empty value.
  • Internal: It is a special set of Title Data that cannot be accessed by clients directly and can be used for storing configuration that is only available to services you control through the server API (for Azure Function settings IE).

Override set of key/value pairs comes in-effect only using Experiments for now. If the player belongs to an experiment variant which contain title data overrides, the overrides are applied automatically on server side and returned with the title data on client side.

Player Data

Player data is information about a player that is stored to the PlayFab service that you can share across multiple devices and multiple games. In the PlayFab APIs, the function names use the term UserData. In the Game Manager, this concept is described as Player Data. They are identical, and interchangeable.

PlayFab provides two ways to store player data:

  • Entities: Allows you to store data in objects and files across Players, Characters, and Groups.
  • UserData: Allows you to store Key/Value pair data for players.

If you are staring a new fresh project, we recommended to have a look on Entity objects.

There are three modes of access to player data:

  • Client: This is player data that is available to your title client to read and update. You use the client APIs UpdateUserData to create, update, or delete and GetUserData to read data for the player.
  • Read Only: This is player data that is created or updated by your server. Your title client can read, but not update, this data. You use the server API UpdateUserReadOnlyData to create, update, or delete and the client API GetUserReadOnlyData to read title-specific data for the player. This data is visible to the player, but can only be modified by the server.
  • Internal: This is player data that is only available to your server. You use the server APIs UpdateUserInternalData to create, update, or delete and GetUserInternalData to read title-specific data for the player. This data is server-only, and cannot be seen by the client.

When you use player data, only User Data and User Read Only Data are available to the Client API. If you have player data that another player should be able to read, you need to set the Permission value to Public when you write the data.

Player data vs player publisher data

  • Player data is player information that is specific to a game title. It should be used for title-specific information – such as saving your player’s position in a dungeon, or other game-specific data.
  • Player Publisher data is data associated with the player account, as opposed to the player account plus the title. It is used to save information about a player relevant to all titles in your studio (which may also contain title-specific information, for purposes of cross-title rewards).

Player Publisher data usage is nearly identical to player data usage. They are both dictionaries mapping a string to a JSON blob (or other arbitrary string value).

Share for immortality
Laurent LEFEVRE
Laurent LEFEVRE

I'm a Microsoft employee, working on Technology Strategy for large Enterprise account.
I focus on industry business trends and explain how you can leverage Azure Game Stack & Xbox services.
I assume that I don't know anything. This is a great habit to do a full knowledge refresh and avoiding bias.