Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

296
Views
facturación android:4.0.0 - consultaCompras(INAPP) y compra.getSku()

Actualicé a la versión 4 de facturación de Android y 2 cosas ya no funcionan.

Primero tengo esto:

 else if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.ITEM_ALREADY_OWNED) { Purchase.PurchasesResult queryAlreadyPurchasesResult = billingClient.queryPurchases(INAPP); // deprecated List<Purchase> alreadyPurchases = queryAlreadyPurchasesResult.getPurchasesList(); if(alreadyPurchases!=null){ handlePurchases(alreadyPurchases); } }

queryPurchases está en desuso.

En segundo lugar tengo esto:

 void handlePurchases(List<Purchase> purchases) { for(Purchase purchase:purchases) { //if item is purchased if (PRODUCT_ID.equals(purchase.getSku()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) { if (!verifyValidSignature(purchase.getOriginalJson(), purchase.getSignature())) { // Invalid purchase // show error to user Toast.makeText(getApplicationContext(), R.string.plus_error, Toast.LENGTH_SHORT).show(); return; }

getSku() estaba funcionando, pero ahora está marcado como Cannot resolve method getSku() in Purchase

¿Alguna idea de cómo resolver estos problemas?


De documentos:

 Summary of changes Added BillingClient.queryPurchasesAsync() to replace BillingClient.queryPurchases() which will be removed in a future release. Added Purchase#getSkus() and PurchaseHistoryRecord#getSkus(). These replace Purchase#getSku and PurchaseHistoryRecord#getSku which have been removed.

Pero no sé cómo aplicar estos nuevos comandos en mi código anterior.

Si cambio getSku a getSkus my if if (PRODUCT_ID.equals(purchase.getSkus()) && purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) dirá que siempre es falso. Y no tengo idea de cómo usar queryPurchasesAsync(), necesito 2 parámetros ahora.

Gracias.

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Como mencioné anteriormente en un comentario, está comparando un objeto String con un List, pero como dijo chitgoks, es ArrayList<String> y no List<String> como supuse. No estoy seguro de si alguna vez obtendrá más de una cadena de sku (ya que probablemente no pida varias cosas al mismo tiempo), pero mírelas todas para estar seguro o aproveche la oportunidad y compare PRODUCT_ID con solo compra.getSkus().get(0).

La nueva llamada asíncrona para compras parece requerir solo pequeños cambios.

Ejemplo de la forma antigua de hacerlo:

 Purchase.PurchasesResult result = billingClient.queryPurchases(BillingClient.SkuType.SUBS); doSomethingWithPurchaseList(result.getPurchasesList());

Y esta sería la nueva forma de hacer lo mismo:

 billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS, new PurchasesResponseListener() { @Override public void onQueryPurchasesResponse(@NonNull BillingResult billingResult, @NonNull List<Purchase> list) { doSomethingWithPurchaseList(list); } });
over 4 years ago · Santiago Trujillo Report

0

Todos saben que la nueva biblioteca de facturación tiene una nueva característica

  1. todo estará en el subproceso de fondo, así que no cambie nada en la interfaz de usuario principal durante el reconocimiento de la compra y la restauración de la compra.

  2. si está dando una compra de consumibles, el usuario ahora puede comprar el mismo sku en más cantidad en una compra, así que escriba la lógica en consecuencia. use la función getQuantity().

  3. para restaurar no consumibles.

 billingClient.queryPurchasesAsync( BillingClient.SkuType.INAPP, new PurchasesResponseListener() { @Override public void onQueryPurchasesResponse(@NonNull BillingResult billingResult, @NonNull List < Purchase > myPurchases) { if (!myPurchases.isEmpty()) { for (Object p: myPurchases) { final Purchase purchase = (Purchase) p; if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED && purchase.getSkus.contains("sku here") { handlePurchase(purchase); } } }); } } )
over 4 years ago · Santiago Trujillo Report

0

getSkus devuelve una ArrayList<String> . Utilice contains como se indica a continuación.

 purchase.getSkus().contains(YOUR_PRODUCT_ID.toLowerCase())
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!