
¿Y cómo es que todavía no hay ningún artículo sobre Habré sobre esto? No importa, es necesario corregirlo.
Hay 2 formas de agregar compras en la aplicación a su aplicación de Android: antigua y nueva. Hasta 2017, todos usaban la biblioteca de anjlab, pero desde junio de 2017 la situación ha cambiado, Google lanzó su propia biblioteca para compras y suscripciones internas: Play Billing Library. Ahora este último se considera el estándar.
Play Billing Library es muy simple.
Conecta la dependencia.
implementation 'com.android.billingclient:billing:1.2'
Agregar permiso en el manifiesto.
<uses-permission android:name="com.android.vending.BILLING"/>
Cree una instancia de BillingClient e inicie la conexión.
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) {
Entramos en el método
onPurchasesUpdated () cuando se realiza la compra, en el método
onBillingSetupFinished () puede solicitar información sobre bienes y compras.
Solicitar información del producto. Poner
querySkuDetails () en
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) {
En el código, puede notar el concepto de SKU, ¿qué es? SKU: de la Unidad de mantenimiento de existencias en inglés (identificador de artículo de producto).
Ahora en
mSkuDetailsMap tenemos toda la información sobre los productos (nombre, descripción, precio) registrados en Play Console de esta aplicación (más sobre eso más adelante). Presta atención a esta línea
skuList.add (mSkuId); , aquí agregamos la identificación del producto desde Play Console, enumere aquí todos los productos con los que desea interactuar. Tenemos un producto —sku_id_1.
Todo está listo para cumplir con la solicitud de compra. Pasamos la identificación del producto. Ejecute este método, por ejemplo, haciendo clic en el botón.
public void launchBilling(String skuId) { BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder() .setSkuDetails(mSkuDetailsMap.get(skuId)) .build(); mBillingClient.launchBillingFlow(this, billingFlowParams); }
Ahora, al ejecutar este método, verá este cuadro de diálogo (aprox. Imágenes de Internet).

Ahora, si el usuario compra los bienes, deben proporcionarle. Agregue el método
payComplete () y realice acciones que brinden acceso al producto comprado. Por ejemplo, si un usuario compró una desconexión de anuncios, realice este método para que el anuncio ya no aparezca.
... @Override public void onPurchasesUpdated(int responseCode, @Nullable List<Purchase> purchases) { if (responseCode == BillingClient.BillingResponse.OK && purchases != null) {
Todo está bien, pero si el usuario reinicia la aplicación, nuestro programa no sabe nada sobre compras. Es necesario solicitar información sobre ellos. Hazlo en
onBillingSetupFinished () .
@Override public void onBillingSetupFinished(@BillingClient.BillingResponse int billingResponseCode) { if (billingResponseCode == BillingClient.BillingResponse.OK) {
En
shoppingList obtiene una lista de todas las compras realizadas por el usuario.
Hacemos una comprobación: si se compran los bienes, ejecute
payComplete () .
Listo Queda por publicar esta aplicación en Play Console y agregar productos. Cómo agregar un producto:
Descripción de la página de la aplicación >
Contenido en venta >
Crear contenido limitado .
Nota 1 : No podrá agregar productos hasta que cargue la compilación de la aplicación en Play Console.
Nota 2 : para ver el cuadro de diálogo de compra, debe cargar la compilación en Play Console, agregar el producto y esperar un momento (~ 30 minutos - 1 hora - 3 horas) hasta que el producto se actualice, solo después de eso aparece un cuadro de diálogo y puede Hará una compra.
Nota 3 :
corrija el error de
parámetros de entrada. El SKU no puede ser nulo : el producto en Play Console aún no se ha actualizado, espere.
Nota 4 : Puede encontrar el
error Error "No se puede completar su transacción" , en los registros como
código de respuesta 6, mientras realiza la prueba. Por qué razones me sucede esto no se sabe exactamente, pero según mis observaciones, esto sucede después de frecuentes manipulaciones con la compra y devolución de bienes. Para solucionar esto, vaya al menú de la tarjeta bancaria y transfiera su tarjeta. ¿Cómo evitar esto? Agregue su cuenta a Play Console como probador y compre solo desde una tarjeta de prueba.
Demo en githubCómprame café(Por cierto, el sistema de donets funciona en Habr por el botón debajo del artículo - moderador aprox.).