订阅

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

游戏中的订阅允许您以月费的形式为用户提供重复的好处。订阅类似于 通行证,但通行证的好处是无限期提供的,而订阅的好处依赖于用户支付月费。

Roblox上的订阅具有以下特征:

  • 自动续订: 订阅是自动续订的,而不是一次性购买,可以以当地货币或Robux定价。
  • Robux支付: 无论是使用当地货币还是Robux购买订阅,您都将以Robux的形式获得订阅收入。有关更多细节,请参见 通过订阅赚钱
  • 单层级: 游戏中的所有订阅可以同时被用户拥有。当前不支持互斥订阅。
  • 区域定价: 默认情况下,使用Robux出售的订阅启用区域定价,且无法关闭。使用当地货币出售的订阅不提供区域定价。

订阅指南

在创建订阅之前,请确保它们符合 Roblox的服务条款 和当地法律。任何从事诈骗、试图通过虚假报价误导用户或以其他方式违反我们的 社区标准 的游戏将被下线。

您还必须确保您的订阅遵循以下指南:

  • 提供清晰可识别的订阅选项: 使用简短、简明且自解释的名称,使订阅选项彼此区分。当在游戏内销售时,指定每个选项的价格和持续时间。
  • 跨平台和设备提供相同的好处: 无论订阅是在何处购买,确保用户在任一订阅计划中获得相同的好处。
  • 设计订阅以与彼此和整体游戏产品搭配: 逐层提供相同好处的方案,像提供“青铜”、“白银”和“黄金”层级的互斥选项,目前不可用。确保订阅代表一组独特的好处。
  • 在整个订阅期内提供好处: 一旦订阅产品上线,遵守描述的好处,并且不在后台撤回任何好处。
  • 不在游戏内引导用户转向其他平台(如移动设备、网络等)购买: 虽然您可以在平台外与用户交流,但使用Roblox应用程序引导用户在其他地方购买是被禁止的。
  • 用户支付后不要通过附加要求来限制订阅好处: 要求用户执行额外任务(如在社交媒体上发布)才能获得他们已支付的好处是禁止的。此指南不影响战斗通行证,您可以创建并将其作为订阅产品进行营销。

Robux与当地货币

订阅可以以Robux或当地货币定价。以下表格比较了这两种支付选项。

Robux当地货币
资格所有创作者需要一个通过身份证或电话号码验证的帐户
平台可在所有平台上使用可在网页、App Store和Google Play上使用
国家所有支持Roblox的国家均可用在阿根廷、中国、哥伦比亚、印度、印度尼西亚、
日本、俄罗斯、台湾、土耳其、阿联酋、乌克兰和越南不可用
价格任何金额等于或大于49 Robux$2.99、$4.99、$7.99、$9.99或$14.99
区域定价默认启用不可用
支付每月获得订阅收入的70%第一个月70%,之后的每个月100%

创建订阅

要创建订阅:

  1. 转到您的游戏的 创作者仪表板 并选择 货币化订阅
  2. 点击 创建订阅
  3. 上传封面图像。
  4. 输入唯一的名称。您不能在同一游戏中有两个同名的订阅。
  5. 输入清楚描述您所提供的好处的描述。
  6. 选择以下付款选项之一:
    • 订阅者支付Robux: 向用户收取以Robux计的定期订阅费。如果您选择此选项,则必须输入大于或等于49 Robux的自定义价格。区域定价 默认启用,并无法关闭。
    • 订阅者支付当地货币: 向用户收取以当地货币计的定期订阅费。如果您选择此选项,则必须从可用的5个价格等级中选择一个订阅价格。
  7. 选择以下产品类型之一:
    • 耐用: 例如武器等在使用或获取后仍然存在的永久性物品。如果订阅包括不同类型商品的捆绑,其中一个或多个商品为耐用项,比如包含剑和药水的价值包,请选择 耐用 作为产品类型。
    • 消耗品: 在使用或获取后会过期的临时可重复购买的物品,例如提供临时增益的消耗药水。
    • 货币: 用户可以用于购买您游戏内物品的任何交易媒介。
  8. 点击 创建订阅

激活订阅

每个游戏最多可以有 50个订阅,包括活动和非活动订阅。

要将订阅上架出售,单击您想要激活的订阅旁边的 并选择 激活。活动订阅会自动在游戏详情页面的 商店 标签中可供出售,并且可以通过 MarketplaceService 函数将其添加到您的游戏中。

在首次激活订阅之前,您必须确认您游戏名称的简短版本。该简短游戏名称将在用户订阅时显示,并与您在 创建订阅 中创建的订阅名称一起出现。

订阅状态

订阅有两种可能的状态:

  • 活动: 活动订阅可供出售,订阅者可以在下一个周期开始时续订他们的订阅。
  • 非活动: 非活动订阅不可供出售。

要更改订阅的状态,请单击订阅图块右上角的 并选择 激活(如果订阅目前处于非活动状态)或 下架销售(如果订阅目前处于活动状态)。

如果您选择 下架销售,您将有机会让现有订阅者续订其订阅,或者取消当前订阅者的未来续订。如果您不打算从游戏中永久删除相关的订阅好处,我们建议您让现有订阅者续订他们的订阅。

编辑订阅

您可以编辑的字段取决于付款方式。

可编辑字段以Robux出售的订阅以当地货币出售的订阅
封面图像
名称
描述
付款方式是(可以切换至当地货币)是(可以切换至Robux)
价格是(每60天可更改一次)
产品类型
活动状态

更改付款方式仅影响新订阅。现有订阅者保持其原始付款方式,必须取消并重新订阅才能切换。

删除订阅

要删除订阅,请单击您想要删除的订阅旁边的 并选择 删除

删除活动订阅会导致活动订阅者获得全额退款,而您将获得0 Robux。在大多数情况下,如果您要删除订阅,我们建议您先将其下架,选择取消所有续订的选项,并等待当前周期结束。

删除订阅需要提供订阅ID的最后四位数字以进行确认。

将订阅集成到游戏中

检查用户的订阅状态

以下代码示例在您的游戏中实现订阅检测:


-- 在服务器上运行此代码
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local SUBSCRIPTION_ID = "EXP-11111111" -- 用您的订阅ID替换
local function grantAward(player: Player)
-- 您应该在这里授予与订阅相关联的奖励
end
local function revokeAwardIfGranted(player: Player)
-- 此方法会被每个没有订阅的玩家调用
-- 如果您的代码将订阅保存到数据存储中或者提供一些需要“撤销”的好处
-- 您应该使用此方法来处理撤销
end
local function checkSubStatus(player)
local success, response = pcall(function()
return MarketplaceService:GetUserSubscriptionStatusAsync(player, SUBSCRIPTION_ID)
end)
if not success then
warn(`检查玩家是否有订阅时出错:{response}`)
return
end
if response.IsSubscribed then
grantAward(player)
else
revokeAwardIfGranted(player)
end
end
local function onUserSubscriptionStatusChanged(player: Player, subscriptionId: string)
if subscriptionId == SUBSCRIPTION_ID then
checkSubStatus(player)
end
end
Players.PlayerAdded:Connect(checkSubStatus)
Players.UserSubscriptionStatusChanged:Connect(onUserSubscriptionStatusChanged)

用订阅替换通行证

在您的游戏中推出订阅的一种选择是用订阅替换现有的通行证。如果您想快速实现订阅而不添加新功能或奖励,这是一个很好的选择。

替换通行证为订阅时,请记住以下几点:

  • 任何已持有通行证的现有玩家应继续获得他们所支付的好处。
  • 应将通行证下架,以便新用户可以购买订阅。
  • 订阅可以被撤销,这意味着如果您的通行证先前将其好处持久化到数据存储中,则需要“撤销”这些好处。此考虑不适用于所有通行证实现,但可能适用于更复杂的实施。

以下代码示例替换通行证为订阅:


-- 在服务器上运行此代码
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local LEGACY_GAME_PASS_ID = 1234 -- 用要替换为订阅的通行证ID替换
local SUBSCRIPTION_ID = "EXP-11111111" -- 用您的订阅ID替换
local function awardBenefit(player: Player)
-- 您应该在这里授予订阅的好处
end
local function revokeBenefitIfGranted(player: Player)
-- 此方法会被每个没有订阅的玩家调用
-- 如果您的代码将订阅保存到数据存储中或者提供一些需要“撤销”的好处
-- 您应该使用此方法来处理撤销
end
local function checkSubscriptionStatus(player: Player)
local success, result = pcall(function()
return MarketplaceService:GetUserSubscriptionStatusAsync(player, SUBSCRIPTION_ID)
end)
if not success then
print(`获取订阅状态时出错:{result}`)
return
end
if result.IsSubscribed then
awardBenefit(player)
else
revokeBenefitIfGranted(player)
end
end
local function onPlayerAdded(player: Player)
local success, result = pcall(function()
return MarketplaceService:UserOwnsGamePassAsync(player.UserId, LEGACY_GAME_PASS_ID)
end)
if not success then
print(`获取通行证状态时出错:{result}`)
return
end
if result then
-- 如果玩家已购买遗留通行证,我们无需查找他们的订阅状态
-- 因为他们已经获得了终身的好处
awardBenefit(player)
return
end
checkSubscriptionStatus(player)
end
local function onUserSubscriptionStatusChanged(player: Player, subscriptionId: string)
if subscriptionId == SUBSCRIPTION_ID then
checkSubscriptionStatus(player)
end
end
local function onPromptGamePassPurchaseFinished(player: Player, purchasedPassID: number, purchaseSuccess: boolean)
if purchaseSuccess and purchasedPassID == LEGACY_GAME_PASS_ID then
awardBenefit(player)
end
end
Players.PlayerAdded:Connect(onPlayerAdded)
Players.UserSubscriptionStatusChanged:Connect(onUserSubscriptionStatusChanged)
-- 我们会继续监听通行证购买,以防该通行证仍在售
MarketplaceService.PromptGamePassPurchaseFinished:Connect(onPromptGamePassPurchaseFinished)

提示订阅购买

用户可以直接在您游戏详情页面的 商店 标签中购买订阅,但您还应添加一种方法,让他们在游戏中购买订阅。

当您提示购买订阅时,如果玩家已经拥有订阅,UserSubscriptionStatusChanged 会触发,这有助于捕捉玩家在已经在游戏中的情况下从您游戏详情页面的 商店 标签中购买订阅的场景。

尽管您可以从客户端提示购买订阅,但检查用户是否已经拥有订阅的 GetUserSubscriptionStatusAsync 必须在服务器上完成。

以下代码示例创建一个 RemoteFunction,客户端可以使用它来请求订阅状态:


-- 此代码应在服务器上运行
local ReplicatedStorage = game:GetService("ReplicatedStorage")
-- 创建一个客户端可以使用的RemoteFunction来请求订阅状态
local getSubscriptionStatusRemote = Instance.new("RemoteFunction")
getSubscriptionStatusRemote.Name = "GetSubscriptionStatus"
getSubscriptionStatusRemote.Parent = ReplicatedStorage
getSubscriptionStatusRemote.OnServerInvoke = function(player: Player, subscriptionId: string)
assert(typeof(subscriptionId) == "string")
return MarketplaceService:GetUserSubscriptionStatusAsync(player, subscriptionId)
end

-- 此代码应在客户端上运行
local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local SUBSCRIPTION_ID = "EXP-11111111" -- 用您的订阅ID替换
local getSubscriptionStatusRemote = ReplicatedStorage:WaitForChild("GetSubscriptionStatus")
local purchaseSubscriptionButton = script.Parent.PromptPurchaseSubscription -- 用您的按钮替换
local function playerHasSubscription()
-- 注意,如果您的订阅替换了通行证,您还需要检查通行证是否被拥有
local success, result = pcall(function()
return getSubscriptionStatusRemote:InvokeServer(SUBSCRIPTION_ID)
end)
if not success then
print(`获取订阅状态时出错:{result}`)
return
end
return result.IsSubscribed
end
-- 如果玩家已经拥有订阅,则隐藏按钮
local function hideButtonIfPlayerHasSubscription()
if playerHasSubscription() then
purchaseSubscriptionButton.Visible = false
end
end
local function onPromptSubscriptionPurchaseFinished(player: Player, subscriptionId: string, didTryPurchasing: boolean)
if didTryPurchasing then
-- 确认订阅被注册可能需要一些时间,因此我们将在10秒内检查购买是否顺利
-- 如果顺利则隐藏按钮
task.delay(10, hideButtonIfPlayerHasSubscription)
end
end
-- 如果玩家已经拥有订阅,我们不希望显示按钮
hideButtonIfPlayerHasSubscription()
purchaseSubscriptionButton.Activated:Connect(function()
MarketplaceService:PromptSubscriptionPurchase(Players.LocalPlayer, SUBSCRIPTION_ID)
-- 如果玩家已经拥有订阅,隐藏按钮
hideButtonIfPlayerHasSubscription()
end)
MarketplaceService.PromptSubscriptionPurchaseFinished:Connect(onPromptSubscriptionPurchaseFinished)

其他相关功能

MarketplaceService 中还有其他相关功能:

通过订阅赚钱

对于 以当地货币计价的订阅,根据您选择的基础平台价格,按每1美元的1 Robux的速度赚取Robux,在平台费用扣除后。您在第一个月赚取 70%的订阅价值,从第二个月起赚取 100%。这种收入分成模式在所有平台上是一样的。

例如,如果您的月度订阅定价为5美元:

  • 第一个月: 您会赚取350 Robux(500 * 0.7 = 350
  • 第二个月及以后: 您将赚取500 Robux的全额(500 * 1.0 = 500

对于 以Robux计价的订阅,您每月赚取 70%的订阅价值。这种收入分成模式在所有平台上也是一样的。

例如,如果您的月度订阅定价为500 Robux:

  • 第一个月: 您会赚取350 Robux(500 * 0.7 = 350
  • 第二个月及以后: 您将继续赚取350 Robux(500 * 0.7 = 350

来自当地货币订阅的收入需经历30天的保留期,订阅的完整期限结束后才会添加到您的Robux余额中。

来自Robux订阅的收入遵循与通行证和开发者产品相同的保留期,大约为5天。

退款

对于以当地货币计价的订阅,如果用户在30天的保留期内通过其银行或应用商店请求退款,则保留将被取消,您将无法获得该交易的支付。

在保留窗口外收到的退款将导致退款交易的支付金额从您的Robux余额中扣除。如果您的游戏由一个组拥有,而该组的余额低于扣除金额,余额差额将从组所有者的Robux余额中扣除。

当用户取消或未能续订其活动订阅时,他们不会自动获得退款。用户必须手动请求退款,这将根据具体情况处理。有关用户订阅退款流程的更多信息,请查看 帮助中心

支付

您可以在 Robux余额我的交易 中找到您的订阅支付。

订阅组订阅 支付在 收入 Robux 下显示,而退款则作为 支付撤销 grouped 在 支出 Robux 下。订阅和组订阅的子页面提供其各自类别的其他信息。

要查看个别用户的退款信息,请使用 GetUserSubscriptionPaymentHistoryAsync

订阅分析

订阅分析帮助您评估各个订阅的成功程度,识别趋势并预测潜在的未来收益。订阅在首次激活后添加到订阅分析页面,并且在它们被停用或删除时不会被移除。您可以通过创作者仪表板访问现成的分析,或者使用网络钩子实时捕获订阅更新。

通过创作者仪表板

要在创作者仪表板上访问订阅分析:

  1. 转到您的 创作 页面,在 创作者仪表板 中选择您的游戏。
  2. 转到 货币化订阅
  3. 选择 分析 标签。

订阅分析跟踪以下指标:

  • 订阅数: 在您游戏中活动订阅的总数。
  • 预计收入: 在扣除费用后的游戏净收入。未包括退款信息。
  • 订阅者细分: 不同类型的订阅者。
    • 新用户: 首次付费订阅的用户数。
    • 续订用户: 在先前周期内购买的续订订阅数。
    • 恢复用户: 先前取消的用户购买的新订阅数。
  • 取消: 没有续订的订阅数量。这包括所有无论触发原因的取消,无论是用户取消、创作者停用订阅还是其他原因。
    • 取消与退款不同。被取消的订阅是不会再续订的订阅,但已全面支付剩余账单周期的费用,而退款则将支付的订阅金额退还给用户。
  • 按平台的订阅数: 在每个平台上购买的订阅数量。
  • 平台收入: 通过在每个平台上购买的订阅获得的净收入。

这些信息以基于日期范围的图表和历史标签下的总订阅清单的形式呈现。

通过网络钩子

Cloud API Webhook功能包括四个订阅事件的触发器:取消、购买、退款和续订。这些通知会立即生效,因此您可以实时响应或创建自己的自定义分析。有关如何设置Webhook的更多信息,请参见 Webhook通知

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。