Google Play se dedica a garantizar la seguridad de los usuarios y los desarrolladores. Entendemos que crear un negocio de aplicaciones próspero depende de una plataforma confiable, una que proteja tu retorno de la inversión defendiéndote de forma proactiva contra los actores maliciosos.
En este documento, se describen recomendaciones para evitar ataques en tu integración de facturación y reducir el impacto del abuso en tu app.
Mejora tus protecciones
Las siguientes APIs y herramientas pueden mitigar los riesgos en tu app:
- API de Voided Purchases: Revoca el acceso a los pedidos anulados.
- ID de cuenta ofuscado: Ayuda a detectar cuando varios dispositivos realizan compras en la misma cuenta en un período corto.
- Consumo de backend: Las herramientas como Purchases.products:consume trasladan la lógica empresarial a tus backends seguros, lo que evita la manipulación del cliente. Además de usar estas APIs de la plataforma, adopta las siguientes prácticas recomendadas para proteger aún más tus integraciones contra el acceso no autorizado.
Cómo evitar el spoofing de ubicación
Google Play proporciona protecciones integradas para evitar que los agentes maliciosos usen ubicaciones falsas para aprovechar las diferencias regionales de las monedas (también conocido como suplantación de ubicación), abusar de las promociones y los incentivos de suscripciones, y realizar estafas con tarjetas de regalo.
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.
Verifica 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 purchaseToken correspondiente a tu backend. Esto significa que debes mantener un registro de todos los valores de purchaseToken correspondientes a todas las compras.
- Verifica que el valor de purchaseToken de la compra actual no coincida con ningún valor de purchaseToken anterior. purchaseToken es globalmente único, por lo que puedes usar este valor de forma segura como clave principal en tu base de datos.
- Usa los extremos Purchases.products:get o Purchases.subscriptionsv2:get en 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 en Purchases.subscriptionsv2:get, también debes quitar linkedPurchaseToken de tu base de datos y revocar la autorización otorgada a linkedPurchaseToken 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 pendientes. Si hay un aumento en las compras con el estado CANCELED, es posible que los derechos se otorguen cuando la compra aún esté en el estado PENDING. Para obtener más información, consulta 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 endpoint de API relevante de Play Developer, ya sea Purchases.products:acknowledge o Purchases.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.
Detecta y administra compras anuladas
Las compras anuladas son compras canceladas, revocadas o reembolsadas. Si una compra anulada le otorgó a un usuario elementos integrados en la app u otro tipo de contenido, puedes usar la API de Voided Purchases 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 (incluidas las compras con cancelación automática no procesadas). 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 del 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.
Realiza llamadas frecuentes a la API de Voided Purchases: Si detectas una o más compras anuladas, procura realizar llamadas más frecuentes a la API de Voided Purchases para recuperarlas antes de que el usuario las consuma. Puedes encontrar más información sobre las cuotas de la API de Voided Purchases en la documentación de la API.
Ayuda a Google a detectar posibles fraudes antes de que se concreten
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 Google a correlacionar las Cuentas de Google con las cuentas dentro de la app.
Google utiliza estos datos para detectar comportamientos sospechosos y bloquear algunos tipos de transacciones fraudulentas antes de que se completen.
Cómo tomar medidas contra incumplimientos de marcas y derechos de autor
Si usas un servidor remoto para entregar o administrar contenido, haz que tu app verifique el estado de compra del contenido desbloqueado cada vez que un usuario acceda a él. Esto te permite revocar el uso cuando sea necesario y minimizar la 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 derechos de autor en el Centro de ayuda correspondiente.