訂閱 在遊戲中讓您提供用戶每月支付費用獲得持續的福利。訂閱類似於 通行證,但通行證的福利是無限期獲得,而訂閱的福利則取決於用戶支付每月費用。
Roblox上的訂閱具有以下特點:
- 自動續訂: 訂閱是自動續訂的,而非一次性購買,價格可以是當地貨幣或Robux。
- Robux支付: 無論是用當地貨幣還是Robux購買的訂閱,您都會以Robux獲得訂閱收入。詳細資訊,請參考 透過訂閱賺錢。
- 單一層級: 遊戲中的所有訂閱可以同時被用戶擁有。不支持互斥的訂閱。
- 區域定價: 預設啟用針對以Robux出售的訂閱的 區域定價,無法關閉。以當地貨幣出售的訂閱不支援區域定價。
訂閱指南
在創建訂閱之前,請確保其符合 Roblox的使用條款 並遵守當地法律。任何從事詐騙、試圖以虛假提供誤導用戶或以其他方式違反我們的 社區準則 的遊戲將會被下架。
您還必須確保您的訂閱遵循以下指南:
- 提供清晰可辨的訂閱選項: 使用簡短、簡潔和自說明的名稱以區分訂閱選項。必須在遊戲內銷售時為每個選項具體說明價格和持續時間。
- 在所有平台和設備上提供相同的福利: 不論訂閱是在哪裡購買,確保用戶在任何給定的訂閱計劃下都能獲得相同的福利。
- 設計訂閱以互相配合及整體遊戲內容: 現在不支援提供互斥的同一套福利的分層設計,例如提供「銅」、「銀」和「金」層級。確保訂閱表示不同的福利集合。
- 提供完整的訂閱期限內福利: 一旦訂閱提供開始,必須遵守所描述的福利,並且不得在背後撤銷福利。
- 不要在遊戲內指導用戶在其他平台(如移動設備、網絡等)上購買: 雖然您可以自由地在平台外與用戶交流,但禁止利用Roblox應用將用戶導向其他購買渠道。
- 在用戶支付後不要以其他要求限制訂閱福利: 要求用戶執行額外任務(如在社交媒體上發布)以獲取他們已支付的福利是禁止的。這一指導方針不影響戰鬥通行證,您可以在訂閱購買中創建和推廣它們。
Robux與當地貨幣
訂閱可以以Robux或當地貨幣定價。以下表格比較這兩種支付選擇。
| Robux | 當地貨幣 | |
|---|---|---|
| 資格 | 所有創作者 | 需要經過身份或電話號碼驗證的帳戶 |
| 平台 | 在所有平台可用 | 在Web、App Store和Google Play可用 |
| 國家 | 在所有支持Roblox的國家可用 | 在阿根廷、中國、哥倫比亞、印度、印尼、 日本、俄羅斯、台灣、土耳其(Türkiye)、阿聯酋、烏克蘭及越南不可用 |
| 價格 | 等於或大於49 Robux的任意金額 | $2.99、$4.99、$7.99、$9.99或$14.99 |
| 區域定價 | 預設啟用 | 不可用 |
| 支付 | 每月70%的訂閱收入 | 第一個月70%,隨後每個月100% |
創建訂閱
要創建訂閱:
- 點擊 創建訂閱。
- 上傳封面圖片。
- 輸入一個唯一的名稱。在同一遊戲中不得有兩個相同名稱的訂閱。
- 輸入清楚描述您所提供福利的描述。
- 選擇以下支付選項之一:
- 訂閱者支付Robux: 向用戶收取Robux的定期訂閱費用。如果您選擇此選項,必須輸入自定義價格,並且價格必須大於或等於49 Robux。訂閱的 區域定價 預設啟用,無法關閉。
- 訂閱者支付當地貨幣: 向用戶收取他們當地貨幣的定期訂閱費用。如果您選擇此選項,必須從5個可用的價格層中選擇一個訂閱價格。
- 選擇以下產品類型之一:
- 耐用: 在使用或獲得後仍然存在的永久性物品,例如武器類的實體物品。如果訂閱包含不同類型商品的包裹,且其中一個或多個為耐用品,例如包含一把劍和一瓶藥水的增值包,則選擇 耐用 作為產品類型。
- 消耗品: 在使用或獲得後會過期的可重複購買的臨時物品,例如提供臨時增強效果的消耗品藥水。
- 貨幣: 用戶可以用於在您的遊戲內購買物品的任何交換媒介。
- 點擊 創建訂閱。
啟用訂閱
每個遊戲最多可以擁有 50個訂閱,包括活動和非活動訂閱。
要將訂閱上架銷售,點擊您想要啟用的訂閱旁邊的 ⋮,選擇 啟用。啟用的訂閱會自動在遊戲詳細資料頁的 商店 標籤中上架銷售,並且可以通過 MarketplaceService 函數添加到遊戲中。
在首次啟用訂閱之前,您必須確認您遊戲名稱的縮短版本。該縮短名稱將在用戶訂閱時顯示,並顯示在您在 創建訂閱 中創建的訂閱名稱旁邊。
訂閱狀態
訂閱有兩種可能的狀態:
- 活動: 活動訂閱可供銷售,訂閱者可以在下個周期開始時續訂他們的訂閱。
- 非活動: 非活動訂閱不可用於銷售。
要更改訂閱的狀態,點擊訂閱瓷磚右上角的 ⋯,並選擇 啟用(如果訂閱當前為非活動狀態)或 下架(如果訂閱當前為活動狀態)。
如果您選擇 下架,您將獲得選擇是否允許現有訂閱者續訂他們的訂閱,或者取消當前訂閱者的未來續訂。如果您不打算永久地從遊戲中移除相關訂閱福利,我們建議您允許現有的訂閱者續訂他們的訂閱。
編輯訂閱
您可以編輯的字段取決於支付方法。
| 可編輯字段 | 以Robux出售的訂閱 | 以當地貨幣出售的訂閱 |
|---|---|---|
| 封面圖片 | 是 | 是 |
| 名稱 | 否 | 否 |
| 描述 | 是 | 是 |
| 支付方法 | 是(可以切換到當地貨幣) | 是(可以切換到Robux) |
| 價格 | 是(每60天一次) | 否 |
| 產品類型 | 否 | 否 |
| 活動狀態 | 是 | 是 |
更改支付方法僅影響新訂閱。現有的訂閱者仍然使用原始支付方法,必須取消並重新訂閱才能切換。
刪除訂閱
要刪除訂閱,點擊您想刪除的訂閱旁邊的 ⋮,選擇 刪除。
刪除活動訂閱將導致活動訂閱者獲得全額退款,而您不會獲得任何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 中可用的其他相關函數包括:
- GetSubscriptionProductInfoAsync,返回訂閱的產品信息。包括訂閱是以Robux還是當地貨幣定價。
- GetUserSubscriptionPaymentHistoryAsync,返回用戶的訂閱支付歷史。
- GetUserSubscriptionStatusAsync,返回用戶的訂閱狀態。
透過訂閱賺錢
對於 以當地貨幣定價的訂閱,您以每US $0.01至1 Robux的速度根據您選擇的基本平台價格賺取Robux,扣除平台費用後。您在第一個月賺取 70%的訂閱價值,並且從第二個月起賺取 100%。這一收入分配在所有平台上是一致的。
例如,如果您的每月訂閱定價為USD $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 下,而退款作為 支付反轉 顯示在 外出 Robux 下。訂閱和集團訂閱的子頁面提供其各自類別的更多信息。

要查看個別用戶的退款信息,請使用 GetUserSubscriptionPaymentHistoryAsync。
訂閱分析
訂閱分析 幫助您衡量個別訂閱的成功,識別趨勢並預測潛在未來收益。訂閱在首次啟用後將添加到訂閱分析頁面,並在停用或刪除時不會被移除。您可以通過創作者儀表板訪問現成的分析,或使用Webhooks捕捉實時訂閱更新。
通過創作者儀表板
要在創作者儀表板上訪問訂閱分析:
- 前往您的 創作 頁面,並選擇您的遊戲。
- 前往 獲利 ⟩ 訂閱。
- 選擇 分析 標籤。
訂閱分析跟踪以下指標:
- 訂閱數量: 您遊戲中活動訂閱的總數量。
- 預估收入: 扣除費用後遊戲獲得的淨收入。未包括退款信息。
- 訂閱者分類: 不同類型的訂閱者。
- 新訂戶: 首次訂閱者的訂閱購買數量。
- 續訂: 先前期間購買的續訂訂閱數量。
- 復甦: 由先前取消的用戶購買的新訂閱數量。
- 取消: 未續訂的訂閱數量。這包括所有無論是用戶取消、創作者停用訂閱,還是其他原因導致的取消。
- 取消與退款不同。取消的訂閱是將不再續訂但在計費周期剩餘部分中已全額支付的訂閱,而退款則將已支付的訂閱金額返還給用戶。
- 按平台的訂閱數量: 每個平台上購入的訂閱數量。
- 平台收入: 透過在每個平台上購買的訂閱所獲得的淨收入。
這些信息以圖表形式顯示在 趨勢 標籤下,並以訂閱的綜合清單形式顯示在 歷史 標籤下。

通過Webhook
Cloud API Webhook功能包括四個訂閱事件的觸發:取消、購買、退款和續訂。這些通知會立即觸發,因此您可以實時響應或創建自己的自定義分析。要了解如何設置Webhook,請查看 Webhook通知。