Unity Iap 5: Ce qui a changé par rapport à IAP 4 et comment migrer
Daniel Godley - Unity
Senior Content Marketing Manager
Unity In-App Purchasing (IAP) version 5 remplace l'architecture basée sur l'interface d'IAP 4 par une seule classe StoreController basée sur les événements. La migration nécessite des modifications de code : les interfaces IStoreListener et IDetailedStoreListener ainsi que le ConfigurationBuilder sont supprimés, l'initialisation est asynchrone et les achats sont traités par le biais d'événements du cycle de vie. IAP 5 permet également la Monetization Web-to-Mobile, les processeurs de paiement personnalisés (tels que Stripe et Coda) et les boutiques en ligne autonomes.
Ce que vous devez savoir sur Unity Iap 5
- Unity Iap 5 supprime les interfaces IStoreListener et IDetailedStoreListener requises dans IAP 4.
- Toute la logique d'achat dans Unity Iap 5 passe par une classe: UnityIAPServices.StoreController(), qui déclenche des événements tout au long du cycle de vie d'achat.
- Le ConfigurationBuilder d'IAP 4 est supprimé. Les définitions de produit sont directement transmises à FetchProducts() en tant qu'objets ProductDefinition avec un ID et un type de produit.
- La classe legacy IDs est renommée StoreSpecificIds dans IAP 5.
- L'initialisation Unity Iap 5 est asynchrone et nécessite Unity Gaming Services pour être initialisé en premier via wait UnityServices.InitializeAsync().
- Les reçus Apple en IAP 5 sont validés automatiquement via StoreKit 2 avant de parvenir au développeur. La validation google play nécessite la clé de licence Google du développeur, obfusquée par l'outil inclus dans le pack IAP.
- La prise en charge de StoreKit 1 revient en IAP 5 pour les appareils qui ne peuvent pas passer à iOS 15.0 (appareils antérieurs à l'iPhone 6s).
- Une implémentation de référence de travail est livrée dans le paquet: le Minimal Coded IAP Sample (script PaywallManager), disponible dans le gestionnaire de paquets Unity.

Unity Iap 5 apporte des améliorations architecturales majeures, des changements structurels à l'initialisation et des flux de travail de récupération de produits plus propres. De plus, il ouvre la voie à des fonctionnalités avancées de l'écosystème à l'horizon - y compris les fournisseurs de paiement direct (comme Stripe et Coda) et les boutiques en ligne qui vous permettent de mieux cibler vos ventes et de conserver une plus grande part de vos revenus d'achat. Que vous migriez d'Unity Iap 4 vers IAP 5 ou que vous configuriez pour la première fois des achats intégrés mobiles dans le moteur de jeu Unity, cette ventilation étape par étape couvre l'ensemble du flux de travail d'implémentation.
Architecture
Unity Iap 4
Interfaces IStoreListener / IDetailedStoreListener avec rappels fixes
Unity Iap 5
Classe StoreController unique avec événements de cycle de vie
Stocker des identifiants
Unity Iap 4
new IDs()
Unity Iap 5
new StoreSpecificIds()
Configuration du produit
Unity Iap 4
Produits emballés dans un ConfigurationBuilder avant initialisation
Unity Iap 5
Objets ProductDefinition passés directement à FetchProducts() à tout moment
Lancer un achat
Unity Iap 4
Appelé avec une chaîne d'identification de produit
Unity Iap 5
PurchaseProduct(product) appelé avec l'objet produit complet
Traitement des achats
Unity Iap 4
ProcessAchat rappel via IStoreController
Unity Iap 5
Événement OnPurchasePending(Order), confirmé avec ConfirmPurchase(pendingOrder)
Validation de réception (Apple)
Unity Iap 4
Validation manuelle multiplateforme
Unity Iap 5
Pré-validé par StoreKit 2
Gestionnaires d'achat d'interface utilisateur
Unity Iap 4
Product-ID based
Unity Iap 5
Inchangé — les gestionnaires d'interface utilisateur existants continuent de travailler
Unity Iap 4
Unity Iap 5
Architecture
Interfaces IStoreListener / IDetailedStoreListener avec rappels fixes
Classe StoreController unique avec événements de cycle de vie
Stocker des identifiants
new IDs()
new StoreSpecificIds()
Configuration du produit
Produits emballés dans un ConfigurationBuilder avant initialisation
Objets ProductDefinition passés directement à FetchProducts() à tout moment
Lancer un achat
Appelé avec une chaîne d'identification de produit
PurchaseProduct(product) appelé avec l'objet produit complet
Traitement des achats
ProcessAchat rappel via IStoreController
Événement OnPurchasePending(Order), confirmé avec ConfirmPurchase(pendingOrder)
Validation de réception (Apple)
Validation manuelle multiplateforme
Pré-validé par StoreKit 2
Gestionnaires d'achat d'interface utilisateur
Product-ID based
Inchangé — les gestionnaires d'interface utilisateur existants continuent de travailler
Comment migrer d'Unity Iap 4 vers IAP 5
La migration se déroule en quatre étapes:
Initialisez et connectez-vous. Initialisez Unity Gaming Services, obtenez un StoreController, abonnez-vous à ses événements et appelez Connect() pour joindre google play ou l’Apple App Store. Utilisez OnStoreConnected et OnStoreDisconnected pour basculer l'interface utilisateur d'achat.
Allez chercher des produits. Créez une Liste à partir du catalogue de produits IAP de l'éditeur ou dans du code (par exemple, new ProductDefinition("gem_chest_01", ProductType.Consumable)) et passez-la à FetchProducts(). Le magasin renvoie les prix et descriptions localisés.
Récupérez les achats en attente. Appelez FetchPurchases() pour récupérer les transactions interrompues ou reportées. Les commandes en attente arrivent par l'événement OnPurchasePending, mais les développeurs devraient également traiter les commandes.PendingOrders, car les événements en attente peuvent être manqués sur certaines versions iOS. Les non-consommables confirmés et les abonnements peuvent être réintitulés à ce stade.
Achat, subvention, confirmation. Appelez PurchaseProduct(produit). Dans OnPurchasePurchase, accordez l'article, validez le reçu et appelez ConfirmPurchase(pendingOrder). Gérer les échecs dans OnPurchaseFailed — une annulation d'utilisateur n'a besoin d'aucun message, d'autres erreurs doivent être mises en surface au lecteur.
Le flux d'achat Unity Iap 5
Utilisez l'infographie ci-dessous pour afficher l'intégralité du flux d'achat pour Unity IAP5, y compris les nouvelles fonctionnalités, boutiques en ligne, catalogues et fournisseurs de paiement.

Téléchargez le PDF haute résolution ici.
Pièges courants lors de la mise à niveau vers IAP 5
- Subventions en double : la même commande peut faire surface à la fois via OnPurchasePending et un pass manuel de commande en attente. Suivez les transactions traitées dans un HashSet (rempli à partir de OnPurchasesConfirmed) et vérifiez-le avant d'accorder.
- Achats simultanés: désactivez les boutons d'achat pendant qu'une commande est en vol pour éviter les demandes en double.
- Fuites d'événements: IAP 5 est piloté par les événements — se désabonner de tous les événements StoreController lorsque le gestionnaire des achats est détruit.
- StoreKit 1 achats suspendus : sur les appareils pré-iOS 15, les achats non confirmés peuvent bloquer le rachat du même produit par un lecteur. Un backend qui suit et résout ces achats est recommandé.
Vérification côté serveur
Les identifiants de transaction des commandes IAP 5 peuvent être envoyés à Unity Cloud Code pour vérification côté serveur, les objets étant accordés aux joueurs via Unity Economy.