Communitygithub.com

unity-technologies/implementar-compras-no-aplicativo

Implemente, configure e depure compras no aplicativo (IAP) da Unity — conexão com a loja, catálogo de produtos, compras consumíveis/não consumíveis/assinaturas, fluxo de confirmação em duas etapas, validação de recibos, verificação de direitos, restauração de transações, extensões Apple (compras promocionais, Ask-to-Buy, resgate de código) e extensões Google Play (upgrade/downgrade de assinaturas), capacidades D2C (direto ao cliente), provedores de pagamento terceiros (Stripe/Coda) via Unity IAP/Unity Cloud.

O que é implementar-compras-no-aplicativo?

Esta skill automatiza a implementação, configuração e migração do sistema Unity In-App Purchasing (IAP) versão 5+, incluindo manuseio de catálogos, compras consumíveis, não consumíveis e assinaturas, validação de recibos locais e no servidor e verificação de direitos. Ela suporta tanto o fluxo inicial de integração em projetos novos como a conversão de soluções legadas nativas do Android (Google BillingClient) e iOS (StoreKit), bem como de pacotes terceiros como RevenueCat, Adapty, Essential Kit, UniPay e o antigo Unity IAP v4. A skill também gerencia capacidades D2C com provedores de pagamento como Stripe e Coda, integradas via Unity Cloud. Seus arquivos de referência detalhados fornecem a rota exata para cada cenário, garantindo que toda a configuração siga as práticas recomendadas da Unity, evitando perda de receita por confirmações pendentes não finalizadas e mantendo a conformidade com as lojas Apple e Google Play.

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

Perguntar na sua IA favorita

Abre um novo chat com esta habilidade de agente já pré-carregada.

Documentação

Compras no Aplicativo Unity (Unity In-App Purchasing)

Namespace: UnityEngine.Purchasing | Segurança: UnityEngine.Purchasing.Security Pacote: com.unity.purchasing

Unity IAP tem seu próprio caminho de inicialização via UnityIAPServices.StoreController() → store.Connect(). Ele não requer UnityServices.InitializeAsync(), mas ambos podem coexistir se seu projeto usar outros serviços UGS. Se o Analytics estiver presente e InitializeAsync() for chamado, o IAP enviará automaticamente eventos de transação.

Antes de Começar

Sempre leia references/pre-check.md primeiro. Ele escaneia o projeto em busca de pacotes IAP de terceiros, Google Billing nativo e versões existentes do Unity IAP, e então roteia para o caminho correto. Não leia nenhum outro arquivo de referência nem faça qualquer alteração até que o roteamento seja resolvido.

Referências Detalhadas

Leia os arquivos de referência sob demanda — apenas quando precisar de assinaturas de API específicas, detalhes de extensão de plataforma ou mapeamentos de migração.

Fluxo de Inicialização

  1. Obtenha StoreController via UnityIAPServices.StoreController() (ou serviços individuais via DefaultStore(), DefaultProduct(), DefaultPurchase())
  2. Inscreva-se em todos os eventos necessários (veja Inscrições de Eventos Obrigatórias abaixo) antes de chamar Connect()
  3. await store.Connect() para conectar-se à loja da plataforma
  4. Em OnStoreConnected, chame store.FetchProducts(List<ProductDefinition>) para carregar o catálogo
  5. Em OnProductsFetched, os produtos estão prontos para exibição e compra

Use Awake() para inicialização — garante que o IAP esteja pronto antes de outros métodos Start().

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

Buscando Produtos

Defina produtos como List<ProductDefinition> e passe para store.FetchProducts(). Use StoreSpecificIds quando os IDs dos produtos diferirem entre as lojas Apple e Google. Para catálogos complexos, use CatalogProvider para gerenciar conjuntos de produtos e IDs específicos da loja.

MétodoComportamento
GetProducts()Retorna a lista de produtos em cache (síncrono, desatualizado se FetchProducts não foi chamado)
FetchProducts()Consulta a loja por preços/disponibilidade atualizados e atualiza o cache
GetProductById(id)Retorna um único produto em cache pelo ID

Estes NÃO são intercambiáveis. Sempre chame FetchProducts() primeiro antes de confiar em GetProducts().

Fluxo de Compra em Duas Etapas

O IAP v5 usa um fluxo obrigatório de duas etapas: Pendente → Confirmar.

  1. store.PurchaseProduct(product) — inicia o diálogo de compra da plataforma
  2. OnPurchasePending é disparado — você recebe um PendingOrder
  3. Valide o recibo, conceda o conteúdo ao jogador
  4. store.ConfirmPurchase(pendingOrder) — finaliza a transação
  5. OnPurchaseConfirmed é disparado — recebe o tipo base Order; use pattern-match para ConfirmedOrder (sucesso) vs FailedOrder (falha na confirmação)

Você DEVE chamar ConfirmPurchase(pendingOrder) após conceder o conteúdo. Compras não confirmadas são reentregues na próxima inicialização do aplicativo para evitar perda de compras.

Desduplicação: OnPurchasePending pode ser disparado várias vezes para a mesma compra (ex.: reinicialização do aplicativo antes da confirmação). Sempre verifique se o conteúdo já foi concedido.

Consumíveis: Compras consumíveis confirmadas NÃO são retornadas por FetchPurchases. Gerencie você mesmo as concessões de consumíveis (ex.: em Cloud Save ou Economy).

Compras adiadas: OnPurchaseDeferred é disparado para compras Ask-to-Buy (iOS) e compras adiadas do Google Play. NÃO conceda conteúdo — aguarde OnPurchasePending quando aprovado.

Restaurar Transações

store.RestoreTransactions(callback) reentrega compras não consumíveis e assinaturas. Cada compra restaurada dispara OnPurchasePending.

Requerido no iOS para conformidade com a App Store da Apple — adicione um botão "Restaurar Compras".

Assinaturas não renováveis da Apple não podem ser restauradas via RestoreTransactions. Gerencie-as no lado do servidor.

Validação de Recibos

PlataformaAbordagem
Google PlayCrossPlatformValidator com GooglePlayTangle.Data() — validação local suportada
Apple (StoreKit 2)Validação local é uma não-operação. Use order.Info.Apple?.jwsRepresentation para validação no lado do servidor

Gere dados de tangle via Services > In-App Purchasing > Receipt Validation Obfuscator no Unity Editor.

Verificação de Direitos (Entitlement Checking)

Use quando você não tem o Order e deseja saber o status de um produto específico (substitui product.hasReceipt do v4). Se você já tem o Order, verifique seu tipo: PendingOrder mapeia para EntitledUntilConsumed (consumíveis) ou EntitledButNotFinished (não consumíveis/assinaturas), ConfirmedOrder mapeia para FullyEntitled.

Chame store.CheckEntitlement(product) e lide com store.OnCheckEntitlement. Verifique se entitlement.Status == EntitlementStatus.FullyEntitled.

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

Buscar Compras Existentes

store.FetchPurchases() recupera todas as compras atuais da loja. Útil na inicialização do aplicativo.

MétodoComportamento
GetPurchases()Retorna a lista de compras em cache
FetchPurchases()Consulta a loja por compras atuais e substitui a lista em cache

FetchPurchases() substitui toda a lista em cache a cada chamada. Apenas não consumíveis e assinaturas são retornados.

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.

Habilidades Relacionadas