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

Rechazo en App Store

Directriz 4.5.4 (notificaciones push): consentimiento de marketing y baja para apps web empaquetadas

Apple solo permite notificaciones push de marketing cuando los usuarios las aceptan de forma explícita mediante un texto de consentimiento en tu app, y solo si pueden darse de baja dentro de la app. El diálogo de permisos de iOS no es ese consentimiento. Aquí verás cómo separar el push transaccional del de marketing, recoger el consentimiento en tu app web y conectarlo a la configuración de push de WebViewGold.

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é dice la 4.5.4

La Directriz 4.5.4 fija cuatro reglas para las notificaciones push. La app debe funcionar sin ellas. No deben contener información personal sensible ni confidencial. No deben usarse para promociones ni marketing directo salvo que el usuario lo haya aceptado de forma explícita mediante un texto de consentimiento mostrado en la interfaz de tu app. Y la app debe ofrecer una forma de darse de baja de esos mensajes. Apple añade que el abuso puede costarte los privilegios de push.

Fíjate en lo que no se exige: los mensajes que el usuario espera, como "tu pedido se ha enviado" o "tienes una respuesta nueva", no necesitan más consentimiento que el permiso del sistema. La aceptación se refiere específicamente a promociones y marketing. La visión general de las notificaciones push cubre la configuración general.

Qué suele decir el mensaje de rechazo

Los revisores suelen decir que la app usa, o parece tener previsto usar, notificaciones push con fines promocionales sin consentimiento explícito, o que no hay forma de darse de baja en la app. Lo detectan en la descripción ("recibe ofertas exclusivas por push"), en una pantalla de bienvenida que promete ofertas o en una notificación de prueba. Una segunda variante dice que la app obliga a permitir las notificaciones antes de poder continuar, lo que choca con la primera frase de la 4.5.4.

Por qué tropiezan aquí las apps hechas con vibe coding

El aviso de permisos en el primer arranque

Con askforpushpermissionatfirstrun en true, iOS pregunta antes de que los usuarios hayan visto nada. Quien toca Permitir acepta las notificaciones, no el marketing.

"Activa las notificaciones para continuar"

Los onboardings generados por IA suelen bloquear el siguiente paso hasta que se concede el permiso. Eso convierte el push en obligatorio, y la 4.5.4 no lo permite.

Recordatorios de carrito abandonado

El ejemplo de push local de la documentación de WebViewGold es un recordatorio de carrito con sendlocalpushmsg://. Útil, pero promocional: envíalo solo a usuarios que aceptaron el marketing.

Un mismo tema para todos

firebaseTopic en Config.swift suscribe la app a un único tema de Firebase, así que todas las instalaciones con push de Firebase están en él. Bien para avisos de servicio; usarlo para promociones envía marketing a personas que nunca lo aceptaron.

Textos que prometen ofertas

A las descripciones y pantallas de bienvenida escritas por una IA les encanta "no te pierdas ninguna oferta especial". Los revisores lo leen como un plan de marketing sin consentimiento.

¡Gran trabajo! Nunca tuve que usar código para nada, pero logré trabajar con esto y tener mi App lista. ¡Fácil y rápido! ¡También con gran ayuda de los creadores!

Lucas DuBois · CodeCanyon

¿Transaccional o de marketing?

MensajeTipoNecesita aceptar marketing
Tu pedido se ha enviadoTransaccionalNo
Anna ha respondido a tu comentarioActividad que sigue el usuarioNo
Recordatorio que creó el usuario (entrenamiento a las 7:00)Solicitado por el usuarioNo
Alerta de precio que el usuario creó para un productoSolicitado por el usuarioNo
20% de descuento este fin de semanaPromociónSí
Tu carrito te esperaPromociónSí
Te echamos de menos: vuelve y llévate un crédito gratisMarketing de reactivaciónSí
Novedad: ya llegó el modo oscuroNoticias del productoTrátalo como marketing

Configura el consentimiento y la baja con el push de WebViewGold

Funciona con OneSignal, Firebase y Pushwoosh; el consentimiento vive en tu propia base de datos.

  1. Deja de preguntar en el primer arranque

    Pon askforpushpermissionatfirstrun en false en Config.swift (en Android, requirePush en false en Config.java). La documentación de notificaciones push describe ambas opciones.

  2. Muestra tu propia pantalla de notificaciones en el momento adecuado

    Tras el registro o la primera acción con sentido, explica qué vas a enviar. Ofrece dos opciones separadas: "Avisos de pedidos y de la cuenta" y "Ofertas y novedades". La opción de marketing está desactivada por defecto y lleva su propia frase de consentimiento.

  3. Lanza el diálogo del sistema desde esa pantalla

    Cuando el usuario active cualquiera de las dos opciones, navega a registerpush:// e iOS mostrará su diálogo de permisos en ese momento, con contexto. En Android, esto requiere al menos un servicio de push activado en Config.java.

  4. Guarda el consentimiento junto al ID de push

    Lee el ID de suscripción: getonesignalplayerid:// rellena onesignalplayerid, getfirebaseplayerid:// rellena firebaseplayerid y getpushwooshid:// rellena pushwooshplayerid. Para OneSignal y Firebase, autoInjectVariable en true inyecta el ID automáticamente. Guárdalo con las elecciones del usuario, la versión del texto de consentimiento y una marca de tiempo, y menciona los tokens de push en tu política de privacidad (guía de política de privacidad y etiquetas).

  5. Envía marketing solo a quien lo aceptó

    Tu backend selecciona los destinatarios desde la base de datos: la API de OneSignal puede dirigirse a IDs de suscripción concretos, y Firebase puede enviar a tokens individuales o a un tema al que tu servidor suscribe los tokens que aceptaron. No uses nunca el firebaseTopic compartido para promociones. La comparativa de proveedores de push explica las opciones de segmentación de cada servicio.

  6. Añade la baja en los ajustes

    Un interruptor de "Ofertas y novedades" en tu página de ajustes que actualice la base de datos al instante. Muestra el estado del sistema con checkNativePushPermissions://, que establece nativePushEnabled, y enlaza a settingsapp:// para quien quiera desactivar todas las notificaciones (documentación de Open App Settings).

  7. Condiciona los recordatorios locales promocionales

    Programa los recordatorios de carrito o de reactivación con sendlocalpushmsg:// solo cuando el consentimiento de marketing sea true. Cuando un usuario se dé de baja, llama a sendlocalpushmsg://push.send.cancel; cancela todas las notificaciones locales programadas, así que vuelve a programar los recordatorios que pidió el usuario.

Pantalla de consentimiento y baja en JavaScript

Una versión mínima para cualquier stack web; los nombres de los endpoints son marcadores para tu propio backend. ¿Lo creaste con Lovable? La guía de notificaciones push para Lovable cubre la configuración del proveedor alrededor de esto.

javascript
// Pantalla de notificaciones tras el registro (Config.swift: askforpushpermissionatfirstrun = false)
var CONSENT_TEXT_V2 = "Envíame ofertas y novedades por notificación push. Puedo desactivarlo cuando quiera en Ajustes.";

async function saveNotificationChoices(updates, offers) {
  await fetch("/api/me/notification-prefs", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      transactional: updates,
      marketing: offers,                                    // false salvo que el usuario lo active
      marketing_consent_text: offers ? CONSENT_TEXT_V2 : null,
      marketing_consent_at: offers ? new Date().toISOString() : null
    })
  });
  if (updates || offers) {
    window.location.href = "registerpush://";              // diálogo de permisos de iOS, con contexto
  }
}

// En cargas de página posteriores: guarda el ID de push cuando exista (autoInjectVariable = true)
if (typeof onesignalplayerid !== "undefined" && onesignalplayerid) {
  fetch("/api/me/push-id", { method: "POST", headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ provider: "onesignal", id: onesignalplayerid }) });
}

// Página de ajustes: interruptor de baja
async function setOffers(enabled) {
  await fetch("/api/me/notification-prefs", { method: "PATCH", headers: { "Content-Type": "application/json" },
    body: JSON.stringify({ marketing: enabled }) });
  if (!enabled) {
    window.location.href = "sendlocalpushmsg://push.send.cancel"; // borra TODOS los recordatorios locales programados
  }
}

Plantilla de respuesta para el Centro de resolución

Describe el flujo de consentimiento paso a paso y dile al revisor exactamente dónde está la baja. La plantilla se queda en inglés porque App Review lee en inglés.

Respuesta en el Centro de resolución (sustituye las partes entre corchetes)
Hello App Review team,

Thank you for reviewing [App name] [version] ([build]).

We changed how the app handles push notifications to comply with Guideline 4.5.4:

1. The app no longer asks for notification permission at launch, and every feature works when notifications are declined.
2. After sign-up, a notification screen offers two separate choices: "Order and account updates" and "Offers and news". The marketing option is off by default and shows this consent text: "[consent sentence]".
3. Only users who switch on "Offers and news" receive promotional notifications. Promotional local reminders are also sent only with this consent.
4. Users can opt out at any time in [Settings > Notifications > Offers and news]. The same screen links to the iOS notification settings.

To verify: log in with the demo account from App Review Information and open [Settings > Notifications]. [New build: [number].]

Best regards,
[Name], [email]

Lista de comprobación

  • askforpushpermissionatfirstrun está en false; el diálogo de permisos aparece después de que el usuario haya visto el valor de la app.
  • La app funciona por completo con las notificaciones rechazadas.
  • El consentimiento de marketing es una opción aparte, sin marcar, con su propio texto en tu interfaz.
  • El consentimiento se guarda con la versión del texto y una marca de tiempo, junto al ID de push.
  • Los envíos de marketing y los recordatorios locales promocionales van solo a usuarios que los aceptaron; firebaseTopic no se usa para promociones.
  • Un interruptor de baja en los ajustes, más un enlace a los ajustes de notificaciones de iOS.
  • Ningún dato sensible en los textos de las notificaciones; la descripción no promete nada que no hagas.

Preguntas frecuentes

¿Tocar Permitir en el diálogo de iOS es consentimiento suficiente para el marketing?

No. El diálogo del sistema pide permiso para mostrar notificaciones en general. Apple quiere el consentimiento de marketing en tu propia interfaz, con un texto que diga que se enviarán mensajes promocionales, más una forma de darse de baja dentro de la app.

¿Cuentan las notificaciones locales?

La Directriz 4.5.4 habla de notificaciones push, pero una notificación local promocional se ve igual para los usuarios y para los revisores. Trata los recordatorios de carrito y de reactivación como push de marketing y envíalos solo con consentimiento.

¿Y los usuarios que permitieron las notificaciones antes de la actualización?

Envíales solo mensajes transaccionales hasta que acepten el marketing. Muestra la nueva pantalla de notificaciones una vez después de la actualización, o añade una nota breve en los ajustes que explique la nueva opción "Ofertas y novedades".

¿Puede mi app exigir las notificaciones, por ejemplo una app de alarmas o de guardias?

La app tiene que seguir funcionando sin ellas. Explica con claridad qué se perderá el usuario, ofrece un enlace a los ajustes y déjale continuar.

¿También se aplica el RGPD?

En la UE, los mensajes de marketing suelen necesitar consentimiento también según las normas de protección de datos y de comunicaciones comerciales electrónicas. La misma pantalla de aceptación, guardada con una marca de tiempo y el texto de consentimiento, ayuda con ambas cosas. Si el marketing es clave para tu negocio, consulta tu caso concreto con un abogado.

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.