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