发布第一个用户生成的内容

重要

Economy v2 现已正式发布。 有关支持和反馈,请转到 PlayFab 论坛

本教程逐步讲解如何通过 API 和 Game Manager UX 发布包含内容的 UGC,深入了解比快速入门更详细的内容。

要求

通过 API

在本部分中,我们将利用 Postman Collections 与 PlayFab UGC API 交互,但你可以利用我们所有的 SDK

创建 Blob URL

  • UGC 系统适用于 PlayFab 实体模型,因此我们需要使用实体令牌而不是会话票证来调用这些 API。 可以在 Postman Collections 快速入门中了解如何获取游戏实体令牌。

  • UGC 系统利用Azure Blob 存储来存储与游戏的 UGC 关联的所有内容(文件和图像)。 若要上传内容,首先需要调用 CreateUploadUrlsAPI,传入文件名和大小(以字节为单位)以创建新的 Blob。 例如,如果要上传文本文件和 PNG 图像,则会将以下内容传递给请求正文:

    {
      "Files": [
        {
          "FileName": "HelloWorld.txt",
          "FileSize": 12
        },
        {
          "FileName": "PlayFabLogo.png",
          "FileSize": 20725
        }
      ]
    }
    
  • 响应将包括 Id 以及每段内容的: Url

    {
        "code": 200,
        "status": "OK",
        "data": {
            "UploadUrls": [
                {
                    "Id": "[Content ID]",
                    "Url": "[Content Url + '?' + Token]",
                    "FileName": "HelloWorld.txt"
                },
                {
                    "Id": "[Image ID]",
                    "Url": "[Image Url + '?' + Token]",
                    "FileName": "PlayFabLogo.png"
                }
            ]
        }
    }
    

    注意

    每个创建令牌(在响应的"URL"字段中返回)的有效期为 6 小时,之后将无法将内容上传到 Blob。 如果未将任何内容上传到 blob,我们的服务会对其进行清理,并且需要通过调用 CreateUploadUrlsagain 来创建新的 blob。 此 URL 也不允许访问内容,除非已上传到草稿项,该草稿项将接收其他(现在可公开访问的)URL

    注意

    每个 blob 只能用于一个项中。 如果希望在多个项目中重复一段内容,应将内容重新上传到不同的 Blob。

将内容上传到 Blob

可通过几种不同的方法将内容加载到这些 URL

通过 Postman

  • 使用调用 CreateUploadUrls 生成的 URL,以及通过将和添加 comp: blobx-ms-blob-type: blockblob 为标头来创建 PUT 请求:Postman 发布示例

  • 然后,可以通过选择二进制文件作为正文类型上传文件:Postman 上传二进制文件

通过 AzCopy

  • 另一个选项是使用 AzCopy 工具。 可在此处下载该工具并开始使用 AzCopy。

  • 在所选终端中,使用以下参数调用 azcopy:

    [relative path to azcopy.exe] copy [relative path to local content] [Url + '?' + Token]
    

创建草稿 UGC

  • 成功上传文件和图像后,可以调用, CreateDraftItem 传入内容和图像的 URL,以便在草稿目录中创建第一个项目:

    {
      "Item": {
        "Type": "ugc",
        "Title": {
          "NEUTRAL": "Hello World!"
        },
        "Description": {
          "NEUTRAL": "My first UGC item (with content!)"
        },
        "ContentType": "Game Item",
        "IsHidden": false,
        "Contents": [
          {
            "Id": "[Content ID]",
            "Url": "[Content Url]"
          }
        ],
        "Images": [
          {
            "Id": "[Image ID]",
            "Type": "Thumbnail",
            "Url": "[Image Url]"
          }
        ]
      },
      "Publish": false,
      "AllowOverwrite": false
    }
    

    注意

    将图像上传到项时,必须使用参数对每个图像 Type 进行分类。 这可以是"缩略图"或"屏幕截图"。 每个项仅限一个"缩略图"类型的图像,默认情况下, 搜索 将返回"缩略图"图像(如果存在)。

  • 响应将返回传入的元数据以及项 ID:

    {
    "code": 200,
    "status": "OK",
    "data": {
        "Item": {
            ...
            "Id": "e5427509-1b72-4ee1-9e6c-03fc055a94f3",
            ...
        }
      }
    }
    

    注意

    创建的草稿项返回的内容/图像 URL 和原始 CreateUploadUrls 调用将有所不同。 无论选择如何上传内容,都可以通过复制基 URL(在"?"之前)并在浏览器中导航到它来测试上传是否成功。 这只会返回图像after它已上传到草稿项,而不是通过使用来自 CreateUploadUrls 的 URL。

  • 草稿目录中现在存在草稿 UGC 项! 只要 UGC 项尚未发布,便无法通过公共目录进行搜索。 可以通过调用以下 API 之一来查找此 UGC 项:

    • GetDraftItem,传入从 CreateDraftItem response 获取的项 ID
    • GetDraftItems,传入已知项 ID 的列表
    • GetEntityDraftItems,通过草稿项列表传入实体 ID 和/或将 ContinuationToken 从上一个响应传递到页面

注意

如果想要立即发布,可以将 field Publish 更改为 true

  • 准备好发布 UGC 项时,调用 PublishDraftItem,传入项 ID(从 response CreateDraftItem 获取)。
  • 如果 UGC 项包含多个特别大的文件,则发布该项目可能需要一些时间,并且当有许多其他玩家同时上传内容时,此过程可能需要更多时间。 可以通过调用 GetItemPublishStatus,传入项 ID(从 CreateDraftItemresponse)来检查发布状态。 有一些可能的状态:
    • Succeeded - UGC 项已成功发布
    • Pending - UGC 项仍在发布过程中
    • Failed - UGC 项发布失败,并且在修改有问题的内容之前不会发布
    • Unknown - 这是默认状态,将在调用 UGC 项上的 PublishDraftItem 的返回
    • Canceled - 发生了内部错误,请尝试再次发布该项目(如果多次看到此状态,请联系 PlayFab 工程团队)
  • 成功发布 UGC 项后,可以通过 SearchItemsor 直接通过 获取它 GetItem (如果具有项目 ID)。
  • 可以通过执行以下操作,在发布前后对 UGC 项进行更改:
    • 调用 GetDraftItem,传入项 ID(从 response CreateDraftItem 获取)
    • 复制 UGC 项的数据(field 中的所有内容 data
    • 调用 UpdateDraftItem,传入修改后的 UGC 项的数据
    • 如果要更新任何文件或图像,则需要通过调用 again 创建另一个 blob CreateUploadUrls
    • 通过调用 PublishDraftItem 重新发布 UGC

通过 Game Manager

在本部分中,我们将在 Game Manager 体验中完全创建 UGC 项 - 无需代码!

创建草稿目录项

  • 选择“经济”>“目录 (v2)”导航到 UGC 页。

  • 选择“新建项”。

  • 填写 UGC 项的相应元数据:

    字段名称
    实体类型 title_player_account
    实体 ID [你的玩家 ID]
    内容类型 游戏项
    开始日期 [过去的任何日期]
    游戏 { "NEUTRAL": "Hello World!" }
    说明 { "NEUTRAL": "My first UGC item (with content!)" }

    新的用户生成内容的项目

  • FilesImages部分下,通过选择Upload按钮上传相应的内容。

  • 选择保存并发布

  • UGC 项现在将自动创建为草稿项并发布到公共目录 - 现在可以在表中找到此项以及其他已发布的 UGC 项。

注意

当前无法在 Game Manager 中检查草稿项或发布状态 - 只能通过 API 执行此操作

  • 若要对已发布的 UGC 项进行任何更改,可以执行以下操作:
    • 从表中选择已发布的 UGC 项
    • 进行适当的编辑
    • 选择保存并发布

故障排除

  • 无效请求 - 不支持内容类型"Game Item"。
    • 如果已在游戏的配置中指定内容类型(通过GetCatalogConfig/UpdateCatalogConfig或在"经济设置"选项卡下的 Game Manager 中),则需要将游戏项目添加到列表中,或者将内容类型更改为游戏已支持的类型
  • 请求无效 - 此游戏未配置为使用此服务。
    • 你的游戏当前已禁用 UGC - 你可以通过更新游戏的配置(通过 GetCatalogConfig/UpdateCatalogConfig、在“经济设置”选项卡下的 Game Manager 中或导航到“经济>目录(预览版)选项卡并选择"启用")来启用此功能。

后续步骤

现已在目录中发布 UGC 项! 可以利用 SearchItems 为玩家创建内容发现体验。