← Retour LearnBloxLearnBlox

Publier & Monétiser

Module 14

Sur Roblox, publier ton jeu et le monétiser sont deux étapes distinctes. Publier rend ton expérience accessible à tous les joueurs ; monétiser te permet d'en tirer des Robux via des achats intégrés. Cette antisèche regroupe les deux : la mise en ligne (Game Settings, icône, thumbnails, visibilité) et les outils de revenus du MarketplaceService.

Roblox propose deux grands types d'achats. Le GamePass est un achat permanent et unique : une fois acheté, le joueur le possède pour toujours (idéal pour un avantage durable comme un accès VIP ou une vitesse accrue). Le Developer Product est répétable : le joueur peut l'acheter autant de fois qu'il veut (parfait pour des pièces, des recharges ou des boosts consommables). Bien choisir entre les deux dès le départ t'évite de devoir tout reconstruire plus tard.

🚀 Publier son jeu
Étape
1. Game SettingsHome → Game Settings
2. Nom & descriptionOnglet Basic Info
3. Genre & sous-genreOnglet Basic Info
4. Icône (512×512)Onglet Basic Info
5. Thumbnails (1920×1080)Onglet Basic Info
6. Visibilité publiqueOnglet Permissions → Public
7. PublierFile → Publish to Roblox
🎫 GamePass — Achat permanent
-- Vérifier si un joueur possède un GamePass
local MPS = game:GetService("MarketplaceService")
local PASS_ID = 123456789  -- ton ID GamePass

local ok, hasPass = pcall(function()
    return MPS:UserOwnsGamePassAsync(
        plr.UserId, PASS_ID
    )
end)

if ok and hasPass then
    -- accorder l'avantage
end

-- Ouvrir la fenêtre d'achat (côté client)
MPS:PromptGamePassPurchase(plr, PASS_ID)
🔁 Developer Product — Achat répétable
-- Traiter un achat (côté SERVEUR uniquement)
local MPS = game:GetService("MarketplaceService")
local PRODUCT_ID = 987654321

MPS.ProcessReceipt = function(info)
    local plr = game.Players:GetPlayerByUserId(info.PlayerId)
    if not plr then
        return Enum.ProductPurchaseDecision.NotProcessedYet
    end
    if info.ProductId == PRODUCT_ID then
        -- donner les Robux/gemmes/etc.
    end
    return Enum.ProductPurchaseDecision.PurchaseGranted
end

-- Déclencher l'achat (côté client)
MPS:PromptProductPurchase(plr, PRODUCT_ID)
🔔 PromptPurchaseFinished
-- Côté client : détecter si l'achat est confirmé
local MPS = game:GetService("MarketplaceService")

MPS.PromptGamePassPurchaseFinished:Connect(
    function(plr, passId, purchased)
        if purchased then
            print("Acheté !")
        end
    end
)
💡 GamePass = avantage permanent (vitesse, accès zone…)
Developer Product = achat répétable (pièces, boost…)
⚠️ ProcessReceipt doit toujours retourner PurchaseGranted après traitement — sinon Roblox relance l'event indéfiniment !
✅ Bonnes pratiques & erreurs fréquentes
  • Traite toujours les Developer Products côté serveur dans ProcessReceipt, jamais côté client : un client peut être falsifié, et tu offrirais des achats gratuits aux tricheurs.
  • Retourne Enum.ProductPurchaseDecision.PurchaseGranted seulement une fois l'avantage réellement accordé. Si tu oublies, Roblox considère l'achat non traité et relance l'événement à chaque session — le joueur sera re-crédité en boucle.
  • Rends tes achats idempotents : garde une trace des reçus déjà traités (par DataStore) pour ne pas accorder deux fois le même produit en cas de double appel.
  • Soigne ton icône et tes thumbnails : ce sont les premiers éléments que voit un joueur sur la page de ton jeu. Une bonne vignette fait une vraie différence sur le taux de clic.
  • Teste tes achats en mode Studio avant publication : Roblox simule les transactions sans débiter de vrais Robux.