A 개발자 제품은 사용자가 여러 번 구매할 수 있는 아이템이나 능력으로, 예를 들어 인게임 화폐, 탄약 또는 포션이 있습니다.

개발자 제품 만들기
개발자 제품을 만들려면:
- Creations로 가서 게임을 선택합니다.
- 수익화 ⟩ 개발자 제품으로 이동합니다.
- 개발자 제품 만들기를 클릭합니다.
- 제품 아이콘으로 표시할 이미지를 업로드합니다. 이미지는 512x512 픽셀을 초과하지 않아야 하며, 원형 경계외에 중요한 세부사항이 포함되지 않아야 하고, .jpg, .png, 또는 .bmp 형식이어야 합니다.
- 제품의 이름과 설명을 입력합니다.
- 제품의 카테고리를 선택합니다. 카테고리는 게임 내 상점에서 아이템을 조직하는 데 사용됩니다.
- 제품 가격을 Robux로 설정합니다. 최소 가격은 1 Robux이며, 최대 가격은 10억 Robux입니다.
- 변경 사항 저장을 클릭합니다.
개발자 제품 ID 가져오기
스크립팅을 사용하려면 개발자 제품 ID가 필요합니다. 제품 ID를 가져오려면:
수익화 ⟩ 개발자 제품으로 이동합니다.
제품 썸네일 위에 마우스를 올리고, ⋯ 버튼을 클릭한 다음 상황에 맞는 메뉴에서 자산 ID 복사를 선택합니다.

개발자 제품 판매하기
개발자 제품을 판매하기 전에 판매 영수증을 적절히 처리하고 사용자가 구매한 제품을 부여하고 있는지 확인해야 합니다. 이를 위해 다음과 같은 작업을 수행해야 합니다:
- ProcessReceipt API를 사용하여 구매 영수증을 확인합니다. ProcessReceipt는 사용자가 게임 외부에서 제품을 구매했음을 자동으로 읽고 확인합니다.
- 각 영수증의 User ID, Developer Product 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를 사용하여 게임과 연결된 모든 개발자 제품을 검색합니다. 이 함수는 검사하고 필터링하여 게임 내 상점이나 제품 목록 GUI를 만드는 데 사용할 수 있는 Pages 객체를 반환합니다.
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 문을 대체합니다
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 내에서 함수를 결합할 수도 있습니다. 예를 들어, 버튼이나 공급 NPC와 같은 UI 요소를 만들고, 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가 올바르게 구현되었는지 확인하기 위해 테스트 모드를 사용해야 합니다.
테스트 모드에서 판매 중인 개발자 제품은 여러분과 그룹의 회원만 볼 수 있으며 일반 사용자에게는 보이지 않습니다.
구현을 테스트하려면:
- Creator Hub에서 수익화 ⟩ 개발자 제품으로 이동합니다.
- ⋮ 메뉴를 클릭하고 외부 구매 설정을 선택합니다.
- 외부 구매 설정 페이지에서 테스트 모드 활성화를 클릭합니다.
- 테스트 모드가 활성화되면 개발자 제품 페이지로 돌아가서 테스트할 제품을 선택합니다.
- 기본 설정 페이지에서 외부 구매 허용 체크박스를 선택하고 변경 사항을 저장합니다.
- 게임 세부정보 페이지의 스토어 탭으로 가서 판매할 수 있도록 만든 제품을 구매합니다.
- 게임에 들어가서 구매한 제품을 받았는지 확인합니다. ProcessReceipt API의 영수증 상태가 닫힘으로 업데이트되어야 합니다.
구현 테스트 후, Roblox는 테스트가 성공적으로 완료된 것을 확인하고, 게임 외부에서 개발자 제품을 판매할 수 있는 기능을 완전히 활성화할 수 있습니다.
ProcessReceipt API 및 구현에 대한 자세한 내용은 ProcessReceipt 페이지를 참조하세요.
외부 판매 활성화
외부 판매를 활성화하려면:
- 외부 구매 설정 페이지로 이동합니다.
- 외부 구매를 켭니다.
- 개발자 제품 페이지로 돌아가서 게임 외부에서 판매할 제품을 선택합니다.
- 기본 설정 페이지에서 외부 구매 허용 체크박스를 선택하고 변경 사항을 저장합니다.
- 제품이 이제 게임 세부정보 페이지의 스토어 탭에서 구매 가능하다는 것을 확인합니다.
개발자 제품의 외부 판매를 비활성화하려면 개발자 제품 페이지에서 제품을 선택하고 외부 구매 허용 체크박스를 해제합니다.
제한 사항
- 테스트 모드에서 판매되는 아이템은 실제 Robux 비용이 발생합니다. 저렴한 가격의 개발자 제품을 테스트하는 것이 좋습니다.
- 테스트 모드에서 판매되는 아이템은 여러분이나 그룹의 회원만 볼 수 있습니다.
- 외부 판매를 위해, 개발자 제품에는 썸네일이 있어야 합니다.
- 다음과 같은 아이템은 게임 외부에서 판매하지 마십시오:
- 유료 무작위 아이템
- 특정 수량, 시간, 장소 또는 사용자 설정과 역할에 제한된 아이템
개발자 제품 구매 처리하기
사용자가 개발자 제품을 구매한 후, 거래를 처리하고 기록해야 합니다. 이를 위해 Script를 ServerScriptService 내에서 사용하여 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
개발자 제품 분석
개발자 제품 분석을 사용하여 개별 제품의 성공을 분석하고, 트렌드를 식별하며, 잠재적인 미래 수익을 예측할 수 있습니다.
분석을 통해 할 수 있는 것:
- 선택한 기간 동안 상위 개발자 제품 보기.
- 판매 전반과 순수익을 분석할 수 있는 시계열 그래프에 최대 8개의 최고 판매 아이템 표시.
- 카탈로그를 모니터링하고 판매 및 순수익으로 아이템 정렬.
개발자 제품 분석에 접근하려면:
- Creations로 가서 게임을 선택합니다.
- 수익화 ⟩ 개발자 제품으로 이동합니다.
- 분석 탭을 선택합니다.
