使用发布者数据

本教程介绍如何创建和使用发布者(工作室)数据。

发布者数据是跨多个游戏 的数据 - 例如,当您有多个游戏需要共享公共信息时。

注意

此类别还包括跨多个游戏的玩家的数据。 PlayFab 以键/值对 (KVP) 的形式存储数据。

这些 API 中的大多数是服务器 API - 您的程序必须从专用服务器调用,或通过 PlayFab 服务中的 CloudScript 函数调用。

您必须从专用服务器或通过 PlayFab 服务从 CloudScript 函数调用服务器 API。 这是设计使然,因为 PlayFab 服务器 API 要求提供密钥。

提示

我们不建议 在游戏客户端中使用服务器 API。 如果需要使用服务器 API,请使用 CloudScript 实现此类功能。

发布者数据值会复制并分发给 PlayFab 服务器群集中的计算机(可能成百上千 个)。 在此过程中,会缓存此数据,更改需要最多 15 分钟 才能在这些缓存中刷新。

注意

发布者数据最适用于全局常量/静态数据,作为全局变量不合适 或不可靠。

发布者数据

发布者数据用于存储一组游戏的静态数据。 每个条目不与任何 PlayFab 实体绑定,例如玩家(而不是用户发布者数据)。

设置发布者数据

以下代码段介绍如何使用服务器 API 设置发布者数据。

注意

此操作有一个管理 API 对应项。

public void ServerSetPublisherData() {
    PlayFabServerAPI.SetPublisherData(new SetPublisherDataRequest() {
            Key = "SomeKey",
            Value = "SomeValue"
        },
        result => Debug.Log("Complete setting publisher data"),
        error => {
            Debug.Log("Got error setting publisher data");
            Debug.Log(error.GenerateErrorReport());
        }
    );
}

获取发布者数据

以下代码段演示使用客户端 API 获取发布者数据。

注意

此操作有服务器和管理 API 对应项。

public void ClientGetPublisherData() {
    PlayFabClientAPI.GetPublisherData(new GetPublisherDataRequest(),
    result => {
        if (result.Data == null || !result.Data.ContainsKey("SomeKey")) Debug.Log("No SomeKey");
        else Debug.Log("SomeKey: " + result.Data["SomeKey"]);
    },
    error => {
        Debug.Log("Got error getting publisher data");
        Debug.Log(error.GenerateErrorReport());
    });
}

用户发布者数据

用户发布者数据可用于引入绑定到 PlayFab 用户(玩家)的发布者数据。

与常规的发布者数据不同,客户端应用程序可以更改用户发布者数据。

从客户端 API 的角度来看,PlayFab 为用户发布者数据公开了 3 个保护级别:

  1. 常规用户发布者数据向客户端应用程序公开读写访问权限。

    • 通过客户端、服务器和管理 API 设置。
    • 通过客户端、服务器和管理 API 获取。
    • 客户端 API 只能为当前登录的玩家设置发布者数据。
  2. 只读用户发布者数据向客户端应用程序公开读取访问权限。

    • 通过服务器和管理 API 设置。
    • 通过客户端、服务器和管理 API 获取。
  3. 内部用户发布者数据不向客户端应用程序公开任何访问权限,它用于存储用户数据的保密部分。

    • 通过服务器和管理 API 设置。
    • 通过服务器和管理 API 获取。

设置用户发布者数据

以下代码段介绍如何使用客户端和服务器 API 设置所有 3 种发布者数据。

// Use Client API to set User Publisher Data for current user
public void ClientSetUserPublisherData() {
    PlayFabClientAPI.UpdateUserPublisherData(new UpdateUserDataRequest() {
         Data  = new Dictionary<string, string>() {
             { "SomeKey", "SomeValue" }
         }
    },
    result => Debug.Log("Complete setting Regular User Publisher Data"),
    error =>
    {
        Debug.Log("Error setting Regular User Publisher Data");
        Debug.Log(error.GenerateErrorReport());
    });
}

// Use Server API to set Read-Only User Publisher Data for selected user
public void ServerSetUserPublisherReadOnlyData() {
    PlayFabServerAPI.UpdateUserPublisherReadOnlyData(new UpdateUserDataRequest() {
         PlayFabId = "< PlayFab Player Id >",
         Data  = new Dictionary<string, string>() {
             { "SomeKey", "SomeValue" }
         }
    },
    result => Debug.Log("Complete setting Read-Only User Publisher Data"),
    error =>
    {
        Debug.Log("Error setting Read-Only User Publisher Data");
        Debug.Log(error.GenerateErrorReport());
    });
}

// Use Server API to set Internal User Publisher Data for selected user
public void ServerSetUserPublisherInternalData() {
    PlayFabServerAPI.UpdateUserPublisherInternalData(new UpdateUserInternalDataRequest() {
         PlayFabId = "< PlayFab Player Id >",
         Data  = new Dictionary<string, string>() {
             { "SomeKey", "SomeValue" }
         }
    },
    result => Debug.Log("Complete setting Internal User Publisher Data"),
    error =>
    {
        Debug.Log("Error setting Internal User Publisher Data");
        Debug.Log(error.GenerateErrorReport());
    });
}

获取用户发布者数据

以下代码段介绍如何使用客户端和服务器 API 获取所有 3 种发布者数据。

// Use Client API to get Regular User Publisher Data for selected user
public void ClientGetUserPublisherData() {
    PlayFabClientAPI.GetUserPublisherData(new GetUserDataRequest() {
        PlayFabId = "<PlayFab Player Id>"
    }, result => {
        if (result.Data == null || !result.Data.ContainsKey("SomeKey")) Debug.Log("No SomeKey");
        else Debug.Log("SomeKey: " + result.Data["SomeKey"]);
    },
    error => {
        Debug.Log("Got error getting Regular Publisher Data:");
        Debug.Log(error.GenerateErrorReport());
    });
}

// Use Client API to get Read-Only User Publisher Data for selected user
public void ClientGetUserPublisherReadOnlyData() {
    PlayFabClientAPI.GetUserPublisherReadOnlyData(new GetUserDataRequest() {
        PlayFabId = "<PlayFab Player Id>"
    }, result => {
        if (result.Data == null || !result.Data.ContainsKey("SomeKey")) Debug.Log("No SomeKey");
        else Debug.Log("SomeKey: " + result.Data["SomeKey"]);
    },
    error => {
        Debug.Log("Got error getting Read-Only Publisher Data:");
        Debug.Log(error.GenerateErrorReport());
    });
}

// Use Server API to get Internal User Publisher Data for selected user
public void ServerGetUserPublisherInternalData() {
    PlayFabServerAPI.GetUserPublisherInternalData(new GetUserDataRequest() {
        PlayFabId = "<PlayFab Player Id>"
    }, result => {
        if (result.Data == null || !result.Data.ContainsKey("SomeKey")) Debug.Log("No SomeKey");
        else Debug.Log("SomeKey: " + result.Data["SomeKey"]);
    },
    error => {
        Debug.Log("Got error getting Internal Publisher Data:");
        Debug.Log(error.GenerateErrorReport());
    });
}

另请参阅