Spanish Uso de servicio de licencias de Android Market

Mazacote

Member
Licensed User
Longtime User
Hola a todos, llevo unos meses usando B4A.

El tema es el siguiente: He subido al market mi primer programa gratis. Tengo terminado ahora otro que pondré de pago, pero no consigo hacer funcionar el servicio de linencias del market. Siempre da permiso a la aplicación, lo tenga o no.

Hago todo conforme al tutorial. Yo quiero que si el programa esta comprado funcione normal y si no lo esta que funcione en un modo demo.
Para ello utilizo un objeto "lc as LicenseChecker". En el sub lc_Allow asigno una variable demo=0 y en el lc_DontAllow demo=1. Pero haga lo que haga siempre esta en demo.

Me lo puede explicar alguien el funcionamiento de LicenseChecker que lo haya usado? A ser posible de la manera lo mas sencilla posible. He programado mucho con B4PPC pero con B4A es el segundo programa solamente.

Gracias.
 
Last edited:

Mazacote

Member
Licensed User
Longtime User
Ahora parece que si funciona, pero se ve que no guarda el resultado de la comprobación en el cache, porque a los pocos minutos vuelve a dar negativo. Lo que obliga a abrir siempre la aplicación con la conexión de datos activada.

De verdad que nadie habeis usado el servicio de licencias??? :sign0163:
 

JorgeMC

Member
Licensed User
Longtime User
Te animo, si tienes tiempo y puedes, a que hagas un mini tuto de como se hace, ya que existen varias preguntas por el foro y así tenemos más contenido para el foro y aprendemos los que no lo hemos usado aún ;)
 

Mazacote

Member
Licensed User
Longtime User
Te animo, si tienes tiempo y puedes, a que hagas un mini tuto de como se hace, ya que existen varias preguntas por el foro y así tenemos más contenido para el foro y aprendemos los que no lo hemos usado aún ;)

Jajaja que haga un mini tuto... cuando sepa como funciona si lo pondé. Esperaba que alguien me lo pudiera explicar.

Realmente es muy facil el funcionamiento (en teoria):
http://www.b4x.com/forum/basic4android-getting-started-tutorials/11429-protect-your-android-application-licensing-library.html
Pero en la practica como que no va muy bien.

He hecho lo siguiente:

1-He subido el apk al market pero sin publicar. Le he puesto un precio en € (para que lo coja como de pago y funcione a licencia)

2-El la pagina de la cuenta de desarrolladores del market, donde tenemos nuestros programas subidos le pincho a "editar perfil". Aqui aparece mi llave publica, que tengo que asignar a una variable (publicKey) en el programa. En "cuentas de prueba" pongo mi gmail para simular que he comprado el programa con esa cuenta. Y mas abajo en "respuesta a prueba de licencia" juego con licensed y not licensed.

3-En mi programa:
lc.Initialize("lc", p.GetDeviceId, publicKey, "kljdflkf".GetBytes("UTF8")) 'Inicio licensecheker

lc.SetVariableAndValue("var", 1) 'Si da respuesta de licencia valida pone la variable var=1

lc.CheckAccess 'pregunta al market

Aparentemente funciona bien. El programa recoge la respuesta del market segun le ponga licenciado o no. Pero al poco rato si no tengo conexión de internet en el movil me dice que no tiene licencia. Me toca cerrar el programa, matar el proceso que se queda, conectar datos, abrir el programa otra vez, respuesta sin licencia otra vez, volver a cerrar y matar el proceso, volver a abrir y ya tiene licencia de nuevo. Y al desconectar internet y abrir de nuevo el programa toca hacer lo mismo. Un rollo. Deberia bastar con abrir con datos solo la primera vez para preguntar por la licencia, porque la respuesta se debe guardar en el cache. Pero nada, o no se guarda o se borra.

Lo que se me ha ocurrido es que la primera vez que de respuesta de licencia valida genere una clave con el imei y guardarla en un archivo. Y "fiarse" de este archivo cuando diga que no tiene licencia. Si alguien copia el apk con este archivo no le funcionará porque su imei generaria otra clave.

A ver si alguien nos puede ayudar en esto. Saludos y perdón por el tocho.
 

JorgeMC

Member
Licensed User
Longtime User
Jejeje, gracias. Una solución que podrías hacer es algo como:

B4X:
If "Si tengo conexion a Internet"=True Then

   "Comprueba licencia"

Else

   "No compruebes"

End If

Todo esto lo podrías comprobar (No se que tipo de aplicación es), o bien cada X tiempo mediante un Timer, o cada vez que vayan a ejecutar algo en concreto. Esto es como las mochilas Usb, cada uno la programamos según veamos, unos al arranque, otros cada x tiempo, otros al entrar a un sitio, etc..
 
Last edited:

Mazacote

Member
Licensed User
Longtime User
Si, lo primero que pensé fue en hacer la comprobación cada x arranques, pero eso puede dar un margen de tiempo para que pueda funcionar "de gratis" al que no lo haya comprado. Y ayer justo se me ocurrio lo de hacer una clave con el imei, que parece mas seguro.
Cuando lo termine ya comentaré que tal va. El programa ya lo tengo terminado a falta de hacerlo funcionar en un modo demo si no tiene licencia.
 
Last edited:

JorgeMC

Member
Licensed User
Longtime User
Si, lo primero que pensé fue en hacer la comprobación cada x arranques, pero eso puede dar un margen de tiempo para que pueda funcionar "de gratis" al que no lo haya comprado. Y ayer justo se me ocurrio lo de hacer una clave con el imei, que parece mas seguro.
Cuando lo termine ya comentaré que tal va. El programa ya lo tengo terminado a falta de hacerlo funcionar en un modo demo si no tiene licencia.

Y como chequeas el IMEI vía Market.... pregunto. Es casí mejor como decías tu, cada 10 arranques por ejemplo, que compruebe la licencia, si no existiera internet, que lo intente hasta que pueda, y luego de nuevo +10 arranques.
 

Mazacote

Member
Licensed User
Longtime User
No, el imei se lee con una función de la libreria phone. Lo que comentas de comprobar cada x arranques no me gusta porque es una molestia para el usuario. Lo digo por propia experiencia, me pasa por ejemplo con el titanium backup. Lo uso muy amenudo y siempre me toca cada pocos dias abrirlo con internet.
 

JorgeMC

Member
Licensed User
Longtime User
No me has entendido, te comento, que no obligues en principio a que tengan conexión a internet, si no un esquema como este:

Arranque del programa (Comprueba conexión a Internet y Valida Licencia, en el primer arranque obligatorio)

Después de 10 arranques (Comprueba conexión a Internet e intenta validar Licencia) Si no puede, puedes ponerle para que lo intente todas las siguientes veces hasta que llegue al arranque 30 por ejemplo, donde ya le obligas a conectarse a Internet.

Esa sería una, la otra es que te crearas un servicio con el programa arrancado con un timer, para que cada X tiempo, compruebe la licencia si esta no ha podido ser validada al arranque.

No se, opciones hay multitud, ya depende del grado de seguridad que le quieras dar a tu programa.
 

Mazacote

Member
Licensed User
Longtime User
Si que te he entendido. Lo que pasa es que igual soy demasiado manioso, pero me gustaria que solo fuese necesario validar la primera vez.
No todo el mundo tiene tarifa de datos y mi programa va destinado a la gente que corre o compite en radiocontrol. Si se va un sabado a la pista a correr y no puede consultar o modificar los ajustes de su coche comodamente porque se le abre en modo demo y no tiene conexión para comprobar la licencia... pues se acordará de mi.

Si se almacenase la validación en el cache como dice Erel no haria falta habar de todo esto.
 
Top