Permisos no justificados: cómo quitar los permisos que no usas de tu app de WebViewGold y superar los formularios de declaración
La plantilla de WebViewGold admite muchas funciones nativas, y los permisos de las que no uses deben desaparecer antes del envío. Google comprueba si cada permiso tiene un propósito visible en la app. Aquí verás qué flag de Config.java y qué entrada de AndroidManifest.xml controla cada uno, y qué permisos necesitan además un formulario de declaración.
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
9:41
Tu app
Tu appYa en tu bolsillo
App Store · Google Play Aprobada
La regla detrás del rechazo
La política de permisos de Google dice que una app solo puede solicitar acceso a los datos y capacidades que necesita para funciones que el usuario ve y espera. Algunos permisos están además restringidos: la ubicación en segundo plano, el acceso a todas las apps instaladas, el acceso amplio a archivos, los SMS y registros de llamadas, y el acceso amplio a fotos o vídeos requieren una declaración en la Play Console, un aviso destacado dentro de la app antes de la solicitud y, en algunos casos, un vídeo que muestre la función. Solicitarlos sin una función que lo justifique lleva a un rechazo o, en una app existente, a un aviso de retirada con fecha límite.
Una app web empaquetada suele necesitar muy pocos permisos: internet, notificaciones si usas push, y cámara o ubicación solo si tu app web llama realmente a esas APIs. Todo lo demás son capacidades de la plantilla que puedes desactivar.
Permiso por permiso: cuándo está justificado y dónde desactivarlo
Permiso
Justificado cuando
Ajuste de WebViewGold
Ubicación (primer plano)
Tu app web llama a la API de geolocalización HTML5 para una función visible (buscador de tiendas, check-in, ruta)
requireLocation en Config.java; ponlo en false y borra las entradas de ubicación de AndroidManifest.xml si no lo usas
Ubicación en segundo plano
La ubicación se necesita con la app cerrada y es la función principal (seguimiento de repartos, registro deportivo); requiere una declaración y un vídeo de demostración
requireBackgroundLocation, más los bloques FOREGROUND_SERVICE_LOCATION y GPSService de AndroidManifest.xml; en caso contrario, déjalo todo comentado
Cámara
Escaneo de códigos QR o de barras, escáner de documentos, subida de fotos desde la cámara
requireCamera; pon filePickerMode en solo galería si nunca necesitas la cámara
Micrófono
Notas de voz, grabación de audio, chat de voz en tu app web
requireRecordAudio; false en casi todas las apps web
Almacenamiento / fotos
Descargas de archivos o subidas desde la galería
requireStorage; los targets modernos usan el selector de fotos del sistema para las subidas, que no necesita un permiso amplio de fotos
Notificaciones
Notificaciones push o push local
Se activa con el push; la solicitud en tiempo de ejecución aparece cuando tu app web la pide mediante registerpush:// o al arrancar
Consultar todos los paquetes
Launchers, gestión de dispositivos, antivirus. Prácticamente nunca en una app web
No forma parte de la plantilla; si aparece en el manifiesto combinado, lo añadió una librería; quítalo como se muestra más abajo
Contactos
Una función visible que importa contactos
Solo está presente si añadiste READ_CONTACTS para la API de contactos
Limpia el manifiesto y las declaraciones
Veinte minutos en Android Studio, o unos cuantos interruptores en el Cloud Builder.
Configura los flags en Config.java
Repasa requireLocation, requireBackgroundLocation, requireCamera, requireRecordAudio y requireStorage y pon cada uno en false salvo que tu app web use la función. La documentación de geolocalización y la de configuración describen cada flag.
Borra las líneas correspondientes de AndroidManifest.xml
Los flags impiden que la app use una capacidad; las entradas del manifiesto son lo que lee Google. Quita las líneas uses-permission de las capacidades que desactivaste, como piden las descripciones de cada ajuste.
Revisa el manifiesto combinado
En Android Studio, abre AndroidManifest.xml y cambia a la pestaña Merged Manifest. Muestra los permisos que aportan las librerías, que es de donde salen sorpresas como el permiso del ID de publicidad o un permiso inesperado de visibilidad de paquetes.
Añade un aviso destacado para lo que quede
Antes de que tu app web lance una solicitud sensible (ubicación, cámara), muestra dentro de la app una breve explicación de por qué la necesitas y qué pasa con los datos. Basta con un modal en tu app web antes de llamar a la API, y también debe figurar en la política de privacidad.
Completa los formularios de declaración
Play Console → App content → Sensitive app permissions (Permisos sensibles de la aplicación) y formularios similares para cualquier permiso restringido que conserves. Describe la función, indica la pantalla y sube el vídeo que se solicita. Si no tienes una función que lo justifique, no lo solicites; quita el permiso.
Recompila, verifica y sube
Compila el bundle, instálalo desde el canal de pruebas internas y recorre los flujos que deberían pedir un permiso. Después revisa el App bundle explorer (Explorador de app bundles) de la Play Console, que enumera los permisos que Google extrajo de tu bundle, antes de publicar.
Mi WebView de iOS finalmente está aprobada. ¡Gracias!
Si una dependencia aporta un permiso que no puedes justificar, el manifest merger puede eliminarlo. Añade el namespace tools al elemento manifest si falta.
Desactivar una función en Config.java pero dejar el permiso en AndroidManifest.xml. Google lee el manifiesto.
Mantener la ubicación en segundo plano "porque la plantilla la trae". Necesita una declaración, un vídeo y un caso de uso principal.
Pedir la ubicación al arrancar, antes de que el usuario entienda por qué. Lanza la API HTML5 desde la pantalla de la función.
Una política de privacidad que no menciona la cámara ni la ubicación aunque la app las solicita.
Textos de permisos en la ficha que prometen funciones que la app no tiene, lo que además choca con las reglas sobre afirmaciones engañosas.
Preguntas frecuentes
¿Rechaza Google una app solo por declarar un permiso que nunca solicita?
Sí, es exactamente el caso que cubre esta política. Un permiso declarado sin una función visible se considera injustificado, aparezca o no la solicitud alguna vez.
Mi app web usa la API de geolocalización solo en una página. ¿Es justificación suficiente?
Sí, si la función es real y visible y la app pide el permiso en contexto. Descríbela en la declaración si te la piden y menciona la ubicación en la política de privacidad.
¿Por qué la Play Console muestra un permiso que nunca añadí?
Las librerías aportan entradas al manifiesto. El SDK de Google Mobile Ads, por ejemplo, añade el permiso del ID de publicidad. La pestaña Merged Manifest muestra el origen, y tools:node="remove" elimina lo que no puedas justificar.
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.
Sin Mac, sin Xcode, sin Android Studio: configura en el navegador, compilamos ambas apps en la nube y las entregamos a App Store Connect y a Play Console.
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.
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.