› Foros › Tecnología › Telefonía
KYKUR88 escribió:"val client: BillingClient = ...
val acknowledgePurchaseResponseListener: AcknowledgePurchaseResponseListener = ..."
https://ibb.co/CP7sZ15 https://ibb.co/qrvYq51
mocelet escribió:El caso, a grandes rasgos la historia es crear el billing client, iniciar el flujo de compra con el SKU que sea según al botón que le hayas dado y, en el PurchasesUpdatedListener, ver que la compra se ha completado llamando al handlePurchase y ejecutando el acknowledge si la compra fue satisfactoria.
Sí, eso diría que lo tengo ya claro, gracias
El listener ahora lo tienes vacío, ahí iría el código del ejemplo del onPurchasesUpdated que recorre la lista de compras (Purchase) y llama al handlePurchase de cada una. En tu caso lo has puesto como lambda, así que no tienes que declarar la función. Y dentro del handlePurchase (recuerda añadirle el parámetro purchase: Purchase) el código del ejemplo ya llama al ack. El listener del ack si lo pones como lambda tampoco tienes que declararlo como val, así que esa línea que tenía puntos suspensivos te sobra.
Genial! no había caído en eso, y al menos ya entiendo q al estar en lambda no tengo q declarar la función. Si le añado el parámetro : Purchase, androidstudio me lo marca como muchos parámetros y la fun se deshabilita, en cambio si solo dejas (purchase) parece no dar fallo.
Luego en el listener del ack lo que he hecho ha sido añadirle { billingResult -> } pq si le pongo además purchases peta. La fun handlePurchase() me marca cada "purchase" en rojo, o sea que no sé de dónde la saco o si la tengo con otro nombre o q xD aparte el withContext tb me sale con error y el client, aunque ponga billingClient que se supone que es como lo he llamado desde un principio tampoco tira, se queda lleno de errores
Otro apunte, no copies y pegues el mismo código para el listener de cada botón porque eso queda muy feo. Al fin y al cabo la única diferencia en el comportamiento es el SKU. Hazte una función a la que pases por parámetro el SKU y así queda más limpio.
Muchas gracias por el apunte, era lo siguiente que iba a hacer una vez solucionara esto, aprender a reducir todo ese código pq como bien dices es lo mismo para distintos SKUs. Aparte de pulir la app que da asco xD
val purchasesUpdatedListener = PurchasesUpdatedListener { billingResult, purchases ->
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
for (purchase in purchases) {
handlePurchase(purchase)
}
} else if (billingResult.responseCode == BillingClient.BillingResponseCode.USER_CANCELED) {
// Handle an error caused by a user cancelling the purchase flow.
}
}
KYKUR88 escribió:Lo que comentas del botón, q debería estar desactivado hasta que se tenga el precio, la verdad que no entiendo cómo será que lo hace, yo lanzo el proceso "entero" hasta el purchaseFlow dentro de cada botón, y cada botón carga una compra distinta. No he tenido problemas hasta ahora con las pruebas.