Veamos como se implementan las Compras in-app o In-App Billing en Android. Para esto, vamos a seguir el CodeLab con su repositorio GitHub
Hay dos links relacionados el a este CodeLab:
- Video de in-app billing o también el siguiente video sobre la
- Video de Seguridad de in-app Billing del Google I/O 2013
Comencemos
Directorio de trabajo, en nuestra PC utilizaremos la carpeta:
# Ejecutamos el $ git clone en:
/Users/pabloin/Desktop/NoCuestaNada/Mob/GitHub-tmp/googlesamples
# Pryecto de trabajo:
/Users/pabloin/Desktop/NoCuestaNada/Mob/GitHub-tmp/googlesamples/android-play-billing/TrivialDrive
Clonamos al proyecto:
Ejecutamos al proyecto con Android Studio
Probamos levantar la app y nos da una excepcion de claves y keystores:
Paso 01: Agregar la aplicación a Google Play Developer Console
En el Google Play vamos a tener que generar la clave del aplicación por única vez.
Precondiciones: Ya me había dado de alta en el Google Play
Necesito darme de alta en el Google Wallet según dice la doc:
To sell in-app items, you also need to have a** Google payments **merchant account.
Paso 02: Alta en el Google Wallet
Me pude dar de alta por la web Google Wallet:
Sobre descargar la app de iOS, no es posible desde el store Argentino…
Paso 03: Alta de la App en Google developer
Damos de alta la App en Google Play developer Console
Le vamos a asignar el nombre DriveBuyPay
Agergamos algunos datos
Paso 04: Api y Servicios: Obtener clave de licencia para la aplicación
Dentro de Api y servicios, buscamos la clave de licencia para la aplicación
Copiamos la pública RSA con codificación Base64 para incluirla en tu archivo binario apk.
Paso 05: Renombrar paquetes de la aplicación
Tendremos que modificar el nombre del package de la aplicación a uno propio, donde cambiaremos
al siguiente:
Tambien tenemos que modificarolo en el build.gradle de la aplicacion app
Para renombrar paquetes, voy a probar la Propuesta de Stackoverflow
**Another good method is: First create a new package with the desired name by right clicking on the java folder -> new -> package.
Then, select and drag all your classes to the new package. AndroidStudio will refactor the package name everywhere.
Finally, delete the old package.
Done.
One more thing very important
You have to Change manually Android Manifest and gradle file to the new package if you use this method.**
Ok, después de un poco de trabajo, pude renombrar los paquetes, gracias a deseleccionar la opción: Compact Empty Middle Packages que me muestra las carpetas de proyecto de Android separadas.
Paso 06: Agregamos permisos
En el AndroidManifest.xml Agregamos permisos:
</uses-permission>
Paso 07: Agregamos nuesto propio key
En el CodeLab, nos indican:
Modify the sample to create your own application. Remember to copy the Base64 public license key for your application from the Developer Console over to your MainActivity.java.
Aqui nuevamente hay un tema que tenemos que tener cuidado respecto a almacenar nuestra propia Key en el codigo:
Otra vez, tenemos nuevamente la advertencia de google sobre agregar seguridad a la clave:
Security Recommendation: It is highly recommended that you do not hard-code the exact public license key string value as provided by Google Play. Instead, you can construct the whole public license key string at runtime from substrings, or retrieve it from an encrypted store, before passing it to the constructor. This approach makes it more difficult for malicious third-parties to modify the public license key string in your APK file.
Aparentemente no es seguro dejar la clave en el codigo, y por esto hay una discusión en stackoverflow al respecto. Y tambien otra discusion mas sobre el tema
Agregamos la clave de la siguiente manera con un metodo privado que revierte la ofuscación de la clave, para que pueda ser asignada a la variable string base64EncodedPublicKey con el valor correcto:
Paso 08: Ejecutando la aplicación
Si intentamos ejecutar la aplicación en este punto, vemos que al menos levanta:
Dice:
Error: Problem Setting up in-app billing: labResult: Billing service unavailable on the device. (Response 3:Billing unavailable)
Las razones de este error Aparentemente pueden ser varias (1)(2)…
Una de las cuales, es que si estoy corriendo en un emulador, los servicios de Google Play deberian estar instalados y configurados. Este podría ser mi caso, ya que estoy corriendo la app en un emulador, pero:
¿Como se si en mi Emulador, tengo los servicios del Google Play instalados y configurados?
Para el emulador del Android Studio, parece que se puede descargar el GAPPS Package para instalar. No lo probe.
Probé poco el Gennymotion y no probé el bluestacks, pero con Andy pude llegar al objetivo:
Otra alternativa, el emulador Andy parece que trae los Servicios del Google Play instalados. ¿Se puede ejecutar la aplicacion?
Depsués de algunas pruebas, tal como se ve en la imagen a continuación:
La versión de Andy utilizada es la siguiente:
Para ejecutar la aplicación en el Emulador Andy que tiene los Servicios del Google Play instalados, tuve que ingresar mi cuenta de gmail en el Google Play instalado en Andy.
- Android 4.4.2
- Andy_vm_custom 46.1.112
Conclusión
Por ahora finalizamos en este punto el post, con el obejtivo de haber hecho andar la aplicación y comprendido en un punto intermedio el circuito y solucionado varios problemas relacionados al setup de la app.