Saltar al contenido
WebViewGold Del vibe coding a la App Store
Español
Consigue WebViewGold

Rechazo en Google Play

Permisos de servicios en primer plano en Google Play: completa la declaración o elimina el servicio

Desde Android 14, cada servicio en primer plano tiene un tipo declarado, y Google pide a las apps que se dirigen a Android 14 o posterior que justifiquen cada tipo en la Play Console con una descripción y un vídeo. Una app web empaquetada típica no necesita ningún servicio en primer plano. Si aparece uno en tu bundle, averigua de dónde viene y después quítalo o decláralo con un vídeo que coincida con el caso de uso.

Desde $109 de pago único por plataforma, o deja que nuestro equipo lo haga todo desde $698.

  • Garantía de aprobación – o te devolvemos el dinero en 14 días
  • Sin programar
  • Pago único, actualizaciones gratuitas
  • Soporte humano 24/7
  • Hecho en Alemania desde 2014 · ISO 27001

Qué cambió con Android 14 y qué revisa Google

Un servicio en primer plano es un trabajo que una app sigue haciendo mientras el usuario está en otra parte, con una notificación persistente que lo hace visible: reproducir música, la navegación, la grabación de un entrenamiento, una llamada. Desde Android 14, cada servicio en primer plano debe declarar un tipo (location, mediaPlayback, dataSync, camera, microphone, health, phoneCall y algunos más) y la app debe tener el permiso FOREGROUND_SERVICE_* correspondiente. Algunos tipos necesitan además el permiso de tiempo de ejecución subyacente, como el acceso a la ubicación para el tipo location.

Google Play añade encima un paso de revisión. Las apps que se dirigen a Android 14 o posterior y usan servicios en primer plano completan la declaración de servicios en primer plano en la página App content (Contenido de la aplicación). Para cada tipo describes la función que lo usa, explicas el impacto para el usuario si el sistema aplazara o interrumpiera la tarea, eliges el caso de uso correspondiente de una lista y enlazas un vídeo que muestre los pasos que sigue un usuario para activar la función. Los requisitos de Google para los servicios en primer plano describen el formulario. La expectativa de fondo: el usuario inició la tarea o la percibe con claridad, y la tarea no puede simplemente esperar a más tarde.

Cómo se redacta el rechazo

Hay dos situaciones típicas. Antes de la revisión, la subida o la versión queda bloqueada hasta que indicas si la app usa permisos de servicios en primer plano y declaras cada tipo que usa. Después de la revisión, se rechaza la declaración: el vídeo no muestra la función, el caso de uso seleccionado no coincide con lo que muestra el vídeo o el tipo no está justificado para lo que hace la app. Los desarrolladores que siguen subiendo el mismo tipo de vídeo cuentan que se quedan atrapados en un bucle. La salida es corregir el desajuste entre función, caso de uso y vídeo, o eliminar el servicio.

Tipos de servicio en primer plano que puedes encontrar en una app empaquetada

Tipo y permisoOrigen típicoQué hacer
location / FOREGROUND_SERVICE_LOCATIONEl GPSService de WebViewGold para el seguimiento en segundo plano (requireBackgroundLocation)Consérvalo solo para un seguimiento iniciado por el usuario que sea el núcleo de la app; si no, vuelve a comentar los bloques
mediaPlayback / FOREGROUND_SERVICE_MEDIA_PLAYBACKUna biblioteca de audio o multimediaConsérvalo solo si reproducir audio con la pantalla apagada es una función principal
dataSync / FOREGROUND_SERVICE_DATA_SYNCBibliotecas de sincronización, copia de seguridad o subidaNormalmente, elimínalo; para las transferencias que pide el usuario, Google remite a los trabajos de transferencia de datos iniciados por el usuario
camera, microphone, phoneCallSDK de videollamada o de vozSolo para funciones de llamada reales
health / FOREGROUND_SERVICE_HEALTHBibliotecas de seguimiento de actividad físicaSolo mientras el usuario graba activamente un entrenamiento
specialUseCódigo propio, poco habitualNecesita una justificación por escrito y se revisa; no es un atajo para esquivar un tipo que encaja

¡Una forma estupenda de convertir tu web app en una app nativa! Entrega rápida y una manera genial de llevar tus apps a las tiendas sin tener que desarrollar una app nativa completa.

Kevin Joling · FlightConnections & TrainConnections · Trustpilot

Primero limpia, después declara lo que quede

Una hora para la limpieza y un vídeo por cada tipo que conserves.

  1. Enumera cada servicio y cada permiso

    En Android Studio, abre AndroidManifest.xml, cambia a la pestaña Merged Manifest y busca foregroundServiceType y FOREGROUND_SERVICE. En la Play Console, el App bundle explorer (Explorador de app bundles) enumera los permisos que Google extrajo de tu bundle.

  2. Hazte dos preguntas por entrada

    ¿Lo inicia un usuario y lo percibe el usuario mientras se ejecuta? Si ninguna de las dos se cumple en una función que tu app ofrezca de verdad, el servicio no debería estar en la app.

  3. Quita lo que no necesites

    Para el servicio de ubicación de WebViewGold, pon requireBackgroundLocation en false y comenta los bloques FOREGROUND_SERVICE_LOCATION y GPSService (consulta la documentación de geolocalización para Android). Si viene de una biblioteca, quita el permiso y su servicio con las reglas de abajo y después prueba la función que aporta esa biblioteca; eliminar un servicio al que la biblioteca sigue llamando puede hacer que se bloquee.

  4. Graba un vídeo corto por cada tipo que quede

    Graba la pantalla en un dispositivo real: abre la app, inicia sesión si hace falta, toca el control que inicia la función (por ejemplo un botón Iniciar seguimiento que llama a backgroundlocationon://), muestra la notificación persistente, sal de la app para que se vea que la tarea continúa y después detenla. Súbelo como vídeo no listado de YouTube.

  5. Rellena la declaración

    En la página App content, abre la declaración de servicios en primer plano y, para cada tipo, describe la función en una o dos frases, explica qué se rompe si la tarea se aplaza o se interrumpe, elige el caso de uso que coincide con el vídeo y pega el enlace.

  6. Recompila y sustituye todos los canales

    Version code más alto, bundle nuevo y sustitución de los bundles antiguos en los canales de prueba. Un tipo que hayas quitado no debería necesitar declaración una vez que ningún bundle activo lo contenga. La guía del target API level explica por qué aquí también importa recompilar desde la plantilla actual.

Eliminar un servicio en primer plano que añadió una biblioteca

Copia el nombre de clase exacto de la pestaña Merged Manifest; el de abajo es un marcador de posición. Después, prueba la función de la biblioteca.

xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <!-- Elimina un tipo de servicio en primer plano que la app no usa -->
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC" tools:node="remove" />

    <application>
        <!-- Marcador de posición: usa el nombre de clase que aparece en la pestaña Merged Manifest -->
        <service android:name="com.example.somelibrary.SyncForegroundService" tools:node="remove" />
    </application>

</manifest>

Plantilla: respuestas de la declaración para un servicio de seguimiento de ubicación

Describe una función concreta, con las palabras que usaría un usuario, y haz que el vídeo muestre exactamente estos pasos. La plantilla se queda en inglés porque los revisores de Google la leen en inglés.

Para la declaración de servicios en primer plano, tipo location (adapta los corchetes)
Feature description: When a courier taps Start shift, [App name] starts a location foreground service that shares the courier's position with dispatch until the courier taps End shift. An ongoing notification is shown the whole time.

Impact if deferred or interrupted: Dispatch loses the courier's position during the delivery, customers see wrong arrival times, and orders cannot be reassigned when a courier is delayed. The task cannot be postponed, because the position is only useful in real time.

Use case: [the closest match from the list, for example user-initiated location sharing].

Video: [YouTube link], showing login with the test account from Sign-in details, Start shift, the ongoing notification, the app in the background with tracking active, and End shift.

The same feature is declared in the Location permissions declaration.

Preguntas frecuentes

Mi app no ejecuta nada en segundo plano. ¿Por qué la Play Console pregunta por servicios en primer plano?

Porque en tu bundle hay un permiso FOREGROUND_SERVICE o un servicio con tipo, normalmente aportado por una biblioteca o por un bloque de la plantilla que no necesitas. Búscalo en el manifiesto combinado y elimínalo; si no queda nada, la declaración deja de ser necesaria.

¿Las notificaciones push necesitan un servicio en primer plano?

No. OneSignal, Firebase Cloud Messaging y Pushwoosh entregan las notificaciones a través del sistema sin un servicio en primer plano en tu app, y los recordatorios locales programados tampoco son un caso de uso de servicio en primer plano.

¿Puedo elegir specialUse para saltarme el vídeo?

specialUse está pensado para tareas que ningún otro tipo cubre, y Google revisa la justificación escrita. Usarlo para algo que encaja claramente en otro tipo, como location o media playback, es buscarse un rechazo.

¿Qué hace que falle el vídeo de una declaración?

Empieza a mitad de la función, se salta la acción del usuario que inicia el servicio, muestra un flujo distinto del caso de uso seleccionado o no se puede abrir porque el enlace es privado. Hazlo corto, lineal y visible para cualquiera que tenga el enlace.

¿Puedo evitar la declaración dirigiéndome a una versión antigua de Android?

No. Google exige un target API level reciente para las apps nuevas y las actualizaciones, así que toda app actual se dirige a Android 14 o posterior y necesita la declaración siempre que use servicios en primer plano.

Tres formas de llevar tu app a las tiendas

El mismo resultado, con distinta cantidad de trabajo por tu parte. Las tres incluyen la garantía de aprobación y soporte humano 24/7.

Hazlo tú mismo

$109 por plataforma, pago único

La licencia de WebViewGold: un proyecto de Xcode o Android Studio listo para usar. Pega tu URL, define nombre e icono, activa funciones, compila y envía. Actualizaciones gratuitas para siempre.

Ver planes en la página principal

Full Service

$698 por plataforma $798

Envíanos tu URL y tu icono. Nuestro equipo configura, compila y entrega tu app en 72 horas, en marca blanca y con los proyectos fuente. Ambas plataformas por $1,158.

Detalles del Full Service Con tecnología de WeSetupYourWebViewApp

Precios de la Oferta de invierno válidos hasta el 31 de diciembre de 2026.

¿Listo para lanzar tu app?

Garantía de aprobación en App Store & Google Play – o te devolvemos el dinero en 14 días

¿Prefieres delegarlo? Full Service: configuramos, compilamos y entregamos en 72 horas, desde $698 por plataforma. ¿Preguntas? Chatea con nosotros 24/7.

Los reembolsos se conceden bajo las condiciones indicadas en nuestras FAQ: un rechazo por motivos ajenos al contenido por parte de Apple y/o Google, reclamado dentro de los 14 días posteriores a la compra.