重要 |
---|
Unity 分发门户 (UDP) 将于 2025 年 2 月 17 日关闭。在此日期之后,UDP Web 控制台和服务将永久停用。要下载您的密钥库和有关如何将您的游戏直接重新发布到应用商店的说明,请访问 UDP 概述 页面。如果您对您的帐户有任何疑问,请向 Unity 客户支持 提交工单。 |
在您的 Android 游戏中实现 Google Play 游戏服务 使您可以利用 Google 的服务层来实现成就和排行榜等功能。如果您的游戏实现了 Google Play 游戏服务,则需要进行额外的配置以支持 UDP 为不同商店创建的构建。
当您的游戏调用 Google Play 游戏服务时,Google Play 游戏服务会检查以下详细信息是否与 Google Play Console 中注册的信息匹配
如果它们不匹配,玩家将无法使用 Google Play 游戏服务登录应用程序。
对于您通过 UDP 发布游戏的某些商店,UDP 会在包名称中添加特定于商店的后缀。此外,如果您不使用自己的私钥生成证书,UDP 会为每个重新打包的构建生成证书。这些事件会导致您的证书和/或包名称不再与 Google Play Console 中的信息匹配。这将阻止用户使用 Google Play 游戏服务登录游戏。
以下部分说明了如何解决此问题。
本节说明了如何将您的 UDP 版本链接到 Google Play 应用程序,以便 Google Play 游戏服务可以在所有版本上运行。
本节说明了如何创建 Google Play 游戏服务项目并将其链接到新的或现有的云项目。
如果您在 Play 游戏服务设置页面中选择了是,我的游戏已使用 Google API
如果您在 Play 游戏服务设置页面中选择了否,我的游戏未使用 Google API
创建新的 Play 游戏服务项目时,添加凭据链接将被禁用。
完成上述步骤后,您的 Google Play 游戏将链接到其 Google Play 游戏服务。下一步是 将您的 UDP 构建链接到游戏服务。
将您的应用链接到 Google Play 游戏服务后,您可以将其他(UDP)应用链接到游戏服务。
openssl x509 -in [downloaded-pem-filepath] -fingerprint -noout
您可以在 Google Cloud Platform > Google API 和服务仪表板的凭据下查看已链接到 Google Play 应用程序的 UDP 构建。
这些步骤使 Google Play 游戏服务能够成功地在所有以这种方式链接的 UDP 商店版本上运行,但不包括 Mi GetApps(其 SDK 集成了 Google Mobile Services 的旧版本,这会导致冲突)。
注意:对 Google 系统的任何更改都可能影响上述解决方案。有关 Google 的故障排除信息的更多信息,请参阅 Google 文档。
您可以使用 构建自动化Unity 项目的持续集成服务,可自动化在 Unity 服务器上创建构建的过程。 更多信息
查看 术语表 以以下方式将您的游戏部署到 UDP 控制台
本节说明了如何使用构建自动化将您的游戏推送到 UDP。在 Unity 编辑器中,在 项目设置一系列广泛的设置,允许您配置项目中物理、音频、网络、图形、输入和许多其他领域的运行方式。 更多信息
查看 术语表 窗口中启用构建自动化。
要通过 Unity 编辑器中的构建自动化功能将您的游戏部署到 UDP,您需要上传您的 UDP 构建并将其推送到 UDP。
要通过 Unity 仪表板中的构建自动化功能将您的游戏部署到 UDP,您需要将您的 UDP 构建上传到 Unity 仪表板,并从那里将其推送到 UDP。
如果您使用 Unity Teams Advanced,您可以 自动生成构建。
在项目设置窗口的构建自动化选项卡中
通过 Unity 构建自动化开发者仪表板(如上所示)将您的构建直接推送到 UDP。
UDP 可以告诉您的游戏使用的其他服务游戏是从哪个商店下载的。
此信息可以以多种方式使用,既可以由 Unity 服务使用,也可以由第三方服务或您自己的服务使用。
例如,Unity 远程配置 允许您根据您定义的规则调整游戏设置,例如游戏是从哪个商店下载的。
本节介绍如何让其他服务访问此信息,并包括一个示例。
当您的游戏首次在玩家的设备上启动时,UDP 会在游戏的持久数据路径中创建并丢弃 udp.json
文件。该文件包含字段 udpStore
,显示游戏是从哪个商店下载的。检索该信息以按照您的预期方式使用它。
注意: 这不会在您的游戏清单中添加任何新的权限。
文件 udp.json
存储在
Application.PersistentDataPath + '/Unity' + /Application.CloudProjectID + /udp/udp.json
其中
Application.PersistentDataPath
是您游戏的持久数据路径Application.CloudProjectID
是您游戏的 Unity 项目 ID以下是一个指向 udp.json
文件的路径示例
path/storage/emulated/0/Android/data/com.mystudio.mygame/files/Unity/c83d2de2-de74-4b75-83fc-ade948bda064/udp/udp.json
其中
Application.PersistentDataPath
= path/storage/emulated/0/Android/data/com.mystudio.mygame
Application.CloudProjectID
= c83d2de2-de74-4b75-83fc-ade948bda064
文件 udp.json
包含以下信息
{"key":"UDP","udpStore":"StoreName","udpClientId":"value_of_udpClientId","CloudProjectId":"value_of_CloudProjectId"}
字段 udpStore
包含您的游戏从哪个 UDP 商店下载的。
以下是一个 udp.json
文件的示例
{"key":"UDP","udpStore":"Huawei","udpClientId":"icjaB7wmu_q7AOjrSLH8yw","cloudProjectId":"bc2be074-09f3-450f-8e98-a0f79c9746f7"}
在本例中,游戏是从 HUAWEI AppGallery 下载的。
提示: 使用 JSONUtility.FromJsonOverwrite
将文件内容读取为文本资产。
下表列出了您可以在 UDP 上获得的商店的 udpStore
值。
这些是区分大小写的。
商店(UDP 上的渠道名称) | udpStore 的值 |
---|---|
UDP 沙盒(适用于通用 UDP 构建) | UdpSandbox |
ONE 商店 | OneStore |
APPTUTTi | Apptutti |
Mi GetApps(小米) | XiaomiStore |
HUAWEI AppGallery | Huawei |
QooApp 游戏商店 | QooApp |
Uptodown | Uptodown |
SHAREit | ShareIt |
JioGames | JioGames |
Legion 商店 | Legion |
Unity 远程配置 允许您调整游戏设置,而无需部署新版本的应用程序。当玩家启动您的游戏时,远程配置会检测用作规则条件的上下文属性(基于 Unity、应用程序、用户或您定义的自定义标准)。然后,该服务根据适用于每个玩家的规则返回自定义设置。
在您的规则条件中使用 udpStore
作为属性,这样您就可以确定取决于游戏是从哪个 UDP 商店下载的游戏设置。
要将 udpStore 与远程配置一起使用,请执行以下步骤。
public struct AppAttributes { public string udpStore; }
{ string udpFilePath = System.IO.Path.Combine(Application.persistentDataPath, "Unity", Application.cloudProjectId, "udp", "udp.json"); string udpFileContents = System.IO.File.ReadAllText(udpFilePath); var appAttr = JsonUtility.FromJson<AppAttributes>(udpFileContents); Unity.RemoteConfig.ConfigManager.FetchCompleted += ConfigManager_FetchCompleted; Unity.RemoteConfig.ConfigManager.FetchConfigs(null, appAttr); }
如果您想使用Unity IAPUnity 应用内购买的缩写
在词汇表中查看实现 UDP,请先设置 Unity IAP。
注意:如果您选择使用 Unity IAP 版本 1.22.0–1.23.5(而不是使用 UDP 包)实现 UDP,那么请仅通过 Unity IAP 实现。
Unity IAP 会自动处理以下操作
但是,您的游戏必须根据Unity IAP 文档正确使用 Unity IAP 的类似功能(例如初始化和购买)。
当您使用 Unity IAP 实现游戏的应用内购买后,请执行以下步骤以设置 UDP 与 Unity IAP 的配合。
获取要传递给 queryInventory
方法的 IAP 产品时,调用 ProductCatalog.LoadDefaultCatalog()
。这将返回编辑器IAP 目录(服务 > Unity IAP > IAP 目录)中定义的 IAP 产品。
例如
var catalog = ProductCatalog.LoadDefaultCatalog();
foreach (var product in catalog.allValidProducts)
{
if (product.allStoreIDs.Count > 0)
{
var ids = new IDs();
foreach (var storeID in product.allStoreIDs)
{
ids.Add(storeID.id, storeID.store);
}
builder.AddProduct(product.id, product.type, ids);
}
else
{
builder.AddProduct(product.id, product.type);
}
}
如果您计划在 UDP 控制台上修改游戏的 IAP 目录,请准备好您的游戏从 UDP 控制台获取 IAP 产品信息。
获取要传递给 queryInventory
方法的 IAP 产品时,调用 builder.AddProduct 以检索从 UDP 控制台定义的特定 IAP 产品
builder.AddProduct(product.id, product.type, new IDs{})
要显示产品价格(以货币格式),请使用 productInfo.Value.Price
。
要检索在 UDP 控制台上定义的所有 IAP 产品,请不要调用任何 IAP 产品检索方法。然后,您的游戏将从 UDP 控制台获取整个 IAP 目录。
注意:在 UDP 控制台上上传 IAP 产品的 CSV 文件将完全覆盖您的 IAP 目录。
添加和配置您的IAP 目录 所有用于 UDP 的应用内购买。
注意:如果您在游戏客户端中不使用 IAP 目录(例如,您仅在游戏服务器上维护 IAP 项目),您仍然必须在 UDP 控制台上创建 IAP 目录。
要确保正确保存 IAP 目录,请检查您添加的项目是否显示在 UDP 控制台中。