Android Shopping - Abrechnungsbibliothek abspielen

Bild

Und wie kommt es, dass es darüber noch keinen Artikel über Habré gibt? Es spielt keine Rolle, es ist notwendig, es zu korrigieren.

Es gibt zwei Möglichkeiten, Ihrer Android-App In-App-Käufe hinzuzufügen - alte und neue. Bis 2017 nutzten alle die Bibliothek von anjlab, aber seit Juni 2017 hat sich die Situation geändert. Google hat eine eigene Bibliothek für interne Einkäufe und Abonnements veröffentlicht - Play Billing Library. Letzteres gilt nun als Standard.

Play Billing Library ist sehr einfach.

Verbinden Sie die Abhängigkeit.

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

Fügen Sie dem Manifest die Berechtigung hinzu.

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

Erstellen Sie eine BillingClient-Instanz und starten Sie die Verbindung.

 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() { //    -    } }); 

Beim Kauf gelangen wir zur Methode onPurchasesUpdated (). Bei der Methode onBillingSetupFinished () können Sie Informationen zu Waren und Einkäufen anfordern.

Produktinformationen anfordern. Fügen Sie querySkuDetails () in onBillingSetupFinished () ein .

 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); } } } }); } 

Im Code bemerken Sie möglicherweise das Konzept der SKU. Was ist das? Artikelnummer - von der englischen Lagerhaltungseinheit (Warenartikelkennung).

Jetzt haben wir in mSkuDetailsMap alle Informationen zu den Produkten (Name, Beschreibung, Preis) in der Play Console dieser Anwendung registriert (dazu später mehr). Achten Sie auf diese Zeile skuList.add (mSkuId); Hier haben wir die Produkt-ID aus der Play Console hinzugefügt. Hier werden alle Produkte aufgelistet, mit denen Sie interagieren möchten. Wir haben ein Produkt - sku_id_1.

Alles ist bereit, die Kaufanfrage zu erfüllen. Wir übergeben die Produkt-ID. Führen Sie diese Methode beispielsweise aus, indem Sie auf die Schaltfläche klicken.

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

Wenn Sie diese Methode ausführen, wird dieses Dialogfeld angezeigt (ca. Bilder aus dem Internet).

Bild

Wenn der Benutzer die Waren kauft, muss er diese bereitstellen. Fügen Sie die payComplete () -Methode hinzu und führen Sie darin Aktionen aus, die den Zugriff auf das gekaufte Produkt ermöglichen. Wenn ein Nutzer beispielsweise eine Anzeigenunterbrechung gekauft hat, führen Sie diese Methode so aus, dass die Anzeige nicht mehr angezeigt wird.

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

Alles ist in Ordnung, aber wenn der Benutzer die Anwendung neu startet, weiß unser Programm nichts über Einkäufe. Es ist notwendig, Informationen über sie anzufordern. Tun Sie es in 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(); } 

In KäufeListe erhält eine Liste aller vom Benutzer getätigten Käufe.

Wir prüfen: Wenn die Ware gekauft wird, führen Sie payComplete () aus .

Fertig. Diese Anwendung muss noch in der Play Console veröffentlicht und Produkte hinzugefügt werden. So fügen Sie ein Produkt hinzu: Beschreibung der Anwendungsseite > Zum Verkauf stehender Inhalt > Begrenzten Inhalt erstellen .

Hinweis 1 : Sie können keine Waren hinzufügen, bis Sie den Anwendungsbuild auf die Play Console hochgeladen haben.

Hinweis 2 : Um den Kaufdialog anzuzeigen, müssen Sie den Build in die Play Console hochladen, das Produkt hinzufügen und eine Weile (~ 30 Minuten - 1 Stunde - 3 Stunden) warten, bis das Produkt aktualisiert wird. Danach wird ein Dialogfeld angezeigt, und Sie können wird einen Kauf tätigen.

Hinweis 3 : Bitte beheben Sie den Fehler bei den Eingabeparametern. Die SKU darf nicht null sein - das Produkt in der Play Console wurde noch nicht aktualisiert. Bitte warten Sie.

Hinweis 4 : Möglicherweise tritt in den Protokollen als Antwortcode 6 der Fehler "Ihre Transaktion kann nicht abgeschlossen werden" auf , während Sie testen. Aus welchen Gründen mir dies passiert, ist nicht genau bekannt, aber nach meinen Beobachtungen geschieht dies nach häufigen Manipulationen beim Kauf und der Rückgabe von Waren. Um dies zu beheben, gehen Sie zum Bankkartenmenü und übertragen Sie Ihre Karte. Wie vermeide ich das? Fügen Sie Ihr Konto als Tester zur Play Console hinzu und kaufen Sie nur von einer Testkarte.

Demo auf Github

Kauf mir Kaffee

(Übrigens funktioniert das Donetsystem auf Habr über den Button unter dem Artikel - ca. Moderator).

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


All Articles