Estoy intentando implementar un sistema para actualizar/desbloquear varias funciones de mi aplicación usando compras "administradas" con facturación en la aplicación, y me atasco por la falta de documentación o ejemplos detallados.¿Cómo puedo gestionar de forma segura las transacciones de facturación en la aplicación en un servidor externo?
propósito de mi aplicación es para recuperar/analizar y visualizar los datos de mi propio servidor, y la documentación sobre http://developer.android.com/guide/market/billing/billing_best_practices.html estados:
Si está utilizando un servidor remoto para entregar o administrar el contenido, han verificar su aplicación el estado de compra del contenido desbloqueado cada vez que un usuario accede al contenido.
Mi pregunta es, ¿cuál es la mejor manera de ir sobre esto en términos de flujo de trabajo actual?
Por lo que puedo decir, en la compra exitosa almacenaría la información de compra en mi servidor, así como a nivel local en la aplicación. Cuando se ejecuta la aplicación, enviaría la ID de la orden a mi servidor y el servidor verificará si la orden es válida (primero verificando que la orden exista en la base de datos de mi servidor y, en segundo lugar, verificando si no he revocado manualmente la orden para cualquier razón).
Si eso se verifica, el servidor enviaría una respuesta a la aplicación de que las características solicitadas están "licenciadas", y la aplicación proporcionaría las características/contenido desbloqueado al usuario.
Los problemas obvios que puedo ver con esto son:
- Un usuario arraigada podría fácilmente con sólo alterar base de datos SQLite de la aplicación local (o cualquier otro método que utilizo a la información de pedidos de tienda) para inyectar una orden válida de identificación .
- Si el acceso a la red está abajo, o mi servidor está abajo, todavía quiero la aplicación para poder ejecutar (con datos de la caché) con todas las funciones adquiridas por el usuario.
maneras potenciales de todo el primer problema que puedo ver suponer el envío de algún tipo de identificador de dispositivo con la solicitud de verificación y monitoreo que al final de mi servidor - revocar la orden si un gran número de dispositivos están accediendo a la orden en el un corto período de tiempo.
Para el segundo problema, que no se puede averiguar una solución adecuada. Inicialmente pensé que cada vez que la verificación sea exitosa, se almacenará la hora en que se realizó esta verificación. Luego, la aplicación continuará ejecutándose con las características desbloqueadas, por ejemplo, 48 horas después de la última verificación exitosa. El problema con eso es, ¿cómo puedo almacenar de forma segura este valor de tiempo? Nuevamente, los usuarios rooteados podrían simplemente alterar el valor y la aplicación no sería sabia.
¿Alguien diseñó un sistema basado en servidor para la gestión de compras de facturación en la aplicación y puede ofrecer algunas sugerencias?