开发者产品

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

一个 开发者产品 是用户可以购买多次的物品或能力,例如游戏内货币、弹药或药水。

创建开发者产品

要创建开发者产品:

  1. 转到 Creations 并选择一个游戏。
  2. 转到 货币化开发者产品
  3. 点击 创建开发者产品
  4. 上传一张图片作为产品图标。确保图片不超过 512x512 像素,不包含圆形边界外的重要细节,并且格式为 .jpg.png.bmp
  5. 输入产品名称和描述。
  6. 选择产品的类别。此类别用于组织您在游戏内商店中的物品。
  7. 设置产品的价格以 Robux 计。最低价格为 1 Robux,最高价格为 10亿 Robux。
  8. 点击 保存更改

获取开发者产品 ID

要使用脚本,您需要开发者产品 ID。获取产品 ID 的方法如下:

  1. 转到 货币化开发者产品

  2. 悬停在产品缩略图上,点击 按钮,并在上下文菜单中选择 复制资产 ID

销售开发者产品

在销售开发者产品之前,请确保您正确处理销售收据并向用户授予他们购买的产品。为此,您必须:

  • 使用 ProcessReceipt API 检查购买收据。ProcessReceipt 会自动读取并确认用户在游戏外购买了产品。
  • 验证每个收据的 用户 ID开发者产品 ID 和收据状态。
  • 如果收据的状态为 开放,则向用户授予他们所购买的开发者物品。
  • ProcessReceipt API 响应一个消息,确认收据并验证所购买的物品已被授予。

您可以通过两种方式销售开发者产品:

在您的游戏内

要在游戏内实现和销售开发者产品,请调用 MarketplaceService 函数。

使用 GetProductInfo 检索开发者产品的诸如名称和价格等信息,然后将该产品展示给用户。例如,您可以在游戏的市场中销售该产品。对于开发者产品,第二个参数必须为 Enum.InfoType.Product


local MarketplaceService = game:GetService("MarketplaceService")
-- 用你的开发者产品 ID 替换占位符 ID
local productId = 000000
local success, productInfo = pcall(function()
return MarketplaceService:GetProductInfo(productId, Enum.InfoType.Product)
end)
if success and productInfo then
-- 显示产品信息
-- 用 UI 代码替换打印语句以显示产品
print("开发者产品名称: " .. productInfo.Name)
print("价格(Robux): " .. productInfo.PriceInRobux)
print("描述: " .. productInfo.Description)
end

使用 GetDeveloperProductsAsync 检索与您的游戏关联的所有开发者产品。此功能返回一个 Pages 对象,您可以检查和过滤以构建游戏内商店或产品列表 GUI。


local MarketplaceService = game:GetService("MarketplaceService")
local success, developerProducts = pcall(function()
return MarketplaceService:GetDeveloperProductsAsync()
end)
if success and developerProducts then
local firstPage = developerProducts:GetCurrentPage()
for _, developerProduct in firstPage do
-- 用 UI 代码替换打印语句以显示产品
print(field .. ": " .. value)
end
end

使用 PromptProductPurchase 提示用户在游戏内购买产品。您可以在用户执行诸如按下按钮或与供应商 NPC 交谈等操作时调用此功能。


local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
-- 用你的开发者产品 ID 替换占位符 ID
local productId = 000000
local function promptProductPurchase()
local success, errorMessage = pcall(function()
MarketplaceService:PromptProductPurchase(player, productId)
end)
if success then
print("成功显示购买提示")
end
end

您还可以将函数组合在 LocalScript 中。例如,您可以创建 UI 元素,如按钮或供应商 NPC,然后使用 GetProductInfo() 将现有的开发者产品与该元素连接,检查产品是否在售,并使用 PromptProductPurchase() 每当用户点击时提示购买。


local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local player = Players.LocalPlayer
local button = script.Parent
-- 用你的开发者产品 ID 替换占位符 ID
local productId = 000000
-- 用户点击 UI 按钮时获取产品信息
button.MouseButton1Click:Connect(function()
local success, productInfo = pcall(function()
return MarketplaceService:GetProductInfo(productId, Enum.InfoType.Product)
end)
if success and productInfo then
-- 检查产品是否在售
if productInfo.IsForSale then
print("此产品正在销售")
-- 提示产品购买
MarketplaceService:PromptProductPurchase(player, productId)
else
-- 通知产品当前不在售
print("此产品当前不在售。")
end
else
print("获取产品信息时出错: " .. tostring(productInfo))
end
end)

在您的游戏外

要在游戏外启用开发者产品购买,您必须使用 ProcessReceipt API。在用户在您的游戏详细信息页面的 商店 标签中进行购买后,您必须使用 ProcessReceipt 确认他们的购买并在他们进入游戏后授予他们的物品。

测试模式

测试模式 功能帮助您验证通过模拟开发者产品在游戏外的购买流程。您应该使用测试模式以确保您正确实现了 ProcessReceipt,然后再启用外部开发者产品销售。

您在测试模式下销售的开发者产品只能被您和您的组的成员看到。它们对用户不可见。

要测试您的实现:

  1. Creator Hub 中,转到 货币化开发者产品
  2. 点击 菜单并选择 外部购买设置
  3. 外部购买设置 页面,点击 启用测试模式
  4. 测试模式启用后,返回 开发者产品 页面并选择要测试的产品。
  5. 基本设置 页面,选择 允许外部购买 复选框并保存更改。
  6. 转到游戏详细信息页面的 商店 标签,购买您已提供销售的产品。
  7. 进入游戏并确认您已收到所购买的产品。ProcessReceipt API 的收据状态应更新为 已关闭

测试实现后,Roblox 会验证测试是否已成功完成,并允许您完全启用外部开发者产品销售功能。

有关 ProcessReceipt API 及其实现的更多信息,请参见 ProcessReceipt 页面。

启用外部销售

要启用外部销售:

  1. 转到 外部购买设置 页面。
  2. 打开 外部购买
  3. 返回 开发者产品 页面并选择要在游戏外销售的产品。
  4. 基本设置 页面,选择 允许外部购买 复选框并保存更改。
  5. 确认产品现在在游戏详细信息页面的 商店 标签中可以购买。

要禁用开发者产品的外部销售,请在 开发者产品 页面上选择该产品并清除 允许外部购买 复选框。

限制

  • 测试模式下的待售物品实际花费 Robux。我们建议测试低成本的开发者产品。
  • 测试模式下的待售物品只能被您或您的组的成员看到。
  • 要在外部出售,您的开发者产品 必须 有缩略图。
  • 不应在游戏外销售以下物品:
    • 付费随机物品
    • 限定于特定数量、时间、地点或用户设置和角色的物品

处理开发者产品购买

在用户购买开发者产品后,您必须处理并记录交易。为此,使用 ScriptServerScriptService 中使用 ProcessReceipt 函数。

有关 ProcessReceipt API 及其实现的更多信息,请参见 ProcessReceipt 页面。


local MarketplaceService = game:GetService("MarketplaceService")
local Players = game:GetService("Players")
local productFunctions = {}
-- 示例:产品 ID 123123 恢复用户的全部健康
productFunctions[123123] = function(receipt, player)
local character = player.Character
local humanoid = character and character:FindFirstChildWhichIsA("Humanoid")
if humanoid then
humanoid.Health = humanoid.MaxHealth
-- 表示购买成功
return true
end
end
-- 示例:产品 ID 456456 奖励用户 100 个金币
productFunctions[456456] = function(receipt, player)
local leaderstats = player:FindFirstChild("leaderstats")
local gold = leaderstats and leaderstats:FindFirstChild("Gold")
if gold then
gold.Value += 100
return true
end
end
local function processReceipt(receiptInfo)
local userId = receiptInfo.PlayerId
local productId = receiptInfo.ProductId
local player = Players:GetPlayerByUserId(userId)
if player then
-- 获取与开发者产品 ID 相关联的处理函数并尝试运行
local handler = productFunctions[productId]
local success, result = pcall(handler, receiptInfo, player)
if success then
-- 用户已经获得了他们的物品
-- 返回 "PurchaseGranted" 确认交易
return Enum.ProductPurchaseDecision.PurchaseGranted
else
warn("处理收据时失败:", receiptInfo, result)
end
end
-- 用户的物品无法授予
-- 返回 "NotProcessedYet" 并在用户下次加入游戏时再次尝试
return Enum.ProductPurchaseDecision.NotProcessedYet
end
-- 设置回调
-- 这只能通过一个服务器脚本完成一次
MarketplaceService.ProcessReceipt = processReceipt

个性化您的游戏内商店

您可以使用产品智能 API 对开发者产品进行排序并推荐给用户。个性化您的游戏内商店有助于将最相关的物品展示给每个用户,提高参与度和收入。通过根据用户偏好定制开发者产品,您可以改善其发现,提高转换率,并解锁新的货币化机会。

为待售开发者产品排名

RankProductsAsync 接收一组产品 ID,并返回这些产品的个性化排序列表。您可以使用此方法为用户提供个性化的物品推荐。

示例:三个按用户排名的“能力”物品
为用户排名的三个物品。

local MarketplaceService = game:GetService("MarketplaceService")
-- 创建一个您想要排名的产品数组
local productIdentifiers = {
{InfoType = Enum.InfoType.GamePass, Id = 123},
{InfoType = Enum.InfoType.Product, Id = 456},
{InfoType = Enum.InfoType.Product, Id = 789}
}
-- 进行保护调用以处理错误
local success, rankedProducts = pcall(function()
return MarketplaceService:RankProductsAsync(productIdentifiers)
end)
if not success then
error("产品排名失败")
end
-- 将返回的物品加载到商店中
for i, rankedItem in ipairs(rankedProducts) do
local productIdentifier = rankedItem.ProductIdentifier
local productInfo = rankedItem.ProductInfo
-- ...
-- 将产品添加到商店的逻辑
end

显示您的顶级开发者产品

RecommendTopProductsAsync 接收一个 InfoType 值数组,并返回用户最有可能参与和购买的最多 50 个物品。您可以使用此方法在游戏内商店创建 “精选” 部分。

如果无法确定推荐,RecommendTopProductsAsync 将返回 0 个物品。

在少数情况下,对排名模型的调用可能会很慢。为了帮助防止用户出现额外的延迟,我们建议使用 task.spawn 使对 RecommendTopProducts 的调用为非阻塞。

示例:游戏内商店中的“精选”标签
游戏内商店的精选标签。

local MarketplaceService = game:GetService("MarketplaceService")
-- 创建一个您想要包含在推荐中的产品类型数组 -- 此示例同时包含通行证和开发者产品
local productTypes = {Enum.InfoType.GamePass, Enum.InfoType.Product}
-- 进行保护调用以处理错误
local success, topRankedItems = pcall(function()
return MarketplaceService:RecommendTopProductsAsync(productTypes)
end)
if not success then
error("产品排名失败")
end
-- 将返回的物品加载到商店中
-- 确保从 topRankedItems 中过滤掉任何不合格的物品,例如用户不再可以购买的开发者产品
for i, rankedItem in ipairs(topRankedItems) do
local productIdentifier = rankedItem.ProductIdentifier
local productInfo = rankedItem.ProductInfo
-- ...
-- 将产品添加到商店的逻辑
end

开发者产品分析

使用开发者产品分析来分析单个产品的成功情况,识别趋势并预测潜在未来收益。

通过分析,您可以:

  • 查看您在选定时间段内的顶级开发者产品。
  • 在时间序列图上展示最多八个销量最高的物品,以分析整体销售和净收入。
  • 监控您的目录,并按销售和净收入对物品进行排序。

要访问开发者产品分析:

  1. 转到 Creations 并选择一个游戏。
  2. 转到 货币化开发者产品
  3. 选择 分析 标签。
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。