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 una empresa de apps próspera depende de una plataforma confiable que proteja tu retorno de la inversión mediante la defensa proactiva contra agentes 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, según el diseño de tu sistema, podría ser más fácil depurar, corregir e implementar actualizaciones en el backend en lugar del 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 primaria 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 compras coincida con la cuenta de usuario esperada en tu sistema. Realiza las verificaciones adicionales de abuso, riesgo o seguridad que requiera tu backend.
    • Reembolsos explícitos por compras ilegítimas: Si la compra no pasa tus verificaciones de validación o abuso, no otorgues derechos ni confirmes ni consumas la compra. 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), revoca y reembolsa explícitamente la compra con el purchases.subscriptionsv2:revoke extremo (con "fullRefund": {}) para las suscripciones o el Orders:refund extremo con el parámetro revoke establecido en true para los productos únicos. La revocación de la compra garantiza que el usuario ya no tenga derecho a la compra y le da a Google Play una señal clara 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 pendientes. 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. La entrega de contenido a través de un servicio en tiempo real también te permite mantener actualizado tu contenido.
  • 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 del dispositivo o en la tarjeta SD del dispositivo. Si almacenas contenido en una tarjeta SD, asegúrate de encriptarlo y usar una clave de encriptación específica del dispositivo.

Detecta y administra compras anuladas

Las compras anuladas son compras que se cancelaron, revocaron o para las cuales se generó una devolución del cargo. Si una compra anulada otorgó previamente elementos integrados en la app o algún otro contenido a un usuario, puedes usar la API de Voided Purchases para obtener el motivo por el que se anuló la compra junto con 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. En el caso de las suscripciones, ten en cuenta que esto se refiere a la cancelación de la compra de una suscripción, en lugar de la cancelación de la suscripción en sí.
  • 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 anteriores del usuario, puedes decidir un curso de acción. 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 el caso de que el usuario ya haya gastado la moneda, considera establecer el saldo de la moneda en negativo y limitar la actividad de la app y las compras futuras hasta que el saldo de la moneda sea positivo.

  • Implementación de advertencias múltiples: Considera tomar medidas menos drásticas para los infractores 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.

  • Inhabilitar el acceso a tu app de forma temporal o permanente: Para casos extremos con actividad maliciosa repetida, considera inhabilitar el acceso a tu app, ya sea de forma temporal o permanente.

  • Realiza llamadas frecuentes a la API de Voided Purchases: Cuando detectes una o más compras anuladas, considera realizar llamadas más frecuentes a la API de Voided Purchases para recuperar las compras antes de que el usuario pueda consumirlas. 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 Google a asignar Cuentas de Google a cuentas integradas en la app.

Google usa 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 decisió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.