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:
- reducen drásticamente los requisitos de conectividad en comparación con
ServerManagedPolicy
; - 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.
- 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.
- 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.
- 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.
- 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.
- 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
).
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
@Yakk - No estoy seguro del problema que está viendo. ¿Es que al usuario se le debe ofrecer control sobre el tiempo del segundo cheque? –
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