web-dev-qa-db-fra.com

Comment reconnaître les achats intégrés dans Android?

J'ai parcouru la bibliothèque de facturation Play https://developer.Android.com/google/play/billing/billing_library_overview Vous devez reconnaître tous les achats dans les trois jours. Le défaut de reconnaître correctement les achats entraîne le remboursement de ces achats. Le processus n'est pas clair sur la façon de reconnaître les achats. C'est ce que j'ai essayé. Est-ce la bonne façon de procéder? Merci d'avance

@Override


 public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchases) {
        if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK&&purchases!=null){
            Toast.makeText(this, "Purchase Successful", Toast.LENGTH_SHORT).show();
            for(Purchase purchase:purchases){
                handlePurchase(purchase);
            }
        }else if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.USER_CANCELED){
            Toast.makeText(this, "Purchase Cancelled", Toast.LENGTH_SHORT).show();
        }else if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED){
            Toast.makeText(this, "Already Purchased", Toast.LENGTH_SHORT).show();
        } else{
            Toast.makeText(this, billingResult.getDebugMessage(), Toast.LENGTH_SHORT).show();
        }



    //in handlePurchase()
 if(!purchase.isAcknowledged())
{ 
          AcknowledgePurchaseParams acknowledgePurchaseParams
                    = AcknowledgePurchaseParams.newBuilder()
                    .setPurchaseToken(purchase.getPurchaseToken())
                    .setDeveloperPayload(purchase.getDeveloperPayload())
                    .build();

            client.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener() {
                @Override
                public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
                    if(billingResult.getResponseCode()== BillingClient.BillingResponseCode.OK){
                        Toast.makeText(RemoveAdsActivity.this, "Purchase Acknowledged", Toast.LENGTH_SHORT).show();
                    }
                }
            });
        }
18
Surya Ganesh

Il mentionne la reconnaissance des achats près de la moitié du chemin lien . Il existe différentes façons de reconnaître l'achat en fonction du type.

 private BillingClient mBillingClient = BillingClient.newBuilder(mActivity).setListener(this).build();

//For non-consumables:
mBillingClient.acknowledgePurchase(acknowledgePurchaseParams, new AcknowledgePurchaseResponseListener());

//For Consumables: 
client.consumeAsync(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);

Le lien que j'ai publié comprend un exemple sur la façon de gérer les abonnements.

[~ # ~] mise à jour [~ # ~]

Voici un exemple plus étendu sur la façon de reconnaître les achats non consommables :

Créez d'abord l'objet AcknowledgePurchaseParams Class. Pour cela, vous avez besoin du jeton d'achat que vous devriez pouvoir obtenir facilement car vous devez l'appeler dans votre méthode onPurchasesUpdated ou une autre méthode à laquelle vous avez transmis l'achat après onPurchasesUpdated:

AcknowledgePurchaseParams acknowledgePurchaseParams =
            AcknowledgePurchaseParams.newBuilder()
                    .setPurchaseToken(purchase.getPurchaseToken())
                    .build();

Créez ensuite votre écouteur qui sera utilisé comme deuxième paramètre. Cela vous permettra de faire quelque chose une fois l'achat confirmé. J'affiche un message de snack-bar dans cet exemple (selon le commentaire de worbel, vous pouvez, et devriez probablement, vérifier le résultat de ce résultat de facturation):

AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListener = new AcknowledgePurchaseResponseListener() {
        @Override
        public void onAcknowledgePurchaseResponse(BillingResult billingResult) {              

            getMessage("Purchase acknowledged");               
        }

    };

Une fois ces éléments créés, utilisez votre BillingClient pour appeler la méthode acknowledgePurchase:

mBillingClient.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);

L'achat doit être reconnu avec succès.

Cela utilise acknowledgePurchase pour les articles non consommables.

Achats consommables

Ceci est similaire, seulement ce qu'ils sont appelés est changé - Voir l'explication de ce qu'ils sont dans l'exemple ci-dessus:

Premier paramètre - Paramètres - configuration:

ConsumeParams consumeParams = ConsumeParams.newBuilder()
            .setPurchaseToken(purchase.getPurchaseToken())
            .build();

Deuxième paramètre - Écouteur - configuration:

    ConsumeResponseListener consumeResponseListener = new ConsumeResponseListener() {
        @Override
        public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
            getMessage("Purchase acknowledged");
        }
    }

Utilisez maintenant votre BillingClint et consumeAsync:

mBillingClient.consumeAsync(consumeParams, consumeResponseListener);
17
COYG