A medida que tu app se vuelve más popular, también atrae la atención no deseada de usuarios maliciosos que podrían querer abusar de ella. En este tema, se describen las recomendaciones que debes seguir para evitar ataques de ese tipo a la integración de facturación y disminuir el impacto del abuso en tu app.
Transfiere la lógica sensible a tu backend
En la medida que lo permita el diseño de tu app, transfiere la lógica y los datos sensibles a un servidor de backend que controles tú mismo. Cuantos más datos y lógica tengas en un dispositivo de frontend, más vulnerable será a las modificaciones o manipulaciones.
Por ejemplo, un juego de ajedrez en línea debe validar todos los movimientos en el backend, en lugar de confiar en que el frontend siempre envía movimientos legales.
Además, si encuentras vulnerabilidades o problemas de seguridad, en función del diseño de tu sistema, es más fácil depurar, corregir y lanzar actualizaciones en el backend que en el frontend.
Cómo verificar las compras antes de otorgar derechos
Un caso especial de lógica y datos sensibles que se debe procesar en el backend es la verificación y la confirmación de compras. Después de que un usuario haya realizado una compra, debes hacer lo siguiente:
- Envía el elemento
purchaseToken
correspondiente a tu backend. Esto significa que debes mantener un registro de todos los valores depurchaseToken
correspondientes a todas las compras. - Verifica que el valor
purchaseToken
de la compra actual no coincida con ningún valorpurchaseToken
anterior.purchaseToken
es globalmente único, por lo que puedes usar este valor de forma segura como clave primaria en tu base de datos. - Usa los extremos
Purchases.products:get
oPurchases.subscriptionsv2:get
de la API de Google Play Developer para verificar con Google que la compra sea legítima. - Si es legítima y no se usó en el pasado, puedes otorgar de manera segura el derecho a la suscripción o al elemento integrado en la app.
- Para las suscripciones, cuando
linkedPurchaseToken
se establece enPurchases.subscriptionsv2:get
, también debes quitarlinkedPurchaseToken
de tu base de datos y revocar la autorización otorgada alinkedPurchaseToken
para garantizar que varios usuarios no tengan derecho a la misma compra. - Debes otorgar derechos solamente si el estado de la compra es
PURCHASED
. Asegúrate de procesar correctamente las compras dePENDING
. Si hay un aumento en las compras deCANCELED
, es posible que los derechos se otorguen cuando la compra aún esté en el estadoPENDING
. Para obtener más información, consulta la sección Cómo administrar transacciones pendientes. Después de otorgar derechos, si deseas consumir y confirmar un producto consumible, usa la API de
Purchases.products:consume
Play Developer en el servidor de backend seguro. Para confirmar un producto no consumible o una suscripción, llama al extremo relevante de la API de Play Developer, ya seaPurchases.products:acknowledge
oPurchases.subscriptions:acknowledge
en tu servidor de backend seguro. Se requiere una confirmación de recepción, ya que notifica a Google Play que se le otorgó al usuario el derecho a la compra. Debes confirmar la compra inmediatamente después de otorgar el derecho.Ten en cuenta que, si bien puedes confirmar o consumir la compra del cliente a través de tu app, las APIs del servidor proporcionan protección adicional contra problemas, como conectividad de red deficiente o actividad maliciosa. Por ejemplo, ten en cuenta si un usuario compró un artículo desde tu app, pero perdió la conexión de red mientras se validaba la compra. Sin la confirmación del servidor, es posible que deba volver a acceder a través de la app para completar el proceso de confirmación. De lo contrario, si el usuario no vuelve a acceder dentro de tres días, la compra se reembolsa automáticamente debido a la falta de confirmación de la compra. La confirmación del servidor evita esta situación, ya que envía una confirmación en cuanto Google Play le notifica al servidor que la compra es válida.
Para obtener más información sobre la confirmación de compras y el consumo, consulta Cómo procesar las compras.
Cómo proteger tu contenido desbloqueado
Para evitar que usuarios malintencionados redistribuyan tu contenido desbloqueado, no lo integres a tu archivo APK. Como alternativa, toma una de las siguientes medidas:
- Usa un servicio en tiempo real para entregar tu contenido, como el canal de contenido. Entregar contenido mediante un servicio en tiempo real también te permite mantenerlo actualizado.
- Usa un servidor remoto para entregar tu contenido.
Cuando entregas contenido desde un servidor remoto o en tiempo real, puedes almacenar el contenido desbloqueado en la memoria o la tarjeta SD del dispositivo. Si almacenas contenido en una tarjeta SD, asegúrate de encriptarlo y de usar una clave específica del dispositivo.
Cómo detectar y administrar compras anuladas
Las compras anuladas son compras canceladas, revocadas o reembolsadas. Si una compra anulada le otorgó a un usuario elementos integrados en tu app u otro tipo de contenido, puedes usar la API de Compras anuladas para obtener el motivo por el cual se anuló la compra y cualquier contenido asociado que puedas recuperar.
Las compras de suscripciones y elementos integrados en la app pueden anularse por diversos motivos, como los siguientes:
- El usuario, el desarrollador o Google cancelan una compra. Para las suscripciones, ten en cuenta que esto se refiere a cancelar la compra de una suscripción, en lugar de cancelar la suscripción en sí misma.
- Se reembolsa una compra.
- El desarrollador de la app cancela o reembolsa el pedido de un usuario, y verifica la opción "revocar" en la consola.
Según el motivo de la compra anulada y teniendo en cuenta los datos de comportamiento de los usuarios anteriores, puedes decidir qué hacer. Te recomendamos que implementes una o más de las siguientes opciones:
- Recuperar contenido: Cuando se anula una compra, puedes recuperar los elementos no utilizados como si nunca se hubieran comprado. Por ejemplo, si se anula la compra de una moneda en un juego, puedes recuperar la moneda que ya se le otorgó al usuario. En caso de que el usuario ya haya gastado la moneda, procura establecer el saldo en negativo y limita la actividad de la app y las compras futuras hasta que el saldo sea positivo.
- Implementar advertencias múltiples: Procura tomar medidas menos drásticas para los usuarios que infrinjan las normas por primera vez, como mostrar advertencias en la app. Para los infractores reincidentes, toma medidas más severas.
- Inhabilitar temporalmente las compras: Al igual que la implementación de advertencias múltiples, considera la posibilidad de inhabilitar compras para los usuarios que tengan compras anuladas hasta que puedas investigar más exhaustivamente el motivo de las anulaciones.
- No permitir el acceso a tu app de forma temporal o permanente: En casos extremos de actividades maliciosas repetidas, procura prohibir el acceso a tu app de manera temporal o permanente.
- Realizar llamadas frecuentes a la API de Compras anuladas: Si detectas una o más compras anuladas, procura realizar llamadas más frecuentes a la API de Compras anuladas para recuperarlas antes de que el usuario las consuma. Puedes encontrar más información sobre las cuotas de la API de Compras anuladas en la documentación de la API.
Ayuda a Google a detectar fraudes antes de que sucedan
Algunos tipos de fraude se relacionan con usuarios malintencionados que crean varias Cuentas de Google y dentro la app para ocultar su actividad.
Usa los métodos setObfuscatedAccountId
y setObfuscatedProfileId
en el compilador de BillingFlowParams
para ayudar a que Google mapee Cuentas de Google a cuentas dentro de apps.
Google utiliza esos datos para detectar comportamientos sospechosos y bloquear algunos tipos de transacciones fraudulentas antes de que se completen.
Cómo tomar medidas contra incumplimientos de marca y derechos de autor
Si usas un servidor remoto para entregar o administrar contenido, haz que la app verifique el estado de compra del contenido desbloqueado cada vez que un usuario acceda a él. Esto te permite revocar el uso cuando es necesario y minimizar los casos de piratería. Si ves que tu contenido se redistribuye en Google Play, asegúrate de actuar con rapidez y determinación. Para obtener más información, consulta la página de Preguntas frecuentes sobre los derechos de autor del Centro de ayuda sobre derechos de autor.