Utilisation du service de facturation Google Play In-app Billing

De RAD Studio
Aller à : navigation, rechercher

Remonter à Création d'une app Android


Les services de paiement in-app vous permettent de vendre du contenu numérique directement depuis vos applications. Google Play In-app Billing (EN) est le service de paiement in-app de Google pour Android. Cette rubrique explique comment autoriser vos applications à accéder à Google Play In-app Billing en utilisant FireMonkey.

Remarque : Les informations suivantes complètent la rubrique principale de la documentation relative au développement Android. Lire Développement d'applications mobiles Android avant de continuer.

Périphériques pris en charge

FireMonkey prend en charge Google Play In-app Billing sur les périphériques exécutant Android 2.2 ou ultérieur et la dernière version du magasin Google Play. Voir aussi Prérequis de plate-forme FireMonkey, Exigences Android.

Remarque : Les émulateurs Android ne sont pas pris en charge.

Prérequis

Pour pouvoir utiliser le service Google Play In-app Billing, vous devez au préalable :

Configuration de votre application pour In-app Billing dans Google Play

Google exige que vous chargiez une première version de l'application avant de pouvoir ajouter des produits in-app.

Avant de commencer l'ajout de la prise en charge de Google Play In-app Billing à votre application, chargez votre application dans son état actuel sur Google Play :

  1. Préparez votre application pour le déploiement.
  2. Créez un package .apk signé pour votre application.
  3. Chargez votre nouvelle application sur Google Play (EN).

Sur la page de votre application, dans Google Play Developer Console (EN), cliquez sur Services and APIs. La page Services and APIs affiche la clé de licence de votre application. Lorsque vous configurez votre instance de TInAppPurchase pour établir une connexion à Google Play, vous devez copier cette clé de licence dans la propriété ApplicationLicenseKey.

TInAppPurchase prend en charge les produits in-app gérés. Pour plus d'informations sur les produits gérés, voir In-app Billing Version 3, Product Types (EN).

Remarque : Les abonnements ne sont pas pris en charge pour le moment.

Ajout de la prise en charge de Google Play In-app Billing à vos apps mobiles

Vous devez ajouter une instance de ce composant à votre application, et établir une connexion au service de facturation Google Play In-app Billing lorsque votre application démarre ou à tout autre moment. Vous pouvez ensuite utiliser le service. Dès qu'une connexion au service de facturation Google Play In-app Billing est établie, vous pouvez :

Etablissement d'une connexion au service de facturation Google Play In-app Billing

Avant de pouvoir utiliser le service de facturation Google Play In-app Billing, vous devez configurer TInAppPurchase pour se connecter au service de facturation Google Play In-app Billing et établir une connexion.

Configuration des données de connexion pour le service de facturation Google Play In-app Billing

Pour établir une connexion au service Google Play In-app Billing sur Android, vous devez copier votre clé de licence dans la propriété ApplicationLicenseKey de TInAppPurchase. Vous obtenez une clé de licence après avoir configuré votre application pour In-app Billing dans Google Play, par exemple :

InAppPurchase1.ApplicationLicenseKey := 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgEAlGKUp9KCAQjzJdrjDaCC2Z2P0K751w1KAL3cBLhDqRSYDnug+nZKzeg2+R3KOIDVpJU7+PXz8jyf07m/30Y0J1CmOBf6NK/MIsXq3BmWb4/UIUW1aKzlHiiVtpcm26n3hOSmnnfkhasbfQo75puBBTbURvumOFfwUAJ2BM9FzAOPWzsAqT1brYI8iu+NHDT+gGQl7uOTgEN3jbBD/la5qAt' + 
'evOGbgP1DhfKtsi91+/oyy3+lphWNn2A+RE1KOx4lnHp0wZyOEvDP/CPZneT0YYgqG6MtawM+Mij/75XwhJEdeOSXYya7BN6hg49JX2WJxCRc7JqbgzN9vsRn6hSceQ5MuQIDAQAB';
Remarque : En raison d'une limitation du compilateur Delphi, les littéraux chaîne ne peuvent pas dépasser 255 caractères. Comme vu ci-dessus, la solution consiste à diviser la chaîne en plusieurs parties.

Connexion au service de facturation Google Play In-app Billing

Pour établir une connexion au service de facturation Google Play In-app Billing, appelez SetupInAppPurchase. Cette procédure est asynchrone, et dès qu'elle prend fin, elle déclenche l'événement OnSetupComplete. Si vous souhaitez associer un gestionnaire d'événement à OnSetupComplete, faites-le avant d'appeler SetupInAppPurchase :

InAppPurchase1.OnSetupComplete := InAppPurchase1SetupComplete;
InAppPurchase1.SetupInAppPurchase;

Généralement, vous associez OnSetupComplete à un gestionnaire d'événement pour demander la liste des produits dès que la connexion au service cible est établie. Sinon, vous pouvez appeler IsSetupComplete pour vérifier que vous pouvez utiliser le service à un moment particulier (True) ou non (False).

Utilisation du service de facturation Google Play In-app Billing

Dès que vous avez établi une connexion au service de facturation Google Play In-app Billing, vous pouvez effectuer l'une des opérations suivantes :

Obtention d'informations concernant une liste de produits

Votre application doit conserver une liste des identifiants des produits pouvant être achetés à partir d'elle. Conservez cette liste dans la propriété TInAppPurchase.ProductIDs. Vous pouvez appeler QueryProducts à tout moment pour demander des informations concernant les produits ayant ces identifiants, par exemple pour savoir si ces produits ont été achetés ou non.

Si une erreur se produit, TInAppPurchase.OnError est déclenché avec ProductsRequest en tant que FailureKind.

Si la requête s'exécute correctement, TInAppPurchase.OnProductsRequestResponse est déclenché à la place. Cet événement fournit deux listes de produits :

  • Products, une TList d'instances de TProduct qui fournit la liste des produits valides disponibles et achetés.
  • InvalidProductIDs, une TStrings qui fournit une liste comportant les identifiants des produits non valides.

Pour distinguer les produits achetés par votre utilisateur de ceux simplement disponibles pour l'achat, vous pouvez appeler IsProductPurchased en fournissant l'identifiant d'un produit :

if InAppPurchase1.IsProductPurchased(ProductID) then { Do something. }
Remarque : Si la liste des produits contient un produit consommable ayant été acheté, c'est le moment de consommer ce produit.

TProduct fournit de nombreuses propriétés que vous pouvez lire pour obtenir des informations concernant chaque produit.

Achat d'un produit

Avant d'autoriser un utilisateur à acheter des produits, appelez CanMakeInAppPurchases pour vérifier s'il est autorisé à effectuer des achats (True) ou non (False) :

if not InAppPurchase1.CanMakeInAppPurchases then { Disable or hide the in-app payments GUI elements of your application. }

Pour demander l'achat d'un produit dans la liste des produits disponibles à partir du service de facturation Google Play In-app Billing, appelez PurchaseProduct avec l'identifiant du produit :

InAppPurchase1.PurchaseProduct(ProductID);

Si une erreur se produit, TInAppPurchase.OnError est déclenché avec Purchase en tant que FailureKind.

Si l'achat se déroule correctement, TInAppPurchase.OnPurchaseCompleted est déclenché à la place. Cet événement fournit l'identifiant du produit acheté, et son paramètre NewTransaction est True si le produit vient d'être acheté ou False s'il a été restauré. Utilisez ce gestionnaire d'événement pour gérer les produits achetés ; par exemple, si le produit acheté est un produit consommable, consommez-le.

Consommation d'un produit

Remarque : TInAppPurchase ne fournit aucune méthode pour déterminer si le produit est consommable ou non. Votre application doit pouvoir faire la distinction elle-même. Par exemple, vous pouvez coder en dur une liste d'identifiants de produits consommables et non consommables dans votre application.

Les produits consommables sont des produits qui peuvent être achetés plusieurs fois. Lorsque votre utilisateur achète un produit consommable, vous devez appeler ConsumeProduct pour informer le service de facturation Google Play In-app Billing que ce produit a été consommé :

InAppPurchase1.ConsumeProduct(ProductID);
Remarque : Sinon, vous pouvez appeler ConsumeProducts avec une liste d'identifiants de produits.

Après avoir appelé l'une des méthodes pour consommer un produit, l'un des événements suivants est éventuellement déclenché :

  • TInAppPurchase.OnConsumeCompleted si le produit est consommé correctement. Gérez cet événement pour traiter cet achat dans votre application. Par exemple, si votre application intègre un compteur de cookies et que votre utilisateur achète un produit à "5 cookies", vous pouvez accroître de 5 le nombre de cookies dans votre application.
  • TInAppPurchase.OnConsumeFailed si une erreur générée empêche la consommation du produit. L'argument ErrorMessage de cet événement fournit une description détaillée de l'erreur.

Restauration de produits achetés à partir d'un périphérique différent sur le périphérique en cours

Les produits non consommables d'un utilisateur apparaissent toujours comme achetés quel que soit le périphérique de cet utilisateur. Il n'est pas nécessaire de faire quoi que ce soit pour restaurer ces achats.

Remarques :
  • Si votre utilisateur tente d'acheter à nouveau un produit déjà acheté précédemment, cet achat ne lui coûte rien.
  • La restauration des achats nécessite de saisir les identifiants d'accès à l'App Store de l'utilisateur. Il n'est pas conseillé de restaurer automatiquement les achats. Nous vous recommandons plutôt de laisser les utilisateurs démarrer manuellement une opération de restauration, par exemple avec un bouton "Restaurer".

Utilisation d'une chaîne developerPayload pour vérifier les achats

Lorsque vous utilisez le service Google Play In-app Billing, vous pouvez donner à la propriété TInAppPurchase.TransactionPayload une valeur, un certain type de code, associée de façon unique à l'utilisateur de votre application. Cette valeur est envoyée au service Google Play In-app Billing lorsque votre utilisateur achète un produit à partir de votre application.

Pendant l'achat, le service Google Play In-app Billing vous renvoie une chaîne developerPayload devant correspondre à la chaîne que vous avez précédemment définie dans la propriété TransactionPayload. Pour vérifier que les deux chaînes correspondent et donc s'assurer que l'achat a en effet été commandé par votre utilisateur, gérez l'événement OnVerifyPayload :

procedure TForm1.InAppPurchase1VerifyPayload(Sender: TObject; const Payload: string; var PayloadOk: Boolean);
begin
  if Payload.Compare(FPayload) <> 0 then
    PayloadOk := False;
end;

Si le gestionnaire de cet événement définit PayloadOk sur False, l'achat n'est pas validé.

Avertissement : Le même utilisateur peut utiliser votre application sur différents périphériques. La chaîne developerPayload doit être identique sur les différents périphériques d'un même utilisateur. Par exemple, il ne peut pas s'agir d'une chaîne aléatoire générée par votre application, sinon cette chaîne ne sera pas identique sur tous les périphériques.

Test de vos produits In-App Purchase

Vous pouvez tester vos produits In-App Purchase sans les frais associés à l'utilisation d'utilisateurs test. Voir Testing In-app Billing (EN).

Voir aussi