Cómo combatir los casos de fraude y abuso

Google Play se dedica a garantizar la seguridad de los usuarios y los desarrolladores. Entendemos que crear un negocio de apps próspero se basa en una plataforma confiable que proteja tu retorno de la inversión defendiéndote de forma proactiva contra los actores maliciosos.

En este documento, se describen las recomendaciones para evitar ataques en tu integración de facturación y disminuir 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 cuándo varios dispositivos realizan compras en la misma cuenta en un período corto.
  • Consumo de backend: Las herramientas como Purchases.products:consume transfieren 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.

Evita el spoofing de ubicación

Google Play proporciona protecciones integradas para evitar que los actores maliciosos usen ubicaciones falsas para aprovechar las diferencias regionales de divisas (también conocido como spoofing de ubicación), abusar de las promociones y los incentivos de suscripción, 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 de la API de Google Play Developer para verificar con Google que la compra sea legítima.
  • Si crees que la compra es legítima, no se usó ni procesó en el pasado y el usuario pasa todas tus verificaciones de elegibilidad y fraude, puedes otorgar de manera segura el derecho a la suscripción o al elemento integrado en la app.
    • Verificaciones de elegibilidad y abuso: Verifica que el usuario aún sea apto para el elemento. Si configuraste el flujo de facturación con obfuscatedAccountId o obfuscatedProfileId, verifica que la asignación de compra coincida con la cuenta de usuario esperada en tu sistema. Realiza cualquier verificación adicional de abuso, riesgo o seguridad que requiera tu backend.
    • Reembolsos explícitos para compras ilegítimas: Si la compra no pasa tus verificaciones de validación o abuso, no otorgues derechos. En lugar de permitir que la compra se reembolse automáticamente debido a la falta de confirmación (que es ambigua, ya que también puede deberse a un tiempo de espera de procesamiento), reembolsa explícitamente la compra con el extremo Orders:refund (o una API de Play Developer similar) con el parámetro revoke establecido en true. Si estableces el parámetro revoke, se garantiza que se revoque el acceso para que el usuario ya no tenga derecho a la compra y se le dé a Google Play un indicador claro de que el desarrollador rechazó la compra.
  • Para las suscripciones, cuando se establece linkedPurchaseToken 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 de PENDING. Si hay un aumento en las compras de CANCELED, es posible que los derechos se otorguen cuando la compra aún esté en el estado PENDING. Si deseas 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 Play Developer Purchases.products:consume 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 un feed 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 un servicio en tiempo real, puedes almacenar el contenido desbloqueado en la memoria o en la tarjeta SD del dispositivo. Si almacenas contenido en una tarjeta SD, asegúrate de encriptarlo y de usar una clave de encriptación 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 tu 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 (incluidas las compras canceladas automáticamente no confirmadas) 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 apps 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 aplicación. 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 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 de Voided Purchases.

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 setObfuscatedAccountId y setObfuscatedProfileId métodos 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 marcas y derechos de autor

Si usas un servidor remoto para entregar contenido o administrarlo, 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 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.