本文档解答了有关 Google Play 游戏电脑版 SDK 和发布方面的常见问题。
创收
如果没有后端服务器,可以使用购买流程吗?
从安全角度来看,不建议在没有后端服务器的情况下进行处理。
如需了解详情,请参阅在没有后端服务器的情况下进行处理。
集成 Google Play 游戏电脑版 SDK 后,是否允许使用基于 API 的现有支付系统?
所有付款都必须由 Google Play 游戏电脑版 SDK 使用 Google Play 结算服务来处理。您无法在同一款游戏中使用基于 API 的现有支付方式。
如何在开发者模式下处理购买交易?
在开发者模式下处理购买交易时,必须在 3 分钟内完成,否则购买交易将被退款。
是否支持定期付款或订阅?
目前不支持,但欢迎您提供具体的使用情形,以便我们将其添加到未来的路线图中。
我的购买调用中的结算错误是什么?
BillingError 是支付结果的响应。LaunchPurchaseFlow 会立即返回,而不会阻塞,但您必须监听回调,才能知道它何时完成并捕获结果。
如何使用客户端购物验证?
我们建议使用服务器端购买及其验证流程。 如需从客户端应用处理购买交易,您的游戏必须位于许可名单中。如果您的游戏需要访问权限,请与您的 Google 合作伙伴联系。 如需了解详情,请参阅在没有后端服务器的情况下进行处理。
查询商品详情的 API 限制是什么?
在对
QueryProductDetailsAPI 的单次调用中,最多可以查询 50 件商品。如果您超出此限制,则必须将请求拆分为多次调用。在结算客户端中调用 Query Purchases 或 Launch Purchase Flow 时,需要哪些参数?
该函数接受
QueryPurchasesContinuation,这是一个具有std::function<void(QueryPurchasesResult)>签名的函数 回调。回调会将结果连同所有ProductPurchaseDetails一起传递给您。 您可以在includes/billing/models.h文件中的 SDK 头文件中找到此信息。生成的
launch_purchase_flow_result具有ok()和code()函数。ok()函数会返回流程是否成功。code()函数会返回BillingError枚举 (includes/billing/enums.h),其中包含 10 种可能的错误情形,例如用户取消或网络错误。结算客户端中的 Launch Purchase Flow 是否支持自定义排序?
在当前的 SDK 设计中,无法传入您自己的载荷。不过,您可以提供
obfuscated_account_id和obfuscated_profile_id的任意组合。您可以不提供、仅提供其中一个或同时提供两者。offer_token字段是必需的,用于指定用户在结账流程中尝试购买的购买优惠。目前,Google Play 中的每个 SKU 都有一个优惠(例如,以 10 美元的价格购买一件商品)。未来,Play 结算团队将提供对多个优惠的支持。为确保在购买流程中断的情况下关联元数据,请在启动购买对话框之前将元数据存储在后端服务器上,并将其与用户的账号 ID、正在购买的 SKU 和当前时间戳相关联。如需了解详情,请参阅将购买交易与内部数据相关联。
如果用户在购买流程中关闭浏览器而不付款,是否会发生超时错误?
是的,这是一个已知问题,也是基于浏览器的流程中的预期行为。 我们正在积极开发无缝购买功能(基于 WebView),该功能会将支付流程保留在游戏内,并解决此超时问题带来的不便。
从使用 OAuth 的 Google 结算服务切换到使用 DLL 的原生 Google 结算服务需要满足哪些前提条件?
游戏可以继续使用 Google OAuth 登录来管理已登录的账号,但 Google 建议您停止使用旧版 REST 结算 API。从 REST 结算 API(使用 OAuth2 登录)切换到 SDK 流程可能是一项功能标记操作,因此在游戏切换期间,两者可以共存一段时间。
Launch Purchase Flow API 调用是否通过 Web 浏览器处理?
是的,目前是通过浏览器处理的。Google 计划通过 SDK 实现整个流程,而无需离开游戏。
用户是否需要为每款游戏单独登录才能进行购买?
Google Play 游戏中的前台账号用于每个游戏会话,因此您无需再次登录。游戏会话开始时,您在 Google Play Games 中使用的账号就是发出 API 调用的账号。在浏览器中启动购买流程时,您必须登录并使用与游戏会话相同的账号。如果用户使用其他账号登录,Web 流程会提示他们切换账号。
游戏是否可以同时支持原生 SDK 和旧版支付系统?
支付系统根据游戏二进制版本采用双流程模型运行。旧版 build 的用户继续使用现有流程,而新 build 的用户则过渡到基于 SDK 的支付。在过渡期间,两种支付流程的用户可以共存。
Windows App Bundle
使用第三方启动器提交 WAB 时,是否需要审核游戏软件包?
您只需提交安装程序,无需提交整个游戏软件包,审核者将能够使用安装程序下载您的游戏软件包。
WAB 文件大小是否有任何限制?
您可以上传大小不超过 10 GB 的 WAB 文件。
为什么上传 WAB 后,我的游戏无法安装或显示?
如果您的游戏在没有预先存在的 PC 版本(“首次 WAB”)的情况下进行上架,系统可能会自动将其置于“托管发布”保留状态。发生这种情况的原因是没有可供更新的现有基准。 如需完全发布 WAB 并让游戏可供安装,您 必须前往 Google Play 管理中心,然后手动执行所需的发布操作(例如,点击“发布更改”)。
如何上传 WAB 以进行内部测试?
与 Google 分享许可名单账号,以便 Google 为其启用内部测试。Google 获得该列表后,会确保将其纳入上架流程。
应将 WAB 软件包上传到哪里?
您可以将 WAB 软件包上传到第一个问题中提到的位置。不过,您无法手动发布。您必须向 Google 后端工作人员提供精确的 UTC 时间(精确到小时)。然后,Google 会配置发布时间表,并确保按时发布。
PC SDK
旧版 API 与 Google Play 游戏电脑版 SDK 有何区别?
- 我们的旧版 API 仅提供结算功能。
- PC SDK 支持 Google Desktop Service (GDS) 和完整的 PC 功能。
- 使用 PC SDK 时,无需基于浏览器的 Google 登录。
是否有其他方法可以初始化 SDK,例如直接使用游戏启动器启动游戏,而无需通过 Google Play 游戏电脑版?
您的游戏必须通过 Google Play 游戏电脑版客户端启动。如需了解详情,请参阅此开发者文档。
原生 PC SDK 是否支持 PEM 证书文件中的多字节字符?
是的,该 SDK 支持使用多字节字符进行认证。
该 SDK 如何处理多个实例或账号的 Google 账号登录?
在 Google Play 游戏 中,每次启动游戏都被视为一个“游戏会话”,每个“游戏会话”都可以关联一个账号。它们可以不同。因此,如果您使用账号 A 启动游戏,然后切换到账号 B 并重新启动,则两者可以同时运行。
Play Install Referrer 集成是否适用于 PC SDK?
PC SDK(25.5.409.0 及更高版本)支持 Play Install Referrer API。如需了解详情,请参阅 Play Install Referrer API。
启动器
如果玩家使用第三方启动器而不是 Google Play 客户端,他们的 Play 游戏服务账号是否会自动同步?
如需让 SDK 函数正常运行,游戏必须直接通过 Google Play 游戏客户端启动。如果其他进程(例如安装程序或启动器应用)启动游戏,则该进程本身必须从 Google Play 游戏客户端启动。游戏必须将从客户端收到的所有参数传递给客户端进程。
如果 Google Play 游戏 启动第三方游戏启动器,我该如何处理初始化?
您无需将 SDK 直接集成到启动器中。 不过,您必须将启动器从 Google Play 游戏客户端收到的所有命令行实参直接传递给生成的子进程(游戏可执行文件)。如果初始化失败(例如,通过返回
kActionRequiredShutdownClientProcess),则必须终止包括启动器在内的所有进程,以便 Google Play 游戏可以尝试恢复并自动重新启动游戏。如需了解详情,请参阅设置指南中的第 5 步 。游戏和启动器投入生产后,如何处理更新和维护?
后续更新和维护必须通过启动器实现。Google Play 游戏客户端不支持更新功能,因此启动器必须能够更新游戏和启动器本身。
初始化
当我使用 Google Play 游戏应用启动游戏时,它是否会同步我的 Google 账号详细信息?
通过 Google Play 游戏客户端启动游戏后,账号会自动同步,无需再次通过 Google 登录流程登录。
是否可以多次重复使用初始化参数?
只要 Google Play 游戏客户端正在运行且登录信息有效,就可以这样做。不过,在指南中所述的场景中,当用户关闭游戏或游戏因 SDK 初始化失败(例如
kActionRequiredShutdownClientProcess)而退出时,游戏启动的所有进程都必须终止。有没有办法创建快捷方式来直接打开游戏?
您可以使用以下 URI 直接打开游戏:
googleplaygames://launch/?pid=2&id=com.company.gamename该 URI 支持检测 Google Play 游戏电脑版客户端是否已打开。如果客户端未打开,Google Play 游戏客户端会在游戏或启动器运行之前打开。您需要管理游戏或启动器,以防止运行多个实例。
测试
是否有类似于移动设备的开放式测试或封闭式测试环境?
虽然没有专用的端到端沙盒,但我们认识到开发者需要类似生产环境的测试环境。我们很快就会提供更强大的解决方案。
如何添加新的测试人员?
您的 Google 联系人会为每个 PC 项目创建一个电子邮件群组,您必须将测试人员的 Google 账号添加到该群组中。只有此电子邮件群组的成员才有权在 Google Play 游戏 中下载测试软件包。
其他
可以使用 VPN 吗?
对于需要在不支持 Google Play 游戏电脑版的 地区测试游戏的开发者,我们建议您使用 VPN 从 受支持的地区获取 IP 地址。
确保在 VPN 上启用 TUN 模式。如需了解有关启用 TUN 模式和配置防火墙的指南,请参阅 VPN 提供商的操作手册。
如何在 Unity 或 UE 编辑器中开始针对 Google Play 游戏电脑版进行开发?
- 启用开发者模式并继续进行测试。
- 添加
manifest.xml和.dll文件。如需了解详情,请参阅 开发者文档。 - 注册抢先体验合作伙伴 GUID 以进行测试。
如何正确使用注册表项?
您应根据根配置单元创建注册表项。您可以根据自己的用途和数据的性质,将根配置单元设置为
HKEY_LOCAL_MACHINE或HKEY_CURRENT_USER。该指南以HKEY_LOCAL_MACHINE配置单元为例。Google 审核 PC 软件包有哪些要求?
PC 软件包会接受恶意软件扫描,之后审核者只会测试游戏安装、成功启动和卸载流程。
是否必须集成所有 API?
其他 API 不是必需的,但它们可以提供额外的优势。如需进行应用内购买和销售数字内容,必须使用
google::play::billing。如需跟踪引荐数据以帮助您了解哪些流量来源发送的用户最多,从而下载您的应用,必须使用google::play::install_referrer。如需通过检测可能存在风险的设备和未知模拟器来保护您的应用免受不良行为者的侵害,必须使用google::play::games::integrity。为什么关闭 Google Play Games 客户端时,某些游戏进程会终止,而其他游戏进程则不会?
Google 不控制正在运行的游戏的子进程或进程。 该行为取决于游戏是 Android 模拟游戏还是原生 PC 游戏。模拟游戏安装在自己的环境中,因此其行为很大程度上取决于模拟器的初始化和关闭。
我应该使用 Google Play 游戏 卸载功能还是自定义卸载程序?
Google 建议您使用我们的 Google Play 游戏 卸载功能。
其他帮助
如果您需要本文档未涵盖的其他帮助,请发送电子邮件至 google-play-games-pc@google.com