Communitygithub.com

unity-technologies/mettre-en-œuvre-achats-in-app

Implémenter, configurer et déboguer les achats intégrés (IAP) Unity — connexion au magasin, catalogue de produits, achats consommables/non-consommables/abonnements, flux en deux étapes (en attente → confirmation), validation de reçu, vérification des droits, restauration des transactions, extensions Apple (achats promotionnels, Demander à acheter, échange de codes) et extensions Google Play (mise à niveau/rétrogradation d'abonnement), capacités D2C (vente directe au client), fournisseur de paiement tiers (Stripe/Coda) via Unity IAP/Unity Cloud.

Qu'est-ce que mettre-en-œuvre-achats-in-app ?

Cette compétence permet d'ajouter, configurer et déboguer les achats intégrés (IAP) dans Unity, en prenant en charge les magasins Apple App Store et Google Play, ainsi que les paiements directs via Stripe ou Coda (D2C). Elle utilise le namespace `UnityEngine.Purchasing` et le package `com.unity.purchasing`. La compétence gère l'intégralité du cycle de vie : connexion au magasin, récupération des produits, flux d'achat en deux étapes (en attente puis confirmation), validation de reçu, vérification des droits (entitlement), et restauration des transactions. Elle est particulièrement utile pour migrer depuis des solutions tierces comme RevenueCat, Adapty, Essential Kit ou UniPay, ou depuis les bibliothèques natives Google BillingClient et Apple StoreKit. Un fichier de pré-vérification (`references/pre-check.md`) analyse d'abord le projet pour déterminer la bonne procédure, évitant ainsi les conflits entre packages. La compétence est conçue pour des développeurs Unity utilisant des microtransactions, de la monétisation, ou des achats réels dans leur jeu.

Compatible avec~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/unity-technologies/skills/tree/main/skills/implement-in-app-purchases

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

Achats Intégrés Unity

Espace de noms : UnityEngine.Purchasing | Sécurité : UnityEngine.Purchasing.Security Paquet : com.unity.purchasing

Unity IAP a son propre chemin d'initialisation via UnityIAPServices.StoreController() → store.Connect(). Il ne nécessite pas UnityServices.InitializeAsync(), mais les deux peuvent coexister si votre projet utilise d'autres services UGS. Si Analytics est présent et que InitializeAsync() est appelée, IAP enverra automatiquement des événements de transaction.

Avant de commencer

Lisez toujours references/pre-check.md en premier. Ce fichier analyse le projet à la recherche de packages IAP tiers, de Google Billing natif et de versions existantes d'Unity IAP, puis achemine vers le bon chemin. Ne lisez aucun autre fichier de référence et n'apportez aucune modification tant que le routage n'est pas résolu.

Références détaillées

Lisez les fichiers de référence à la demande — seulement lorsque vous avez besoin de signatures d'API spécifiques, de détails d'extensions de plateforme ou de correspondances de migration.

Flux d'initialisation

  1. Obtenez StoreController via UnityIAPServices.StoreController() (ou des services individuels via DefaultStore(), DefaultProduct(), DefaultPurchase())
  2. Abonnez-vous à tous les événements requis (voir Abonnements aux événements requis ci-dessous) avant d'appeler Connect()
  3. await store.Connect() pour vous connecter au magasin de la plateforme
  4. Sur OnStoreConnected, appelez store.FetchProducts(List<ProductDefinition>) pour charger le catalogue
  5. Sur OnProductsFetched, les produits sont prêts pour l'affichage et l'achat

Utilisez Awake() pour l'initialisation — garantit qu'IAP est prêt avant les autres méthodes Start().

Types de produits : ProductType.Consumable, ProductType.NonConsumable, ProductType.Subscription.

Récupération des produits

Définissez les produits comme List<ProductDefinition> et passez-les à store.FetchProducts(). Utilisez StoreSpecificIds lorsque les identifiants de produits diffèrent entre les magasins Apple/Google. Pour les catalogues complexes, utilisez CatalogProvider pour gérer les ensembles de produits et les identifiants spécifiques au magasin.

MéthodeComportement
GetProducts()Renvoie la liste des produits mise en cache (synchrone, obsolète si FetchProducts n'a pas été appelée)
FetchProducts()Interroge le magasin pour obtenir des prix/disponibilités à jour et met à jour le cache
GetProductById(id)Renvoie un seul produit mis en cache par son identifiant

Ces méthodes ne sont PAS interchangeables. Appelez toujours FetchProducts() d'abord avant de vous fier à GetProducts().

Flux d'achat en deux étapes

IAP v5 utilise un flux obligatoire en deux étapes : En attente → Confirmer.

  1. store.PurchaseProduct(product) — lance la boîte de dialogue d'achat de la plateforme
  2. OnPurchasePending se déclenche — vous recevez une PendingOrder
  3. Validez le reçu, accordez le contenu au joueur
  4. store.ConfirmPurchase(pendingOrder) — finalise la transaction
  5. OnPurchaseConfirmed se déclenche — reçoit le type de base Order ; utilisez la correspondance de modèle ConfirmedOrder (succès) vs FailedOrder (échec de la confirmation)

Vous DEVEZ appeler ConfirmPurchase(pendingOrder) après avoir accordé le contenu. Les achats non confirmés sont redistribués au prochain lancement de l'application pour éviter les pertes d'achats.

Dé-duplication : OnPurchasePending peut se déclencher plusieurs fois pour le même achat (par exemple, redémarrage de l'application avant confirmation). Vérifiez toujours si le contenu a déjà été accordé.

Consommables : Les achats consommables confirmés ne sont PAS renvoyés par FetchPurchases. Suivez vous-même les octrois de consommables (par exemple, dans Cloud Save ou Economy).

Achats différés : OnPurchaseDeferred se déclenche pour les achats Demander à acheter (iOS) et les achats différés Google Play. N'accordez PAS le contenu — attendez OnPurchasePending une fois approuvé.

Restauration des transactions

store.RestoreTransactions(callback) redistribue les achats non-consommables et les abonnements. Chaque achat restauré déclenche OnPurchasePending.

Requis sur iOS pour la conformité à l'App Store d'Apple — ajoutez un bouton "Restaurer les achats".

Les abonnements non renouvelables Apple ne peuvent pas être restaurés via RestoreTransactions. Suivez-les côté serveur.

Validation du reçu

PlateformeApproche
Google PlayCrossPlatformValidator avec GooglePlayTangle.Data() — validation locale prise en charge
Apple (StoreKit 2)La validation locale est une opération sans effet. Utilisez order.Info.Apple?.jwsRepresentation pour la validation côté serveur

Générez les données de tanglement via Services > In-App Purchasing > Receipt Validation Obfuscator dans l'éditeur Unity.

Vérification des droits

Utilisez-la lorsque vous n'avez pas l'Order et que vous souhaitez connaître le statut d'un produit spécifique (remplace product.hasReceipt de v4). Si vous avez déjà l'Order, vérifiez plutôt son type : PendingOrder correspond à EntitledUntilConsumed (consommables) ou EntitledButNotFinished (non-consommables/abonnements), ConfirmedOrder correspond à FullyEntitled.

Appelez store.CheckEntitlement(product) et gérez store.OnCheckEntitlement. Vérifiez entitlement.Status == EntitlementStatus.FullyEntitled.

Valeurs de EntitlementStatus : FullyEntitled, EntitledUntilConsumed, EntitledButNotFinished, NotEntitled, Unknown.

Récupération des achats existants

store.FetchPurchases() récupère tous les achats en cours depuis le magasin. Utile au démarrage de l'application.

MéthodeComportement
GetPurchases()Renvoie la liste des achats mise en cache
FetchPurchases()Interroge le magasin pour les achats en cours et remplace la liste mise en cache

FetchPurchases() remplace toute la liste mise en cache à chaque appel. Seuls les non-consommables et les abonnements sont retournés.

Individual skills in this repo

This repo contains 9 individual skills — each has its own dedicated page.

unity-technologies/2d-pixel-perfect

Sets up, diagnoses, and fixes pixel perfect 2D rendering in Unity projects. Use when working on any retro-style or pixel art 2D game.

unity-technologies/audio-setup-mixers

Scans the scene and audio assets to appropriately route Audio Sources into existing Audio Mixer Groups, classifying each source by what it plays. Use when the user asks about cleaning up mixer assignments, routing audio through a mixer, or which group a sound belongs in. Creating mixers and groups, and setting volumes, are not automated — the skill inventories what exists and asks the user to add anything missing.

unity-technologies/build-live-game

Build and operate a live game using Unity Services. Use when the user needs to implement, connect, or debug backend-driven features — battle passes, achievements, player progression, cloud saves, leaderboards, matchmaking, virtual economies, server-authoritative logic, anti-cheat, player accounts and authentication, remote configuration, feature flags, A/B testing, analytics, or cloud resource deployment. Triggers on live-ops, live service, backend, server authority, cloud code, cloud save, remote config, player data, retention, monetization loop, season pass, ranking, multiplayer sessions, lobbies, or any Unity Services integration.

unity-technologies/generate-editor-search-query

Generates Unity Search / Quick Search queries and opens the Unity Search window for read-only Unity Editor asset or scene-object lookup requests. Always use when the user asks to find, search, show, locate, filter, look up, query, or list concrete assets or scene objects in the current project or scene, even if Unity Search is not named. Covers materials, textures, prefabs, scenes, scripts, shaders, GameObjects, components, Lights, Cameras, UI objects, labels, paths, references, selected or named assets, and asset types. Also use when the user explicitly mentions Unity Search, Quick Search, Search window, open Search, or asks what Unity Search query to use. Do not use for general project overview, project structure, folder-purpose summaries, gameplay/system explanations, how-to programming questions, web search, repository text search, build logs, package installation, menu or settings search, modifying results, or non-Unity filesystem search unless the user explicitly asks to use Unity Search.

unity-technologies/initialize-ai-navigation

Sets up and configures the Unity AI Navigation system — NavMesh surfaces, NavMesh agents, obstacles, links, modifiers, areas and costs. Use when creating walkable navigation meshes, adding pathfinding agents, setting up patrol routes, configuring obstacle avoidance and carving, connecting separate NavMeshes with links, coupling navigation with animation, or troubleshooting navigation issues.

unity-technologies/levelplay-unity-integration

Integrates the LevelPlay Mediation SDK via the Ads Mediation UPM package. Use when a developer asks about adding ads to a Unity game, implementing rewarded, interstitial, or banner ads, setting up ad mediation, configuring ad networks, installing or updating the Ads Mediation package, troubleshooting LevelPlay namespace errors, resolving Android gradle or iOS CocoaPods dependency issues for ads, configuring ATT or privacy settings for ad compliance, tracking impression-level revenue (ILRD), initializing the LevelPlay SDK, or setting up ad unit IDs. Also use when a developer wants to monetize their Unity game with ads, asks how to get started with LevelPlay, ads, or mediation, or needs help with any part of the LevelPlay integration workflow including platform-specific setup for iOS or Android. Also use when upgrading the LevelPlay or IronSource SDK version, migrating from deprecated IronSource.Agent APIs, or migrating a game from Unity Ads to LevelPlay.

unity-technologies/localization

Sets up and configures Unity Localization, including locales, String/Asset Tables, CJK font support, and Addressables workflows. Use when the user wants to add languages to a project, translate UI text, support Asian (CJK) languages with TMP fonts, or mentions i18n, l10n, multilingual support, or making a game support multiple languages.

unity-technologies/manage-sprite-atlas

Manage SpriteAtlas using prebuild pipeline with IPreprocessBuildWithReport (DEFAULT approach). Use it to configure master atlases, variant atlases, texture settings, packing settings, and platform-specific configurations. Use when the user asks about creating sprite atlases, optimizing sprites, configuring atlas settings, adding sprites to atlases, creating variant atlases, implementing automated atlas generation, or runtime sprite atlas access. Always use prebuild approach unless user explicitly requests manual authoring.

unity-technologies/migrate-birp-to-urp

Plans, executes, and troubleshoots Unity projects moving from the Built-in Render Pipeline (BiRP/BIRP/Built-in RP) to the Universal Render Pipeline (URP). Use when the user asks to upgrade, convert, switch, or migrate a project, scene, material, or shader to URP/Universal Render Pipeline; fix pink or magenta materials after URP; convert Built-in materials/shaders; move a 2D project to URP 2D; review lighting, quality, post-processing, baked lightmaps, or reflection probes after URP; or diagnose visual problems after a render-pipeline migration.

Skills associés