实现游戏试用版
你可以为你的游戏配置多个不同类型的免费试用版:
- 时间受限免费试用版 - 这些试用版在特定日历时间段过后到期(例如,客户下载此试用版后七天,与使用时间的长短无关)。
- 使用情况受限免费试用版 - 允许配置,使用户在一定量的游戏运行时运行游戏,然后要求用户购买游戏继续使用它。
- 精选试用版 - 这些试用版没有到期或游戏运行时限制,但游戏可以限制可玩内容。 这类似于演示,但仍需下载整个游戏。
注意
基于时间和使用情况的试用版旨在针对每个用户的每个游戏提供一次,并且不得与其他试用版产品/服务混合使用。 过期或用尽的试用权利保留在用户帐户上,并会阻止获取同一游戏的任何其他试用版产品/服务。 客户获取试用版后,无法更改或重置试用类型。
注意
某些试用是免费的,但仅限于拥有特定订阅的用户。 本主题也适用于这些试用版。
注意
作为 免费游戏日 优惠的一部分运行的游戏不作为实际试用版运行,但只能通过临时完整许可证来启动。 试用配置和相关结构不适用。
在合作伙伴中心配置使用情况受限试用版
注意
只有在你具有适当权限并且游戏使用限制性许可时,才可访问此功能。 有关详细信息,请联系 Microsoft 客户经理。
可以在合作伙伴中心配置使用情况受限免费试用版,无需更改游戏代码。 然而,在以下情况下必须添加代码:
- 你希望将访问权限局限于已获取试用版的用户
- 你希望在游戏会话之间保存游戏状态;如果使用与获取试用版所用的相同 Microsoft 帐户购买了该游戏,则此保存将延续。
从“提交概述”页转到“定价和可用性”页。
在免费试用下,打开下拉菜单,然后选择使用量限制。
在显示的第二个下拉菜单中,选择用户可使用应用的最长时间。
选择“保存”。
将游戏发布到 Microsoft Store 后,可在游戏产品页面上看到试用版信息。
将访问权限局限于已获取试用版的用户
在某些情况下,你可能只想让试用版所有者运行游戏。
这对于使用情况受限试用版尤其重要,因为你不希望其他人减少你的帐户的试用时间。
可通过查看 XStoreGameLicense.isTrialOwnedByThisUser
属性来实现此功能。
如果是 false
,阻止当前玩家继续或至少通知他们,他们应获得自己的试用许可。
启动试玩游戏时,拥有有效试用许可证的用户将显示在消息上:
以下代码示例演示了如何查看 isTrialOwnedByThisUser
。
void CALLBACK GameLicenseTrialCheck(XAsyncBlock* asyncBlock)
{
XStoreGameLicense result{};
HRESULT hr = XStoreQueryGameLicenseResult(
asyncBlock,
&result);
// Is this a trial?
if (result.isActive && result.isTrial)
{
// Is this trial owned by this user?
if (!result.isTrialOwnedByThisUser)
{
// The user can't use another user's trial time. Show an error message.
}
}
}
void QueryGameLicense(XStoreContextHandle storeContextHandle, XTaskQueueHandle taskQueueHandle)
{
auto async = new XAsyncBlock{};
asyncBlock->queue = m_asyncQueue;
asyncBlock->callback = GameLicenseTrialCheck;
HRESULT hr = XStoreQueryGameLicenseAsync(
storeContextHandle,
async);
}
为原始试用用户保存游戏状态
对于启用 Xbox 服务的游戏,如果采用单人战役游戏或其他游戏模式跟踪会话之间的进度,则将使用连接的存储来保存游戏状态。 但是,通过有限的试用版,电脑用户可以创建多个 Microsoft 帐户,并通过使用相同的 Xbox 帐户在保存进度的同时在超出时间限制的情况下继续玩游戏。 有关这种电脑场景的详细信息,请参阅在电脑上处理不匹配的存储帐户场景。
当保存游戏进度时,可以通过保存 XStoreGameLicense.trialUniqueId
值来防止这种情况。
这样,当用户再次开始玩试用版时,你可以检查 trialUniqueId
值是否与自第一次运行以来保存的该值相匹配。
此代码假定游戏将 trialUniqueId
保存为游戏存档的一部分,并且具有返回此值的 GetSavedTrialUniqueId
函数。
void CALLBACK GameLicenseTrialCheck(XAsyncBlock* asyncBlock)
{
XStoreGameLicense result{};
HRESULT hr = XStoreQueryGameLicenseResult(
asyncBlock,
&result);
// Is this a trial?
if (result.isActive && result.isTrial)
{
// Is this trial owned by this user?
if (!result.isTrialOwnedByThisUser)
{
// The user can't use another user's trial time. Show an error message.
}
else
{
// Read the trialUniqueId that was saved with the game on the first run.
char trialUniqueId = GetSavedTrialUniqueId();
if (trialUniqueId != result.trialUniqueId)
{
// Because the IDs don't match, start the game from the beginning.
}
}
}
}
在开发中测试试用版
要使用试用许可证测试游戏,必须首先在合作伙伴中心使用试用许可证配置该游戏。
Xbox
对于本地版本,这是要求使用真实许可证许可生成的方案之一。 对于松散和打包版本,这需要在 MicrosoftGameConfig 中应用内容 ID 和 EKBID 替代。 有关更多详细信息,请参阅“启用许可证测试”。
请注意,必须在此处使用试用版本中的实际 EKBID。 若要获取此版本,需要使用具有试用许可证的帐户从 Microsoft 应用商店下载游戏版本。
配置此项后,使用已从应用商店获取试用许可证 的测试帐户 启动, XStoreGameLicense
将显示准确的试用属性。
启动版本应显示试用通知,如上所示。
电脑
这与使用完整许可证启用版本的操作相同,在 MicrosoftGame.config 中使用正确的应用标识,在注册表位置确保正确的内容 ID,并且该版本将遵循 Microsoft Store 应用、试用版或其他已登录帐户的许可证。