Utiliser la bibliothèque Google Play Billing avec Unity

Le plug-in Google Play Billing étend les services et ressources intégrés d'Unity pour les achats via une application, appelés Unity IAP, afin de fournir à votre jeu les dernières fonctionnalités de la bibliothèque Google Play Billing. Ce guide explique comment configurer votre projet afin d'utiliser ce plug-in. Il décrit également comment implémenter les fonctionnalités de la bibliothèque Google Play Billing dans votre jeu dans Unity.

Configurer le plug-in Google Play Billing

Pour configurer le plug-in, procédez comme suit :

  1. Activez la couche d'abstraction Unity IAP.
  2. Téléchargez et importez le plug-in.
  3. Configurez les paramètres de compilation du plug-in.
  4. Activez le plug-in.

Activer la couche d'abstraction Unity IAP

Le plug-in Google Play Billing repose sur une couche d'abstraction incluse dans Unity IAP. Vous devez donc activer cette couche d'abstraction avant de télécharger et d'importer le plug-in. Pour activer la couche d'abstraction Unity IAP, procédez comme suit :

  1. Suivez toutes les étapes du tutoriel Unity suivant : Configurer votre projet pour les services Unity.
  2. Suivez toutes les étapes du tutoriel Unity suivant : Activer le service Unity IAP.

Télécharger et importer le plug-in

Le plug-in est envoyé en tant que package Unity au format .unitypackage. Pour télécharger et importer le plug-in, procédez comme suit :

  1. Téléchargez la dernière version des plug-ins Google Play pour Unity sur la page de versions du dépôt sur GitHub.
  2. Dans la barre de menu Unity, cliquez sur Éléments > Importer un package > Package personnalisé.

  3. Recherchez l'emplacement où vous avez téléchargé le fichier .unitypackage, puis sélectionnez-le.

  4. Dans la boîte de dialogue Import Unity Package (Importer un package Unity), laissez tous les éléments sélectionnés, puis cliquez sur Import (Importer).

Une fois le package importé, un nouveau dossier nommé GooglePlayPlugins (à la racine du dossier "Assets") est ajouté aux éléments de votre projet. Ce dossier contient tous les éléments de la bibliothèque Google Play Billing pour le plug-in.

Configurer les paramètres de compilation

Étant donné que le plug-in étend Unity IAP, Unity devra faire face à des conflits et ne parviendra pas à créer un APK Android si certaines dépendances plus anciennes qui se chevauchent dans Unity IAP ne sont pas supprimées du build. Le plug-in permet de supprimer automatiquement de votre projet les bibliothèques en conflit. Pour résoudre ces conflits, procédez comme suit :

  1. Dans la barre de menu Unity, sélectionnez Google > Play Billing > Paramètres de compilation.

  2. Dans la fenêtre "Paramètres de compilation Play Billing", cliquez sur Fix (Corriger). Cette action résout le conflit et transfère les fichiers Unity IAP en conflit vers un répertoire de sauvegarde. Une fois que vous avez cliqué sur Corriger, le bouton est remplacé par Restaurer, sur lequel vous pouvez cliquer pour restaurer les fichiers d'origine qui entraient en conflit.

Activer le plug-in

Pour activer le plug-in, remplacez l'implémentation Unity IAP de Google Play par le plug-in Google Play Billing. Par exemple, avec le script d'achat Unity IAP, vous devez modifier le StandardPurchaseModule transmis au compilateur IAP afin d'utiliser Google.Play.Billing.GooglePlayStoreModule :

// Create a builder using the GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());

Si votre jeu utilise le même script d'achat pour plusieurs plates-formes, vous devez ajouter une vérification de plate-forme pour vous assurer qu'Unity continuera à utiliser sa propre solution IAP pour d'autres plates-formes :

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

Si vous publiez votre jeu sur d'autres plates-formes de téléchargement d'applications Android que le Google Play Store, vous ne devez remplacer l'implémentation Unity IAP par défaut que lorsque vous sélectionnez le Google Play Store :

ConfigurationBuilder builder;
if (Application.platform == RuntimePlatform.Android
       && SelectedAndoidAppStore == AppStore.GooglePlay)
{
  builder = ConfigurationBuilder.Instance(
      Google.Play.Billing.GooglePlayStoreModule.Instance());
}
else
{
  builder = ConfigurationBuilder.Instance(StandardPurchasingModule.Instance());
}

Implémenter les fonctionnalités de la bibliothèque Google Play Billing dans votre jeu

Le plug-in Google Play Billing étend les services Unity IAP. Vous pouvez donc utiliser les mêmes API Unity pour gérer les workflows d'achat courants. Notez que des modifications mineures du comportement de l'API sont dues à des différences entre la bibliothèque Google Play Billing et l'implémentation standard Unity IAP pour les autres plates-formes de téléchargement d'applications. Si vous faites vos premiers pas avec les API Unity IAP, consultez la section "Effectuer un script d'achat" du tutoriel Unity IAP pour découvrir comment implémenter des parcours d'achats de base.

La bibliothèque Google Play Billing inclut également certaines fonctionnalités propres au Google Play Store. Vous pouvez accéder à ces fonctionnalités via une interface étendue. Le reste de cette section explique comment mettre en œuvre ces fonctionnalités uniques de la bibliothèque Google Play Billing dans votre jeu.

Activer les achats différés

Google Play accepte les achats différés, également appelés transactions en attente ou achats en attente, lorsque les utilisateurs peuvent créer un achat et le finaliser ultérieurement en payant directement en magasin.

Pour activer les achats différés, utilisez votre compilateur IAP afin de modifier la configuration de votre module en appelant la méthode EnableDeferredPurchase() :

// Create a builder using a GooglePlayStoreModule.
var configurationBuilder =
    ConfigurationBuilder.Instance(Google.Play.Billing.GooglePlayStoreModule.Instance());
// Enable deferred purchases
configurationBuilder.Configure<Google.Play.Billing.IGooglePlayConfiguration>()
    .EnableDeferredPurchase();

Implémentez ensuite un rappel d'achat différé à l'aide des extensions Play Store :

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Set the deferred purchases callback.
_playStoreExtensions.SetDeferredPurchaseListener(
    delegate(Product product)
    {
        // Do not grant the item here. Instead, record the purchase and remind
        // the user to complete the transaction in the Play Store.
    });

Transmettre des ID de compte obscurcis à Google Play

Vous pouvez transmettre des ID de compte utilisateur obscurcis à Google Play afin de faciliter la détection des abus, par exemple pour identifier si de nombreux appareils effectuent des achats sur le même compte sur une courte période.

Pour transmettre un ID de compte obscurci, appelez la méthode SetObfuscatedAccountId() à partir de l'API des extensions :

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated account ID.
_playStoreExtensions.SetObfuscatedAccountId(obfuscatedAccountId);

Transmettre des ID de profil obscurcis à Google Play

Vous pouvez transmettre un ID de profil obscurci à Google Play pour faciliter la détection des fraudes, par exemple pour identifier si de nombreux appareils effectuent des achats sur le même compte sur une courte période. Cette situation s'apparente à la transmission d'un ID de compte utilisateur obscurci. Dans les deux cas, l'ID représente un seul utilisateur, mais l'ID de profil vous permet d'identifier de manière unique un utilisateur spécifique dans plusieurs profils au sein d'une même application. Après avoir envoyé un ID de profil obscurci à Google Play, vous pouvez le récupérer plus tard dans un reçu d'achat.

Pour transmettre un ID de profil obscurci, utilisez votre compilateur IAP afin de modifier la configuration de votre module en appelant la méthode SetObfuscatedProfileId() :

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

// Pass an obfuscated profile ID.
_playStoreExtensions.SetObfuscatedProfileId(obfuscatedProfileId);

Confirmer les changements de prix des abonnements

Google Play vous permet de modifier le prix d'un abonnement actif. Pour que ce changement prenne effet, les utilisateurs de votre jeu doivent l'accepter. Pour inviter les utilisateurs à confirmer la modification du prix de leur abonnement, appelez la méthode ConfirmSubscriptionPriceChange() :

// Get the plugin extensions for the Google Play Store.
_playStoreExtensions =
    extensions.GetExtension<Google.Play.Billing.IGooglePlayStoreExtensions>();

_playStoreExtensions.ConfirmSubscriptionPriceChange(productId,
    delegate (bool success)
    {
        // Returns whether the user has accepted the new price or not.
    });

Modifications du comportement de l'API Unity

Lorsque vous utilisez le plug-in Google Play Billing, la plupart des API se comportent de la même manière que l'implémentation Unity IAP standard pour les autres plates-formes de téléchargement d'applications. Toutefois, il peut arriver qu'elles se comportent différemment. Cette section décrit ces différences de comportement.

Charge utile du développeur non acceptée

Google Play a abandonné la charge utile du développeur et la remplace par d'autres solutions plus pertinentes et contextuelles. Par conséquent, la charge utile du développeur n'est plus prise en charge. Pour en savoir plus sur les autres options possibles, consultez cette section.

Vous pouvez continuer à utiliser les mêmes interfaces que celles définies par l'implémentation Unity IAP standard pour les autres plates-formes de téléchargement d'applications, y compris IStoreController. Lorsque vous effectuez un achat, vous pouvez toujours utiliser IStoreController et appeler la méthode InitiatePurchase() :

public void InitiatePurchase(Purchasing.Product product, string payload);

Toutefois, les charges utiles transmises ne seront pas prises en compte (elles n'apparaîtront pas dans le reçu final).

SubscriptionManager n'est pas compatible

Unity IAP fournit la classe SubscriptionManager pour gérer les abonnements. Étant donné que l'implémentation Unity IAP standard pour cette classe utilise la charge utile du développeur, cette classe n'est pas compatible. Vous pouvez toujours la créer, mais vous risquez de recevoir des données non fiables lorsque vous utilisez l'une de ses méthodes getter.

UpdateSubscription comporte de légères modifications de l'API

Le plug-in Google Play Billing ne permet pas d'utiliser les méthodes SubscriptionManager.UpdateSubscription() et SubscriptionManager.UpdateSubscriptionInGooglePlayStore() pour faire passer à un abonnement de niveau supérieur ou inférieur. Si votre jeu appelle ces méthodes, une erreur GooglePlayStoreUnsupportedException est renvoyée.

La bibliothèque Google Play Billing fournit une autre API que vous pouvez utiliser à la place de ces méthodes. Pour passer à un niveau d'abonnement supérieur ou inférieur, appelez la méthode UpdateSubscription() à l'aide du mode de calcul au prorata :

void UpdateSubscription(Product oldProduct, Product newProduct,
           GooglePlayStoreProrationMode prorationMode = GooglePlayStoreProrationMode.Unknown);

Vous pouvez encapsuler cet appel de méthode avec une vérification de la plate-forme ou dans un bloc "catch" lorsque GooglePlayStoreUnsupportedException est détecté.

Pour obtenir plus d'informations et accéder à des exemples d'utilisation du mode de calcul au prorata, consultez la section Définir le mode de calcul au prorata.