Android In-app Billing Library

6 views
Skip to first unread message

Hermes Pique

unread,
Jun 8, 2011, 3:43:52 PM6/8/11
to Barcelona GTUG
Hola.

Cuando empezamos a trabajar con In-app Billing de Android la API nos
resultó excesivamente complicada, y el ejemplo Dungeons
incomprensible.

En vez de llamar servicios e implementar receivers, lo que queríamos
era algo tan simple como:

requestPurchase("com.example.item")

Y como no existía decidimos implementarlo y hacerlo open-source. ;)

https://github.com/robotmedia/AndroidBillingLibrary

Android Billing Library implementa la especificación completa de in-
app billing, y guarda las transacciones en una base de datos ofuscada
que se puede consultar con operaciones de alto nivel.

Basta con agregar la librería al proyecto y subclasear
AbstractBillingActivity en la activity que utilizará in-app billing. O
usar BillingController directamente e implementar IBillingObserver y
BillingController.IConfiguration si se necesita mayor control.

Lo que está actualmente en github es una primera versión muy verde,
apenas testeada. A los que les interese los invito a sumarse al
proyecto y hacer esta librería más robusta, ya sea con código o con
reportes de error.

Gracias,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net

iñaki

unread,
Jun 8, 2011, 4:44:53 PM6/8/11
to barcelo...@googlegroups.com
Pues a mi me viene genial!!!  Empece con el Dungeons, y como dices es abstracto total...
Existe algún problema con productos sin administrar? 

Mil gracias por el aporte


Saludos

 
2011/6/8 Hermes Pique <herme...@gmail.com>

--
Sigue al Barcelona GTUG en twitter para no perderte nada :)
twitter.com/barcelonagtug

Hermes Pique

unread,
Jun 8, 2011, 5:48:22 PM6/8/11
to Barcelona GTUG
Hola Iñaki.

En teoría la librería debería soportar unmanaged items aunque no lo
hemos testeado extensivamente.

En particular BillingController.countPurchases te dirá cuántas compras
de un ítem se han realizado.

Espero que te sea útil. Si encuentras algo que no funcione como
debería lo corregiremos, por supuesto.

Saludos,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net

On Jun 8, 10:44 pm, iñaki <inaki.s...@gmail.com> wrote:
> Pues a mi me viene genial!!!  Empece con el Dungeons, y como dices es
> abstracto total...
> Existe algún problema con productos sin administrar?
>
> Mil gracias por el aporte
>
> Saludos
>
> 2011/6/8 Hermes Pique <hermespi...@gmail.com>

Fernando Cejas

unread,
Jun 8, 2011, 5:57:08 PM6/8/11
to barcelo...@googlegroups.com
La verdad Hermes, que el material que estás compartiendo es increíble!!!..Felicitaciones por la iniciativa, seguramente la probaré y usaré y aportaré lo que pueda para majorarla!!!..

Gracias maestro!!!!


Fernando Cejas




2011/6/8 Hermes Pique <herme...@gmail.com>

Hermes Pique

unread,
Jun 9, 2011, 5:16:15 AM6/9/11
to Barcelona GTUG
Gracias Fernando!

Ya te prevengo de la nimia cobertura de los test unitarios para que no
te asustes. ;)

Saludos,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net

On Jun 8, 11:57 pm, Fernando Cejas <fce...@gmail.com> wrote:
> La verdad Hermes, que el material que estás compartiendo es
> increíble!!!..Felicitaciones por la iniciativa, seguramente la probaré y
> usaré y aportaré lo que pueda para majorarla!!!..
>
> Gracias maestro!!!!
>
> *Fernando Cejas*
> GTUG Barcelona Core Team
> @fernando_cejas <http://twitter.com/fernando_cejas>
> fce...@gmail.com
>
> http://www.android10.org/
> @android10comm <http://twitter.com/android10comm>
>
> 2011/6/8 Hermes Pique <hermespi...@gmail.com>

Fernando Cejas

unread,
Jun 9, 2011, 6:36:54 AM6/9/11
to barcelo...@googlegroups.com
jajaj...Perfecto Hermes !!! ;)

Saludos

Fernando Cejas
GTUG Barcelona Core Team

Joan Pujol

unread,
Jun 10, 2011, 2:15:19 AM6/10/11
to barcelo...@googlegroups.com
Muchas gracias Hermes.

Yo tambien seguramente le echaré una ojeada. Tenia pensado de hacer una version sin anuncios y con alguna caracteristica de más de una de mis aplicaciones y tenia pensado en hacer otra aplicación.
Pero no sé, que opinais del In-app Billing para activar una versión premium sin anuncios y con más características?

Saludos,

Hermes Pique

unread,
Jun 10, 2011, 3:56:55 AM6/10/11
to Barcelona GTUG
Hola Joan,

En oposición a tener dos apps separadas? Tendrás mucha más
flexibilidad con in-app billing, sobretodo a la hora de migrar los
datos del usuario a la versión premium (en teoría si es la misma app
no deberías hacer nada).

En principio esto debería ser muy sencillo de implementar con
https://github.com/robotmedia/AndroidBillingLibrary :

Llamas a isPurchased(context, "premium") para determinar si ya se
compró la versión premium al iniciar, utilizas
requestPurchase(context, "premium") para la compra, e implementas
onPurchaseExecuted para refrescar la interfaz.

Adicionalmente, con checkBillingSupported() puedes validar si in-app
billing está soportado y si no está enviar al usuario a una versión de
pago de la app en el market.

Saludos,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net

Joan Pujol

unread,
Jun 10, 2011, 8:04:11 AM6/10/11
to barcelo...@googlegroups.com
Hola,

Y la información donde se guarda? Hice una lectura super en diagonal y vi algo de BDD ofuscada...
Se guarda alli? Porque el problema que le veo son el cambio dispositivo o borrado del mobil.
Puede quedar la compra asociada a la cuenta de google?

Y en cuanto a experiencia de usuario, sabéis de aplicaciones que estén utilizando InApp billing para una versión Premium?

Saludos,

Hermes Pique

unread,
Jun 10, 2011, 11:26:19 AM6/10/11
to Barcelona GTUG
Hola Joan,

En efecto, las transacciones se guardan en una base de datos SQLite
obfuscada.

Si el usuario cambia de dispositivo (y estás utilizando
AbstractBillingActivity), automáticamente se restaurarán las
transacciones asociadas a ese usuario.

Si no estás utilizando AbstractBillingActivity puedes hacer una
llamada directamente a BillingController#restoreTransactions(Context).

En cuando a aplicaciones con versión premium via in-app, nosotros
publicaremos una en breve. Ya te avisaré cuando esté en el Market.

Saludos,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net

Fran Gamez

unread,
Jun 16, 2011, 11:03:46 AM6/16/11
to barcelo...@googlegroups.com
Hola,

he visto que esta librería está sujeta a la licencia GNU...
Que pasaría con mi aplicación si incorporo esta librería (como jar externo) ? Pasaría mi aplicación a ser también opensource?

Me gustaría conocer todas las implicaciones que tiene adoptar una librería opensource en una aplicación que no lo es. y que será de pago en el Market...

Muchas gracias por vuestra ayuda.

saludos.



Jose Play

unread,
Jun 9, 2011, 5:16:06 AM6/9/11
to barcelo...@googlegroups.com
HOLA a tod@s,. disculpadme, soy novato en programacion, encontre vuestro grupo pq busco algun sitio donde aprender a programar sencillas aplicaciones con app inventor. no se si me podais ayudar con ello. os pido disculpas si este no es el medio para tales peticiones.
 
un saludo.
Jose Luis Díaz Toirán
www.kungfusexual.com

Hermes Pique

unread,
Jun 17, 2011, 6:28:54 AM6/17/11
to Barcelona GTUG
Hola Fran,

Es GNU Lesser. Se puede usar en software propietario.

Saludos,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net

Hermes Pique

unread,
Jun 17, 2011, 6:28:50 AM6/17/11
to Barcelona GTUG
Hola Fran,

Es GNU Lesser. Se puede usar en software propietario.

Saludos,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net

On Jun 16, 5:03 pm, Fran Gamez <fgam...@gmail.com> wrote:

Joan Pujol

unread,
Jun 21, 2011, 4:51:48 PM6/21/11
to barcelo...@googlegroups.com
Ya lo has puesto en funcionamiento?

Yo hoy he leído esto y me ha dado un poco de yuyu hacer pruebas:

No sé, por el poco tiempo que llevo me parece que Google no acaba de cuidar del todo al market. 
La otra semana una aplicación se quedo 4 dias sin aparecer en el market debido a algun error que tenia más gente. Últimamente las estadísticas se actualizan cada mucho y los porcentajes no son muy acordes ( a dia de hoy tengo más usuarios activos que instalaciones)...
Pero bueno eso son anecdotas, los problemas que se comentan con gente en el inapp billing són consas ya mucho más graves.


Hermes Pique

unread,
Jun 22, 2011, 11:54:06 AM6/22/11
to Barcelona GTUG
Lamentablemente el in-app billing que ofrece Google todavía no es 100%
fiable.

Está claro que Google no le ha dado la prioridad que nos gustaría al
Android Market, sobretodo en lo que son ventas.

Yo no lo doy por perdido todavía, pero cada vez estamos mirando con
más cariño a dos empresas que se mueven en Android y cuyo negocio
principal no es la publicidad: Amazon y PayPal.

Saludos,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net

On Jun 21, 10:51 pm, Joan Pujol <joanpu...@gmail.com> wrote:
> Ya lo has puesto en funcionamiento?
>
> Yo hoy he leído esto y me ha dado un poco de yuyu hacer pruebas:https://groups.google.com/d/topic/android-developers/soJCFObhfqk/disc...

Fernando Cejas

unread,
Jun 22, 2011, 12:18:56 PM6/22/11
to barcelo...@googlegroups.com
Estoy totalmente de acuerdo con vos Hermes!!!..

Considero que vamos a tener que optar por markets "alternativos" y no el "oficial", ya que como bien decís, no se tiene tanto en cuenta los pagos...y si se promueve mucho mas la publicidad...por algo será no??? 

;)
2011/6/22 Hermes Pique <herme...@gmail.com>

Joan Pujol

unread,
Jul 9, 2011, 11:52:43 AM7/9/11
to barcelo...@googlegroups.com
Hola Hermes,

Habéis publicado ya vuestra aplicación o experimentado más con el InApp billing? 

Yo he visto que parece ser que alguno de los problemas ya se ha resuelto pero ahora tengo preparada una versión de pago de una aplicación y me tengo que poner con el tema del pago y aun no tengo claro si usar el InApp Billing o hacer otra aplicación.

En principio preferiría el InApp Billing por tener solo una aplicación y porque supongo que es factible poner una cuota anual en lugar de una única cuota pero claro falta ver como va...

Bueno mañana miraré si me bajo el código y hago alguna prueba, que he visto que habéis estado trabajando en ello y que por tanto apostáis de momento por este camino no?

Un Saludo,

Hermes Pique

unread,
Jul 10, 2011, 6:48:01 AM7/10/11
to Barcelona GTUG
Hola Joan,

Tenemos varias apps con in-app billing para clientes, y en breve
publicaremos una app nuestra utilizando nuestra librería (https://
github.com/robotmedia/AndroidBillingLibrary).

Si bien el In-App Billing de Android tiene todavía sus problemas,
confiamos en que Google está trabajando en ello y que tarde y temprano
se solucionarán. Quizás no tan rápido como nos gustaría...

Nuestra librería está empezando a cobrar vidilla en github. Si bien
todavía no debería utilizarse ciegamente para código de producción, es
mejor que empezar desde 0 y cuanto más ojos tenga encima, mejor.

Espero que te sirva.

Saludos,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net

Joan Pujol

unread,
Jul 10, 2011, 4:39:06 PM7/10/11
to barcelo...@googlegroups.com
Muchas gracias Hermes,

Si la lleváis usando ya en varios clientes iré por aqui entonces.

Hoy ya me la he bajado y he estado mirando un poco el código y la verdad es que por lo poco que he ojeado esta muy bien, muchas gracias.

No obstante tengo una duda, la idea vuestra del uso del AbstractBillingActivity qual es? 
Usarla en MainActivity y despues en las otras activities donde sea necesario atacar directamente el controlador?
O extender todas las activities que necesiten de InAppBilling de esta. O más que nada es solo para empezar a probar y lo suyo es atacar directamente al controlador para usos reales?

Lo comento porque si bien la parte de compras si que lo veo como algo más centralizado en un sitio, la parte de consulta de las cosas compradas la veo más desperdigada por toda la lógica de la aplicación.

Saludos,

Hermes Pique

unread,
Jul 10, 2011, 6:31:22 PM7/10/11
to Barcelona GTUG
Hola Joan,

Para eso mejor usar BillingController directamente.

AbstractBillingActivity es más que nada para dar un ejemplo de cómo se
podría usar BillingController en una activity, o para aplicaciones
muy, pero muy sencillas.

Saludos,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net

Joan Pujol

unread,
Jul 17, 2011, 4:07:18 PM7/17/11
to barcelo...@googlegroups.com
Hola Hermes,

Ya he estado usando la libreria y ya tengo bastante avanzada la integración, muchas gracias por tu trabajo.

Lo único que me gustaria comentarte algunas cosas. Lo comento por aqui pq no he visto ningún foro, no sé si seria bueno de crear un grupo o foro para la libreria? Ya que de bugs si que he podido reportar uno que ya he visto que has corregido pero para comentar no se dónde es más adecuado. Pero bueno, por ahora lo comento por aqui.

-1-
Cuando se esta ejecutando un requestPurchase y se ha abierto la activity que se encarga de hacer el cargo de la tarjeta, si el usuario cancela la compra pulsando back el mensaje de USER_CANCELED que manda el market no se trata y como usuario de librería no se puede tratar.
El mensaje de USER_CANCELED acaba pasando por  BillingReceiver.onReceive, responseCode y finalmente BillingController.onResponseCode que solo lo loga.

Creo que se tendría que ampliar el IBillingObserver con  onRequestPurchaseResponse de forma similar a lo que hace el ejemplo del Dungeons.

Para mi es importante ya que intento ofrecer una respuesta tradicional síncrona de la compra al usuario. De manera que cuando el usuario cierra la activity de checkout de google la aplicación se queda esperando hasta 60 segundos para notificar al usuario si la compra ha tenido éxito o no (si tarda más o hay una interrupción ya se trata por el código de servicio, pero para el caso general lo veo mucho más fácil para el usuario así).
El problema es que al no recibir el mensaje de cancelación de usuario siempre que el usuario pulsa atrás el programa se queda 60 segundos esperando.

-2-
El hecho de que BillingController sea estático puede ser algo problemático para posibles extensiones. Por ejemplo para solucionar -1- yo podría sobreescrivir onResponseCode pero no puedo por ser estático.
Eso hace que para hacer el apaño tenga que empezar a modificar código y...

Por lo demás de momento todo perfecto, muchas gracias.

Un Saludo,

PD: Aún no me lo he mirado y no sé por donde tiraré, pero si hago algo sobre -1- y es medianamente genérico quieres que te lo mande?

Hermes Pique

unread,
Jul 18, 2011, 7:58:52 AM7/18/11
to Barcelona GTUG
Gracias Joan!

Sugiero mover esta discusión al github mismo (allí la clasificaremos
como "feature request"). Me temo que entrar en tanto detalle sobre la
librería pueda no interesar al resto del grupo. ;)

Ya puestos, a vista rápida creo que lo que pides se podría agregar sin
muchas dificultades. Lo comentamos por github...

Saludos,

--
Hermes Pique
ROBOT MEDIA
Picture Books for Tablets and Mobiles

http://www.twitter.com/robot_media
http://www.facebook.com/robotmedia
http://www.robotmedia.net



Reply all
Reply to author
Forward
0 new messages