Android Shopping - Bibliothèque de facturation Google Play

image

Et comment se fait-il qu'il n'y ait toujours pas d'article sur Habré à ce sujet? Peu importe;

Il existe 2 façons d'ajouter des achats intégrés à votre application Android - ancienne et nouvelle. Jusqu'en 2017, tout le monde utilisait la bibliothèque d'anjlab, mais depuis juin 2017, la situation a changé, Google a publié sa propre bibliothèque pour les achats et les abonnements internes - Play Billing Library. Maintenant, ce dernier est considéré comme la norme.

Play Billing Library est très simple.

Connectez la dépendance.

implementation 'com.android.billingclient:billing:1.2' 

Ajoutez une autorisation dans le manifeste.

 <uses-permission android:name="com.android.vending.BILLING"/> 

Créez une instance BillingClient et démarrez la connexion.

 private BillingClient mBillingClient; ... mBillingClient = BillingClient.newBuilder(this).setListener(new PurchasesUpdatedListener() { @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) { //       } } }).build(); mBillingClient.startConnection(new BillingClientStateListener() { @Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) { //         } } @Override public void onBillingServiceDisconnected() { //    -    } }); 

Nous entrons dans la méthode onPurchasesUpdated () lorsque l'achat est effectué, dans la méthode onBillingSetupFinished () , vous pouvez demander des informations sur les biens et les achats.

Demander des informations sur le produit. Mettez querySkuDetails () dans onBillingSetupFinished () .

 private Map<String, SkuDetails> mSkuDetailsMap = new HashMap<>(); private String mSkuId = "sku_id_1"; ... @Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) { //         querySkuDetails(); //   } } ... private void querySkuDetails() { SkuDetailsParams.Builder skuDetailsParamsBuilder = SkuDetailsParams.newBuilder(); List<String> skuList = new ArrayList<>(); skuList.add(mSkuId); skuDetailsParamsBuilder.setSkusList(skuList).setType(BillingClient.SkuType.INAPP); mBillingClient.querySkuDetailsAsync(skuDetailsParamsBuilder.build(), new SkuDetailsResponseListener() { @Override public void onSkuDetailsResponse(int responseCode, List<SkuDetails> skuDetailsList) { if (responseCode == 0) { for (SkuDetails skuDetails : skuDetailsList) { mSkuDetailsMap.put(skuDetails.getSku(), skuDetails); } } } }); } 

Dans le code, vous remarquerez peut-être le concept de SKU, quel est-il? SKU - de l'anglais Stock Keeping Unit (identifiant d'article de marchandise).

Maintenant, dans mSkuDetailsMap, nous avons toutes les informations sur les produits (nom, description, prix) enregistrés dans la Play Console de cette application (plus à ce sujet plus tard). Faites attention à cette ligne skuList.add (mSkuId); , ici nous avons ajouté l'identifiant du produit à partir de la console Play, listez ici tous les produits avec lesquels vous souhaitez interagir. Nous avons un produit —sku_id_1.

Tout est prêt pour répondre à la demande d'achat. Nous transmettons l'ID du produit. Exécutez cette méthode, par exemple, en cliquant sur le bouton.

 public void launchBilling(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); mBillingClient.launchBillingFlow(this, billingFlowParams); } 

Maintenant, en exécutant cette méthode, vous verrez cette boîte de dialogue (environ. Images provenant d'Internet).

image

Maintenant, si l'utilisateur achète la marchandise, il doit le lui fournir. Ajoutez la méthode payComplete () et effectuez-y des actions qui donnent accès au produit acheté. Par exemple, si un utilisateur a acheté une annonce déconnectée, effectuez cette méthode pour que la publicité n'apparaisse plus.

 ... @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) { //       payComplete(); } } ... 

Tout va bien, mais si l'utilisateur redémarre l'application, notre programme ne sait rien des achats. Il est nécessaire de demander des informations à leur sujet. Faites-le dans onBillingSetupFinished () .

 @Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) { //         querySkuDetails(); //   List<Purchase> purchasesList = queryPurchases(); //   //   ,    for (int i = 0; i < purchasesList.size(); i++) { String purchaseId = purchasesList.get(i).getSku(); if(TextUtils.equals(mSkuId, purchaseId)) { payComplete(); } } } } ... private List<Purchase> queryPurchases() { Purchase.PurchasesResult purchasesResult = mBillingClient.queryPurchases(BillingClient.SkuType.INAPP); return purchasesResult.getPurchasesList(); } 

Dans AchatsList obtient une liste de tous les achats effectués par l'utilisateur.

Nous vérifions: si les marchandises sont achetées, exécutez payComplete () .

C'est fait. Reste à publier cette application dans la Play Console et à ajouter des produits. Comment ajouter un produit: Description de la page d'application > Contenu à vendre > Créer un contenu limité .

Remarque 1 : vous ne pourrez pas ajouter de produits tant que vous n'aurez pas téléchargé la version de l'application sur la console Play.

Remarque 2 : pour voir la boîte de dialogue d'achat, vous devez télécharger la version sur la console Play, ajouter le produit et attendre un certain temps (~ 30 minutes - 1 heure - 3 heures) jusqu'à ce que le produit soit mis à jour, seulement après qu'une boîte de dialogue s'affiche et que vous pouvez fera un achat.

Remarque 3 : Veuillez corriger l' erreur des paramètres d'entrée. Le SKU ne peut pas être nul - le produit dans la console Play n'a pas encore été mis à jour, veuillez patienter.

Remarque 4 : Vous pouvez rencontrer l' erreur Erreur «Votre transaction ne peut pas être effectuée» , dans les journaux en tant que code de réponse 6, pendant que vous testerez. Pour quelles raisons cela m'arrive n'est pas exactement connu, mais selon mes observations, cela se produit après de fréquentes manipulations avec l'achat et le retour de marchandises. Pour résoudre ce problème, accédez au menu de la carte bancaire et transférez votre carte. Comment éviter cela? Ajoutez votre compte à la Play Console en tant que testeur et achetez uniquement à partir d'une carte de test.

Démo sur github

Achetez-moi du café

(Par ailleurs, le système de donets fonctionne sur Habr par le bouton sous l'article - environ Modérateur).

Source: https://habr.com/ru/post/fr444072/


All Articles