Communitygithub.com

unity-technologies/implementar-compras-dentro-de-la-aplicacion

Implementa, configura y depura las Compras Dentro de la Aplicación (IAP) de Unity: conexión con la tienda, catálogo de productos, compras consumibles/no consumibles/suscripciones, flujo de confirmación pendiente, validación de recibos, verificación de derechos, restauración de transacciones, extensiones de Apple y Google, y capacidades D2C con Stripe/Coda.

¿Qué es implementar-compras-dentro-de-la-aplicacion?

Este skill permite a un agente de IA (como Claude Code, Cursor, o Codex) implementar, configurar y depurar el sistema de Compras Dentro de la Aplicación (IAP) de Unity en su totalidad. Proporciona una guía detallada para todo el ciclo de vida: inicialización del `StoreController`, conexión a la tienda, obtención de productos, ejecución del flujo de compra en dos pasos (Pendiente → Confirmar), validación de recibos, verificación de derechos, restauración de transacciones y soporte para extensiones de plataforma (Apple y Google Play). También cubre la migración desde sistemas de facturación nativos (Google BillingClient, Apple StoreKit), servicios de terceros (RevenueCat, Adapty, Essential Kit, UniPay) y la implementación de capacidades D2C (Directo al Consumidor) con Stripe o Coda a través de Unity IAP 5.4+. El skill se basa en referencias modulares que el agente debe leer bajo demanda, pero siempre comenzando con el archivo `references/pre-check.md` para analizar el proyecto y determinar la ruta de implementación correcta.

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

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Compras Dentro de la Aplicación (IAP) de Unity

Espacio de nombres: UnityEngine.Purchasing | Seguridad: UnityEngine.Purchasing.Security Paquete: com.unity.purchasing

Unity IAP tiene su propia ruta de inicialización mediante UnityIAPServices.StoreController() → store.Connect(). No requiere UnityServices.InitializeAsync(), pero pueden coexistir si tu proyecto utiliza otros servicios de UGS. Si Analytics está presente y se llama a InitializeAsync(), IAP enviará automáticamente eventos de transacción.

Antes de Empezar

Lee siempre references/pre-check.md primero. Este archivo escanea el proyecto en busca de paquetes IAP de terceros, Google Billing nativo y versiones existentes de Unity IAP, y luego dirige a la ruta correcta. No leas ningún otro archivo de referencia ni hagas cambios hasta que la ruta esté resuelta.

Referencias Detalladas

Lee los archivos de referencia bajo demanda, solo cuando necesites firmas de API específicas, detalles de extensiones de plataforma o mapeos de migración.

Flujo de Inicialización

  1. Obtén StoreController mediante UnityIAPServices.StoreController() (o servicios individuales mediante DefaultStore(), DefaultProduct(), DefaultPurchase())
  2. Suscríbete a todos los eventos requeridos (ver Suscripciones de Eventos Requeridas a continuación) antes de llamar a Connect()
  3. await store.Connect() para conectar con la tienda de la plataforma
  4. En OnStoreConnected, llama a store.FetchProducts(List<ProductDefinition>) para cargar el catálogo
  5. En OnProductsFetched, los productos están listos para mostrarse y comprarse

Usa Awake() para la inicialización — asegura que IAP esté listo antes que otros métodos Start().

Tipos de producto: ProductType.Consumable, ProductType.NonConsumable, ProductType.Subscription.

Obtención de Productos

Define los productos como List<ProductDefinition> y pásalos a store.FetchProducts(). Usa StoreSpecificIds cuando los IDs de producto difieran entre las tiendas de Apple y Google. Para catálogos complejos, usa CatalogProvider para gestionar conjuntos de productos e IDs específicos de tienda.

MétodoComportamiento
GetProducts()Devuelve la lista de productos en caché (síncrono, desactualizado si no se llamó a FetchProducts)
FetchProducts()Consulta a la tienda para obtener precios/disponibilidad actualizados y actualiza la caché
GetProductById(id)Devuelve un único producto en caché por ID

NO son intercambiables. Siempre llama a FetchProducts() primero antes de confiar en GetProducts().

Flujo de Compra en Dos Pasos

IAP v5 usa un flujo obligatorio de dos pasos: Pendiente → Confirmar.

  1. store.PurchaseProduct(product) — inicia el diálogo de compra de la plataforma
  2. Se dispara OnPurchasePending — recibes un PendingOrder
  3. Valida el recibo y otorga el contenido al jugador
  4. store.ConfirmPurchase(pendingOrder) — finaliza la transacción
  5. Se dispara OnPurchaseConfirmed — recibe el tipo base Order; usa coincidencia de patrones ConfirmedOrder (éxito) vs FailedOrder (confirmación fallida)

DEBES llamar a ConfirmPurchase(pendingOrder) después de otorgar el contenido. Las compras no confirmadas se reenvían en el próximo inicio de la aplicación para evitar pérdidas de compras.

Desduplicación: OnPurchasePending puede dispararse múltiples veces para la misma compra (por ejemplo, reinicio de la aplicación antes de la confirmación). Siempre verifica si el contenido ya fue otorgado.

Consumibles: Las compras consumibles confirmadas NO son devueltas por FetchPurchases. Realiza tu propio seguimiento de las concesiones de consumibles (por ejemplo, en Cloud Save o Economy).

Compras diferidas: OnPurchaseDeferred se dispara para compras de Ask-to-Buy (iOS) y compras diferidas de Google Play. NO otorgues contenido — espera a OnPurchasePending cuando se apruebe.

Restauración de Transacciones

store.RestoreTransactions(callback) reenvía las compras no consumibles y de suscripción. Cada compra restaurada dispara OnPurchasePending.

Requerido en iOS para cumplir con la App Store de Apple — agrega un botón "Restaurar Compras".

Las suscripciones no renovables de Apple no se pueden restaurar mediante RestoreTransactions. Realiza su seguimiento en el servidor.

Validación de Recibos

PlataformaEnfoque
Google PlayCrossPlatformValidator con GooglePlayTangle.Data() — validación local compatible
Apple (StoreKit 2)La validación local es una operación nula. Usa order.Info.Apple?.jwsRepresentation para validación del lado del servidor

Genera datos de enredo mediante Services > In-App Purchasing > Receipt Validation Obfuscator en el Editor de Unity.

Verificación de Derechos

Úsalo cuando no tengas el Order y quieras conocer el estado de un producto específico (reemplaza product.hasReceipt de v4). Si ya tienes el Order, verifica su tipo: PendingOrder corresponde a EntitledUntilConsumed (consumibles) o EntitledButNotFinished (no consumibles/suscripciones), ConfirmedOrder corresponde a FullyEntitled.

Llama a store.CheckEntitlement(product) y maneja store.OnCheckEntitlement. Verifica que entitlement.Status == EntitlementStatus.FullyEntitled.

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

Obtener Compras Existentes

store.FetchPurchases() recupera todas las compras actuales de la tienda. Útil al iniciar la aplicación.

MétodoComportamiento
GetPurchases()Devuelve la lista de compras en caché
FetchPurchases()Consulta a la tienda las compras actuales y sobrescribe la lista en caché

FetchPurchases() reemplaza toda la lista en caché en cada llamada. Solo se devuelven no consumibles y suscripciones.

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 relacionados