Communitygithub.com

unity-technologies/in-app-purchases-implementieren

Integriere, konfiguriere und debugge Unity In-App-Käufe (IAP) — Store-Verbindung, Produktkatalog, Verbrauchs-/Dauer-/Abonnementkäufe, Bestätigungsablauf, Quittungsvalidierung, Berechtigungsprüfung, Transaktionswiederherstellung sowie Apple- und Google-Erweiterungen.

Was ist in-app-purchases-implementieren?

Dieses Skill ermöglicht die vollständige Implementierung, Konfiguration und Fehlerbehebung von Unity In-App-Käufen (IAP) in Unity-Projekten. Es unterstützt alle wichtigen IAP-Funktionen: Verbindung zum App-Store, Produktkatalogverwaltung mit verschiedenen Produkttypen (Verbrauchsgüter, Dauerkäufe, Abonnements), den zweistufigen Bestätigungsablauf (Pending → Confirm), Quittungsvalidierung mit CrossPlatformValidator sowie Berechtigungsprüfungen und Transaktionswiederherstellung. Der Skill behandelt auch plattformspezifische Erweiterungen für Apple (Promotional Purchases, Ask-to-Buy, Code Redemption) und Google Play (Abonnement-Upgrade/Downgrade). Zusätzlich wird die Integration von Direktkunden-Zahlungen (D2C) über Stripe/Coda sowie die Migration von nativen Android/iOS-Billing-Lösungen (Google BillingClient, Apple StoreKit) und Drittanbieter-Paketen (RevenueCat, Adapty, Essential Kit, UniPay) zu Unity IAP v5 unterstützt. Der Skill basiert auf der Unity IAP v5-API und erfordert das Paket „com.unity.purchasing". Er führt systematisch durch den Initialisierungsablauf, das Abrufen von Produkten, die Kaufabwicklung und die Berechtigungsprüfung, wobei er auf detaillierte Referenzdateien für API-Signaturen und Migrationspfade verweist.

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

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Unity In-App-Käufe (In-App Purchasing)

Namespace: UnityEngine.Purchasing | Sicherheit: UnityEngine.Purchasing.Security Paket: com.unity.purchasing

Unity IAP hat einen eigenen Initialisierungspfad über UnityIAPServices.StoreController() → store.Connect(). Es erfordert kein UnityServices.InitializeAsync(), beide können jedoch koexistieren, wenn dein Projekt andere UGS-Dienste verwendet. Wenn Analytics vorhanden ist und InitializeAsync() aufgerufen wird, sendet IAP automatisch Transaktionsereignisse.

Bevor du loslegst

Lies zuerst immer references/pre-check.md. Es durchsucht das Projekt nach IAP-Paketen von Drittanbietern, nativer Google-Abrechnung und vorhandenen Unity IAP-Versionen und leitet dann zum richtigen Pfad weiter. Lies keine andere Referenzdatei und nimm keine Änderungen vor, bis die Weiterleitung geklärt ist.

Detaillierte Referenzen

Lies Referenzdateien bei Bedarf — nur wenn du bestimmte API-Signaturen, Plattformerweiterungsdetails oder Migrationszuordnungen benötigst.

Initialisierungsablauf

  1. Rufe StoreController über UnityIAPServices.StoreController() ab (oder einzelne Dienste über DefaultStore(), DefaultProduct(), DefaultPurchase())
  2. Abonniere alle erforderlichen Ereignisse (siehe Erforderliche Ereignisabonnements unten) bevor du Connect() aufrufst
  3. await store.Connect() — um eine Verbindung zum Plattform-Store herzustellen
  4. Bei OnStoreConnected rufe store.FetchProducts(List<ProductDefinition>) auf, um den Katalog zu laden
  5. Bei OnProductsFetched sind die Produkte bereit zur Anzeige und zum Kauf

Verwende Awake() für die Initialisierung — stellt sicher, dass IAP bereit ist, bevor andere Start()-Methoden ausgeführt werden.

Produkttypen: ProductType.Consumable, ProductType.NonConsumable, ProductType.Subscription.

Produkte abrufen

Definiere Produkte als List<ProductDefinition> und übergib sie an store.FetchProducts(). Verwende StoreSpecificIds, wenn sich Produkt-IDs zwischen Apple/Google-Stores unterscheiden. Verwende für komplexe Kataloge CatalogProvider, um Produktsets und store-spezifische IDs zu verwalten.

MethodeVerhalten
GetProducts()Gibt die zwischengespeicherte Produktliste zurück (synchron, veraltet, wenn FetchProducts nicht aufgerufen wurde)
FetchProducts()Fragt den Store nach aktuellen Preisen/Verfügbarkeit und aktualisiert den Cache
GetProductById(id)Gibt ein einzelnes zwischengespeichertes Produkt anhand der ID zurück

Diese sind NICHT austauschbar. Rufe immer zuerst FetchProducts() auf, bevor du dich auf GetProducts() verlässt.

Zweistufiger Kaufablauf

IAP v5 verwendet einen obligatorischen zweistufigen Ablauf: Ausstehend → Bestätigen.

  1. store.PurchaseProduct(product) — startet den Kaufdialog der Plattform
  2. OnPurchasePending wird ausgelöst — du erhältst eine PendingOrder
  3. Validiere die Quittung, gewähre dem Spieler den Inhalt
  4. store.ConfirmPurchase(pendingOrder) — schließt die Transaktion ab
  5. OnPurchaseConfirmed wird ausgelöst — empfängt den Basistyp Order; Mustervergleich mit ConfirmedOrder (Erfolg) vs. FailedOrder (Bestätigung fehlgeschlagen)

Du MUSST ConfirmPurchase(pendingOrder) aufrufen, nachdem du den Inhalt gewährt hast. Nicht bestätigte Käufe werden beim nächsten App-Start erneut zugestellt, um verlorene Käufe zu vermeiden.

Deduplizierung: OnPurchasePending kann mehrmals für denselben Kauf ausgelöst werden (z. B. bei Neustart der App vor Bestätigung). Überprüfe immer, ob der Inhalt bereits gewährt wurde.

Verbrauchsgüter: Bestätigte Verbrauchsgüterkäufe werden NICHT von FetchPurchases zurückgegeben. Verwalte die Gewährung von Verbrauchsgütern selbst (z. B. in Cloud Save oder Economy).

Aufgeschobene Käufe: OnPurchaseDeferred wird für Ask-to-Buy (iOS) und aufgeschobene Google Play-Käufe ausgelöst. Gewähre KEINEN Inhalt — warte auf OnPurchasePending, wenn der Kauf genehmigt wurde.

Transaktionen wiederherstellen

store.RestoreTransactions(callback) stellt Dauerkäufe und Abonnements erneut zu. Jeder wiederhergestellte Kauf löst OnPurchasePending aus.

Erforderlich auf iOS für die Einhaltung des Apple App Store — füge einen „Käufe wiederherstellen"-Button hinzu.

Apple-Abonnements ohne Verlängerung (Non-Renewable Subscriptions) können NICHT über RestoreTransactions wiederhergestellt werden. Verfolge diese serverseitig.

Quittungsvalidierung

PlattformAnsatz
Google PlayCrossPlatformValidator mit GooglePlayTangle.Data() — lokale Validierung unterstützt
Apple (StoreKit 2)Lokale Validierung ist ein No-Op (keine Operation). Verwende order.Info.Apple?.jwsRepresentation für serverseitige Validierung

Generiere Tangle-Daten über Services > In-App Purchasing > Receipt Validation Obfuscator im Unity Editor.

Berechtigungsprüfung

Verwende dies, wenn du keine Order hast und den Status eines bestimmten Produkts erfahren möchtest (ersetzt product.hasReceipt aus v4). Wenn du bereits die Order hast, überprüfe stattdessen ihren Typ: PendingOrder entspricht EntitledUntilConsumed (Verbrauchsgüter) oder EntitledButNotFinished (Dauerkäufe/Abonnements), ConfirmedOrder entspricht FullyEntitled.

Rufe store.CheckEntitlement(product) auf und verarbeite store.OnCheckEntitlement. Überprüfe entitlement.Status == EntitlementStatus.FullyEntitled.

EntitlementStatus-Werte: FullyEntitled, EntitledUntilConsumed, EntitledButNotFinished, NotEntitled, Unknown.

Vorhandene Käufe abrufen

store.FetchPurchases() ruft alle aktuellen Käufe aus dem Store ab. Nützlich beim App-Start.

MethodeVerhalten
GetPurchases()Gibt die zwischengespeicherte Kaufliste zurück
FetchPurchases()Fragt den Store nach aktuellen Käufen ab und überschreibt die zwischengespeicherte Liste

FetchPurchases() ersetzt bei jedem Aufruf die gesamte zwischengespeicherte Liste. Nur Dauerkäufe und Abonnements werden zurückgegeben.

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.

Verwandte Skills