2012-07-27 5 views
15

El valor predeterminado ServerManagedPolicy que Google proporciona en su License Verification Library se basa en las respuestas del servidor para determinar el intervalo de revalidación de la licencia. Esto resulta en la necesidad de una revalidación cada pocos días, a perpetuidad. Esto no solo es una molestia para los usuarios, puede ser un problema grave para los usuarios que pasan períodos prolongados sin conectividad. (. Acabamos de tener una consulta de un usuario que espera estar sin conectividad a Internet durante varias semanas, que es lo que motiva a esta pregunta)¿Esta implementación de la política de Google LVL sería razonablemente segura?

En resumen, estoy buscando un algoritmo que lograr dos cosas:

  1. reducen drásticamente los requisitos de conectividad en comparación con ServerManagedPolicy;
  2. proporcionan el mismo nivel de protección contra la piratería.

En una respuesta a this question el algoritmo política sugerida es hacer caso omiso de los tiempos previstos en la respuesta desde el servidor de Google y en lugar de utilizar un periodo de caducidad con licencia de alrededor de un mes, con el control del permiso está intentando cada pocos días (a extender el período de vencimiento si se recibe una respuesta LICENCIADA).

Si bien este enfoque aborda parcialmente el primer objetivo, aún requiere que los usuarios estén conectados una vez al mes mientras usan la aplicación, por lo que no funcionaría para (al menos uno de) nuestros usuarios.

El siguiente algoritmo logra el primer objetivo, pero no sé sobre el segundo. Cualquier comentario que señale las debilidades de este algoritmo, o sugerencias para otro enfoque, sería bienvenido.

  1. En la primera ejecución, verifique la licencia e insista en obtener una respuesta LICENCIADA antes de proporcionar una funcionalidad completa. Una vez recibido, establezca un período de vencimiento relativamente corto (pero más largo que el período de reembolso que proporciona Google Play, actualmente de 15 minutos). También registre un período de gracia de unos días más allá de eso.
  2. La aplicación comenzaría a verificar nuevamente después del período de vencimiento de la licencia. Si no puede conectarse (modo avión, etc.), seguirá funcionando hasta la expiración del período de gracia.
  3. Después de la expiración del período de gracia, insista en una segunda respuesta LICENCIADA antes de permitir el funcionamiento normal de la aplicación.
  4. Después de recibir la segunda respuesta LICENCIADA, active permanentemente todas las características de la aplicación y nunca se moleste en volver a verificar.
  5. Si recibe una respuesta SIN LICENCIA en algún punto, deshabilite permanentemente la funcionalidad completa. (El usuario puede, por supuesto, volver al paso 1 mediante la supresión de todos los datos de la aplicación.)

puntos adicionales:

  • se sugirió que renunciar a la primera comprobación de la licencia y esperar hasta la expiración de el período de retorno antes de hacer una verificación de licencia. El propósito de insistir en la primera respuesta LICENCIADA es evitar el exploit donde, después de que falla una verificación de licencia, el usuario simplemente detiene el proceso de la aplicación, borra los datos de la aplicación y reinicia la aplicación. (La aplicación proporciona valor incluso si se puede usar solo durante 15 minutos a la vez.)
  • El propósito de insistir en una segunda respuesta LICENCIADA es evitar el exploit buy-run-backup-return-restore.
  • No estoy preguntando si la verificación de la licencia de devolución de llamada es una buena idea o no (eso es lo que ofrece Google en lugar de su mecanismo de protección de copia obsoleto). También soy consciente de que ninguna protección contra la piratería es infalible y que se puede eludir todo el mecanismo de licencia de Google (en cuyo caso, todas las preguntas sobre el diseño de un algoritmo de política son irrelevantes). El punto principal de esta pregunta son los riesgos relativos (para nosotros) y los beneficios (para el usuario) del algoritmo anterior en comparación con otras políticas (como el ServerManagedPolicy).
+0

La transición "invisible" desde "comprar, todavía requiere la verificación" "comprado, no se requiere más verificación" tiene problemas. Debe reflejar eso en algún lugar de su aplicación, aunque solo sea en un cuadro de diálogo de configuración. (Licencia: provisional en alguna parte, que si se hace clic después de que se cierra la "ventana de devolución", se fuerza * un control * en ese momento *, generando un mensaje de error si es "demasiado pronto" para obtener una licencia perpetua. manualmente), se convierte en Licencia: perpetua.) – Yakk

+0

@Yakk - No estoy seguro del problema que está viendo. ¿Es que al usuario se le debe ofrecer control sobre el tiempo del segundo cheque? –

+1

Entonces alguien compra su producto, sabiendo que "funciona sin conexión". Luego lo descargan, lo ejecutan, funciona. A continuación, pierden la conectividad (sin datos, wifi apagado por cualquier razón). 3 días después, su aplicación deja de funcionar, con poco diagnóstico. El punto es poder decir "La aplicación funciona sin conexión * una vez que dice licencia perpetua *". Es (aparentemente) un cambio de estado importante para sus clientes: hacer ese cambio de estado visible para los clientes es importante entonces. – Yakk

Respuesta

5

En cuanto a la piratería, siempre habrá un riesgo, nada de lo que hagas lo evitará por completo.

A diferencia de otros riesgos, corre el riesgo de molestar a sus clientes con una aplicación que no pueden usar.

Yo esperaría una gran cantidad de 0 * Revisiones de clientes insatisfechos que ni siquiera puede utilizar una aplicación que pagaron como ha sido desactivado, mientras que las personas que recibieron la aplicación de forma gratuita tendrán probablemente sin interrupciones. Es como comprar un DVD y tener la cara llena de advertencias de derechos de autor, cuando los piratas reciben una vista ininterrumpida.

Insistiría en una respuesta autorizada al comprar la aplicación, y no me molestaría con la segunda respuesta. Si alguien puede encontrar su camino en torno a una respuesta, la encontrará alejada alrededor de la segunda.

Editar: Estoy de acuerdo con kcoppock que un cheque con licencia 20 minutos después de la compra se reduzcan al mínimo las interferencias a los clientes y evitar el error de reembolso que usted ha mencionado

+2

Una aprobación única está sujeta a un exploit muy fácil y conocido: 1) comprar la aplicación; 2) ejecutarlo y obtener una respuesta LICENCIADA; 3) haga una copia de seguridad de su dispositivo; 4) devolver la aplicación (dentro de la ventana de reembolso de 15 minutos); 5) restaurar su aplicación desde la copia de seguridad. Voilà: una aplicación no comprada que cree que tiene licencia. Para evitar esto, tiene que haber al menos una verificación de licencia después de que se cierre la ventana de devolución. Debo añadir que la pregunta es si la política propuesta tiene más piratería u otros riesgos que la política predeterminada que viene con LVL (que requiere controles cada pocos días, para siempre). –

+1

¿Por qué no simplemente demorar la verificación de licencia (permitiendo la funcionalidad completa) durante ~ 20 minutos después del primer lanzamiento? Entonces estás fuera de la ventana de retorno. – kcoppock

+0

@kcoppock - Sí, probablemente sea una buena idea. Es consistente con las recomendaciones publicadas [aquí] (http://www.androidpolice.com/2010/08/24/response-to-a-response-more-on-googles-android-licensing-service/). La verdadera pregunta es, ¿confiar en una sola respuesta LICENCIADA entregada después del período de vencimiento nos expone a más riesgos que, por ejemplo, el comportamiento predeterminado de 'ServerManagedPolicy'. –

Cuestiones relacionadas