Ionic 3: Intégrer InAppPurchase

Si vous souhaitez intégrer InAppPurchase à votre application Ionic, voici comment procéder !

J'ai passé plus de 12 jours à intégrer InAppPurchase dans mon application Ionic, et uniquement pour Android !
Je vous explique dans grandes lignes comment intégrer cet outil chez vous, et ainsi éviter les pièges.

Néanmoins, mon application n'étant pas encore disponible sous iOS, je ne peux que vous donner mon expérience pour Android via Google Play Billing.

La bonne version de InAppPurchase

Parmi les composants natifs de Ionic, il y a In App Purchase et In App Purchase 2.

J'ai commencé à intégrer le premier, on trouve des soucis de fonctionnement. En y regardant de plus près, le développeur préconise d'utiliser la deuxième version, dont le développement est actif.

Utilisez donc In App Purchase 2.

Tester le processus avant déploiement

Avant d'intégrer une fonctionnalité dans son application et de la déployer, il faut bien sûr tester celle ci. InAppPurchase s'appuyant sur une application tierce, ces tests sont donc plus compliqués.

Dans le guide Test Google Play Billing, il est possible de tester en statique le processus avec des produits dits "réservés" (android.test.purchased, android.test.canceled et android.test.item_unavailable)

Cependant, lorsque je tente de tester mon intégration avec ces produits, une erreur du type "Signature verification failed" apparaît systèmatiquement.

J'ai donc fait abstraction de cette étape, et suis passé directement aux tests fonctionnels avec de vrais produits.

Mise en place de Google Play Billing

En fonction de son application et de la finalité recherché, ce travail peut être complexe. Dans mon cas, mes produits sont gérés par un serveur qui autorise l'application à les consommer.

Je suis donc dans une situation où :

  1. mon application, via le composant In App Purchase 2, demande à Google Play Store d'acheter le produit P par demande d'un utilisateur.
  2. une transaction s'établit entre les dexu entités, et Google Play Store renvoie les informations à mon application.
  3. mon application consulte mon serveur pour débloquer le produit. Celui-ci traite la demande et renvoie l'autorisation.
  4. mon application traite cette autorisation et si OK, débloque l'accés au produit.

Ceci est la version courte, mais si on se réfère au Best Practice, il faut mettre en place des mécanismes, comme vérifier depuis mon serveur que la transaction est correctement effectuée en envoyant une requête aux serveurs de Google.

Je vous donne ci-dessous la procédure pour tout configurer, à effectuer dans l'ordre ou vous risquez d'avoir de mauvaises surprises. XC

1. Activer l'accès à Google API

Avec votre compte développeur, connectez-vous à la console Google Play.

Accédez à Paramètres > Compte développeur > Accés à l'API.

Activez Google Play Android Developer.

Dans Compte de service, cliquez sur "Créer un compte de service" avec au minimum les droits "Afficher les données financières".

De nouveau dans Accés à l'API, assurez-vous que le compte de service en posséde l'accés. Si ce n'est pas le cas, cliquez sur Accorder l'accès.

A vous d'implémenter la vérification de l'achat par le biais de ce compte de service sur votre serveur. Si celui-ci est en PHP, vous pouvez utiliser la librairie Google APIs client.

2. Créer un produit

Avec votre compte développeur ou administrateur, connectez-vous à la console Google Play.

Sélectionnez votre application.

Dans Présence sur le Play Store, accédez à Produits intégrés à l'application.

Ajoutez votre produit.

3. Erreurs possibles durant la vérification

Lorsque vous implémenter la vérification côté serveur, les erreurs suivantes peuvent se produire:

Erreur 401

{
    "error": {
        "errors": [
            {
                "domain": "androidpublisher",
                "reason": "permissionDenied",
                "message": "The current user has insufficient permissions to perform the requested operation."
            }
        ],
        "code": 401,
        "message": "The current user has insufficient permissions to perform the requested operation."
    }
}

Erreur 403

{
  "error": {
    "errors": [
      {
        "domain": "androidpublisher", 
        "reason": "projectNotLinked"
        "message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console.", 
      }
    ]
    "code": 403, 
    "message": "The project id used to call the Google Play Developer API has not been linked in the Google Play Developer Console.", 
  }
}

Si vous êtes sûr d'avoir tout correctement configuré, c'est sans doute un probléme Google liè à votre produit. Dans ce cas, recréez votre produit avec un nouveau Product Id.

Voilà, j'espère que cette article vous a été utile... ;)

Je vous dis à plus pour le prochain article. xD

Article précédent Article suivant


Ajouter un commentaire