Professional Documents
Culture Documents
Además de las aplicaciones de pago directamente en Play Store, exite otro método para monetizar
nuestras aplicaciones: las compras integradas (in-app purchases, en inglés). Una aplicación que
propone compras integradas permite al usuario comprar directamente, desde la aplicación, elementos
suplementarios: funcionalidades, elementos de juego, etc.
Los estudios demuestran que las compras integradas son, por lo general, más apreciadas por los
usuarios, que prefieren este modo de monetización a los métodos tradicionales de las aplicaciones de
pago de Play Store. Un extracto de este estudio está disponible en la siguiente
dirección:https://www.centrodeinnovacionbbva.com/noticias/tb/32154-lo-freemium-y-la-publicidad-in-
app-modelos-lideres-en-monetizacion-de-aplicaciones
Observe que el uso del pago integrado requiere que el desarrollador de la aplicación posea una cuenta
en Google Wallet. La creación de esta cuenta puede llevarse a cabo en la siguiente
dirección:http://www.google.com/wallet/business/, y es completamente gratuita.
1. Preparación
Como con la protección de las aplicaciones de pago, es la aplicación Play Store instalada en el
dispositivo del usuario la encargada de la comunicación entre la aplicación y los servidores de Google.
Y, del mismo modo, sólo es posible implementar el pago integrado en aplicaciones publicadas en Play
Store.
Utilizar directamente esta librería resulta algo complicado, y exige la implementación de numerosos
elementos. Para facilitar el trabajo, Google provee un ejemplo, bien diseñado, que integra un
conjunto de clases que simplifican el uso de la librería In AppBillingService. Vamos a utilizar
estas clases para reducir la carga de trabajo.
La primera etapa consiste, entonces, en descargar el paquete Google Play Billing Library, disponible
en la sección Extras del SDK Manager.
Sintaxis
Una vez agregado el permiso al manifiesto, hay que importar el APK del proyecto en la consola de
desarrollador de Play Store: esta primera importación permite indicar a Play Store que la aplicación
poseerá pagos integrados, de modo que Play Store lo detecta automáticamente en la lectura del
manifiesto, gracias al permiso com .android.vending.BILLING. Como con cualquier aplicación
en Play Store, es necesario que el APK esté firmado (consulte el capítulo Publicar una aplicación).
Una vez importada la aplicación, manifiestamente definida como con pagos integrados, la consola del
desarrollador permite agregar productos integrados, que podrán comprarse mediante el pago
integrado: no se trata en ningún caso de productos físicos, sino de elementos que desea hacer de
pago en su aplicación.
Una vez introducida la información obligatoria, basta con hacer clic en Habilitar, en la zona superior de
la pantalla: el producto estará activo, aunque puede existir cierto retardo antes de que esté
disponible.
Esta clave debe almacenarse en el proyecto que utilice el pago integrado. Se recomienda no
almacenar directamente la clave, sino prever una serie de rutinas que permitan recomponerla en
tiempo de ejecución de la aplicación. Un primer enfoque sugerido por Google consiste en separar esta
clave pública en varias cadenas y reconstruir el conjunto para su uso.
Una vez realizadas estas operaciones, es posible utilizar el pago integrado en la aplicación.
La primera etapa consiste en conectarse al servicio Play Store de compras integradas. Esta
operación de conexión la gestiona, completamente, la instancia de IabHelper, mediante el
método s tartSetup.
Sintaxis
Ejemplo
@Override
public void onDestroy() {
super.onDestroy();
if(iabHelper!=null)
iabHelper.dispose();
}
Sintaxis
Este método se ejecuta en el thread principal, lo cual puede resultar problemático, las consultas
podrían ser más o menos largas en función de la lista de productos y la calidad de la conexión de
red del terminal.
También existe una versión asíncrona del método queryInventory, que recibe como parámetro
suplementario un objeto de tipo IabH elper.QueryInventoryFinishedListener, cuyo
método onQueryInventoryFinishedse invoca cuando termina el procesamiento.
Sintaxis
Ejemplo
ArrayList<String> productos = new ArrayList<String>();
productos.add("producto_1");
iabHelper.queryInventoryAsync(true, productos, new Query
InventoryFinishedListener() {
@Override
public void onQueryInventoryFinished(IabResult result,
Inventory inventory) {
if(result.isFailure())
Toast.makeText(getApplicationContext(),
"Recuperación de los ítems
errónea",Toast.LENGTH_SHORT).show();
else
Toast.makeText(getApplicationContext(),
"Recuperación de los ítems
ok",Toast.LENGTH_SHORT).show();
});
El objeto de tipo Inventory devuelto por los métodos qu eryInventory contiene información
acerca de los productos disponibles y comprados: el método getSkuDetails permite obtener
información acerca de un producto, y el método getPurchasepermite obtener información acerca
de la solicitud para un producto.
Sintaxis
El objeto SkuDetails incluye información acerca del título, la descripción, así como el precio del
elemento que se ha puesto a la venta. Esta información está accesible utilizando los métodos get...
correspondientes.
Sintaxis
Sintaxis
Sintaxis
Ejemplo
El desarrollador deberá elaborar una estrategia eficaz para la verificación de las compras: no resulta
apropiado ejecutar una verificación con cada uso de la aplicación, puesto que la verificación requiere
una conexión a Internet. Es conveniente, por tanto, implementar una caché con las compras
verificadas para el caso de que no exista ninguna conexión de red disponible, y verificar de manera
regular las compras cuando el terminal se encuentre conectado.
d. Solicitar un producto
Play Store gestiona la totalidad del proceso de solicitud de un producto. Para el desarrollador, basta
con iniciar el proceso invocando al método l aunchPurchaseFlowdel objeto IabHelper.
La sintaxis del método es la siguiente:
Sintaxis
activity: actividad en curso. El proceso debe ejecutarse desde el thread principal de la actividad.
@Override
public void onActivityResult(int requestCode, int resultCode,
Intent data) {
if (!iabHelper.handleActivityResult(requestCode, resultCode,
data)) {
Toast.makeText(this, "La respuesta no se corresponde con
el proceso de compra", Toast.LENGTH_SHORT).show();
super.onActivityResult(requestCode, resultCode, data);
}
}
El método launc hPurchaseFlow posee una variante que permite agregar un tag arbitrario
seleccionado por el desarrollador. Este tag se devuelve en el objeto Purchase, accesible mediante
el método getDeveloperPayload.
Google recomienda utilizar este tag para verificar que la solicitud recibida se corresponde con la
solicitud enviada.
Sintaxis