> ## Documentation Index
> Fetch the complete documentation index at: https://documentation.onesignal.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Solicitar permisos push

> Pide permiso de notificación push a los usuarios en el momento adecuado usando soft prompts in-app y el prompt nativo del sistema en iOS y Android.

## ¿Por qué usar un prompt de permiso push?

Para enviar notificaciones push que aparecen como banners, se muestran en la pantalla de bloqueo y reproducen sonidos, tu app primero debe solicitar permiso al usuario. En iOS, Android, Huawei, Amazon y Web, esto implica mostrar un prompt de permiso a nivel del sistema.

<Frame caption="Un dispositivo iOS y Android mostrando el prompt de permiso a nivel del sistema.">
  <img src="https://mintcdn.com/onesignal/jBdBk5XvQR5eKOks/images/docs/7ace2bd5abf90a044c363ec9acb227467b62a7f49fdf0dd2922280dc188f4973-a90c2cc443f5fe9e7c80368c680a16cf1ca6203f7b28a0a6eec212add8510f80-Untitled_design_11.png?fit=max&auto=format&n=jBdBk5XvQR5eKOks&q=85&s=381c6c0ecf9c24cda0e9153fc582e319" alt="iOS and Android system-level push permission prompts side by side" width="1920" height="1080" data-path="images/docs/7ace2bd5abf90a044c363ec9acb227467b62a7f49fdf0dd2922280dc188f4973-a90c2cc443f5fe9e7c80368c680a16cf1ca6203f7b28a0a6eec212add8510f80-Untitled_design_11.png" />
</Frame>

Esta guía es para suscriptores de push de apps móviles. Para web push, consulta [Prompts de permiso web](./permission-requests).

**Requisitos previos:** Una [cuenta de OneSignal](https://dashboard.onesignal.com), una app móvil con el [SDK de OneSignal instalado](./mobile-sdk-setup), y [mensajes in-app habilitados](./in-app-messages-setup).

<Warning>
  iOS permite el prompt de permiso del sistema solo una vez. Android lo permite dos veces. Si el usuario rechaza, deberá habilitar las notificaciones manualmente en la configuración del sistema. Un prompt mal cronometrado puede costarte un suscriptor de forma permanente.
</Warning>

<Tip>
  En iOS, también puedes usar [notificaciones provisionales](./ios-provisional-push-notifications), que se entregan silenciosamente al Centro de notificaciones sin solicitar al usuario — ideal para pruebas o onboarding de baja fricción.
</Tip>

Dado que el prompt del sistema es limitado, tanto [Apple](https://developer.apple.com/design/human-interface-guidelines/managing-notifications) como [Google](https://developer.android.com/training/permissions/requesting) recomiendan encarecidamente explicar el valor de tus notificaciones antes de mostrarlo. Puedes activar el prompt en cualquier momento usando el [método SDK](./mobile-sdk-reference#requestpermission-fallbacktosettings-push-push) `requestPermission()`, pero sin el contexto adecuado, es más probable que los usuarios rechacen — y en iOS, un prompt rechazado no puede mostrarse nuevamente.

El enfoque recomendado es un "soft prompt" — un mensaje in-app personalizado que presenta la solicitud antes del prompt del sistema. Si el usuario acepta, aparece el prompt del sistema. Si rechaza, nada sucede y puedes preguntar de nuevo más tarde.

<Frame caption="Un soft prompt in-app seguido del prompt de permiso push a nivel del sistema.">
  <img src="https://mintcdn.com/onesignal/RWtLFPeffHrC81wI/images/docs/a6d382ca2711ba0e9f013bebe5c420d129fbfbc5ef0b2fbd9cb4bef78c7e9480-mobile-push-optimize-reach.webp?fit=max&auto=format&n=RWtLFPeffHrC81wI&q=85&s=bfbc66b313bd85f944476e8363f1d093" alt="In-app message leading to system push permission prompt" width="1600" height="1058" data-path="images/docs/a6d382ca2711ba0e9f013bebe5c420d129fbfbc5ef0b2fbd9cb4bef78c7e9480-mobile-push-optimize-reach.webp" />
</Frame>

***

## Configurar un prompt de permiso push in-app

<Steps>
  <Step title="Eliminar cualquier prompt de permiso automático">
    Antes de comenzar, asegúrate de que tu app no esté ya activando el prompt push nativo automáticamente:

    * Elimina los métodos `requestPermission()` o `optIn()` si los estás llamando al iniciar la app.
    * Elimina las llamadas nativas de iOS a `requestAuthorizationWithOptions` y cualquier método que genere tokens push.
    * Elimina las llamadas de Android a `requestPermissions` y cualquier método que genere tokens push.

    Además, asegúrate de que estés usando la [última versión del SDK de OneSignal](https://github.com/OneSignal/sdks) en tu app.
  </Step>

  <Step title="Crear o editar el mensaje in-app">
    Ve a **Messages > In-App**, luego:

    * Edita la plantilla predeterminada de Push Permission Prompt, o
    * Haz clic en New Message para crear el tuyo.

    <Frame caption="Edita la plantilla predeterminada de Push Permission Prompt o crea la tuya.">
      <img src="https://mintcdn.com/onesignal/l4Z9oMlZl9nJOS_T/images/push/prompt-for-push-set-up-an-in-app-push-permission-prompt.jpg?fit=max&auto=format&n=l4Z9oMlZl9nJOS_T&q=85&s=80dd758e2587507b2052b2e20df0409e" alt="OneSignal in-app messages list showing the Push Permission Prompt template" width="2616" height="1356" data-path="images/push/prompt-for-push-set-up-an-in-app-push-permission-prompt.jpg" />
    </Frame>

    Establece la audiencia como **Show to all users**. OneSignal filtra automáticamente este mensaje para mostrar solo a los usuarios que no se han suscrito a push, según la acción de clic Push Permission Prompt.

    <Frame caption="Establece la audiencia como 'Show to all users' porque la acción de clic Push Permission Prompt filtra a los usuarios no suscritos.">
      <img src="https://mintcdn.com/onesignal/l4Z9oMlZl9nJOS_T/images/push/prompt-for-push-set-up-an-in-app-push-permission-prompt-show-to-all-users.jpg?fit=max&auto=format&n=l4Z9oMlZl9nJOS_T&q=85&s=e9b2b23e4e7663ee7799fd4a92dbe473" alt="Audience setting configured to show to all users" width="1766" height="678" data-path="images/push/prompt-for-push-set-up-an-in-app-push-permission-prompt-show-to-all-users.jpg" />
    </Frame>
  </Step>

  <Step title="Personalizar el diseño del mensaje">
    Personaliza la apariencia, sensación y redacción para que se ajuste a tu app. Informa a los usuarios qué tipo de notificaciones recibirán y por qué son valiosas.

    Consulta [Diseñar mensajes in-app con arrastrar y soltar](./design-your-in-app-message) o [Diseñar mensajes in-app con HTML](./design-your-in-app-message-with-html) para más detalles.

    <Frame caption="El editor de bloques de mensajes in-app para crear mensajes de opt-in push.">
      <img src="https://mintcdn.com/onesignal/l4Z9oMlZl9nJOS_T/images/push/push-customize-the-message-design.jpg?fit=max&auto=format&n=l4Z9oMlZl9nJOS_T&q=85&s=df030196ba721eedfd4c1ad5af0fa3cd" alt="In-app message block editor with a push opt-in prompt" width="2604" height="1770" data-path="images/push/push-customize-the-message-design.jpg" />
    </Frame>
  </Step>

  <Step title="Agregar la acción de clic de prompt de permiso push">
    Agrega una acción de clic **Push Permission Prompt** a cualquier botón o imagen en tu mensaje. Cuando se toque, se muestra el prompt del sistema.

    <Frame caption="Agregando una acción de clic Push Permission Prompt a un botón.">
      <img src="https://mintcdn.com/onesignal/l4Z9oMlZl9nJOS_T/images/push/push-add-the-push-permission-prompt-click-action.jpg?fit=max&auto=format&n=l4Z9oMlZl9nJOS_T&q=85&s=8ed4971452754851f4ff064121bcb900" alt="Click action dropdown with Push Permission Prompt selected" width="2604" height="1770" data-path="images/push/push-add-the-push-permission-prompt-click-action.jpg" />
    </Frame>

    <Frame caption="El prompt de permiso nativo de iOS activado por la acción de clic.">
      <img src="https://mintcdn.com/onesignal/Z6xkXGfmy814If53/images/docs/e18f7f87a5efaaa5284cf19be8de863c3833379d37b095aef9d015835a694485-prompt-2.webp?fit=max&auto=format&n=Z6xkXGfmy814If53&q=85&s=a484b1c75320beefb83bde20c443f789" alt="iOS native push notification permission prompt" width="1560" height="804" data-path="images/docs/e18f7f87a5efaaa5284cf19be8de863c3833379d37b095aef9d015835a694485-prompt-2.webp" />
    </Frame>

    Si un usuario ya ha denegado el permiso, el botón lo dirigirá a la configuración de notificaciones de tu app.

    <Info>
      Los mensajes in-app con una acción Push Permission Prompt no se muestran a usuarios que ya han permitido notificaciones.
    </Info>
  </Step>

  <Step title="Elegir un activador">
    La audiencia controla quién es elegible para ver el mensaje. Los activadores controlan cuándo se muestra.

    <Frame caption="Opciones de activador para controlar cuándo se muestra el mensaje.">
      <img src="https://mintcdn.com/onesignal/jFWn5xzleD8du3j6/images/docs/52f0d8bef7cac18c1d791ec229d2bd86e995a8e01401c7559e2476fcfecddc6d-Screenshot_2024-10-29_at_2.18.33_PM.png?fit=max&auto=format&n=jFWn5xzleD8du3j6&q=85&s=1b55a4815213ddf3f77db8041e143aa2" alt="In-app message trigger configuration panel" width="1792" height="514" data-path="images/docs/52f0d8bef7cac18c1d791ec229d2bd86e995a8e01401c7559e2476fcfecddc6d-Screenshot_2024-10-29_at_2.18.33_PM.png" />
    </Frame>

    Puedes activar el mensaje:

    * Al abrir la app
    * Después de una cantidad establecida de tiempo de sesión
    * En un evento de usuario específico
    * Programáticamente, usando los [métodos SDK de mensaje in-app](./mobile-sdk-reference) para control total sobre el tiempo y el contexto

    Por ejemplo, para esperar hasta que el usuario haya pasado al menos 5 minutos en la app:

    <Frame caption="Activador configurado para mostrar el mensaje después de 5 minutos de tiempo de sesión.">
      <img src="https://mintcdn.com/onesignal/0qspEXXeJ8zJbkJ-/images/docs/81f8cca652667ae5920dbc8b73cca1b297d9e5f35d5ed4dc23d05640a4c838ae-Screenshot_2024-10-29_at_2.25.25_PM.png?fit=max&auto=format&n=0qspEXXeJ8zJbkJ-&q=85&s=311ed96b93b789bb652cc365b5708d7a" alt="Session duration trigger set to 5 minutes" width="1792" height="624" data-path="images/docs/81f8cca652667ae5920dbc8b73cca1b297d9e5f35d5ed4dc23d05640a4c838ae-Screenshot_2024-10-29_at_2.25.25_PM.png" />
    </Frame>
  </Step>

  <Step title="Programación y frecuencia">
    Controla con qué frecuencia aparece el mensaje:

    * **Solo una vez** — Baja probabilidad de convertir usuarios que no estaban listos la primera vez.
    * **Cada vez que se cumplan las condiciones** — Demasiado agresivo y puede molestar a los usuarios.
    * **Múltiples veces (recomendado)** — Establece un máximo alto (ej. 9999) con un intervalo entre vistas (ej. 2 semanas). Esto vuelve a solicitar a los usuarios no suscritos periódicamente sin ser intrusivo. Ajusta el intervalo según tu caso de uso.

    <Frame caption="Configuración de programación y frecuencia para el mensaje in-app.">
      <img src="https://mintcdn.com/onesignal/Xl2NHJvxakrK4JbL/images/docs/eb61a38c8908fbeba60833eecc357d720e747c37abacffdfe246dbd7758bbaf4-Screenshot_2024-10-29_at_2.28.20_PM.png?fit=max&auto=format&n=Xl2NHJvxakrK4JbL&q=85&s=7a49b641bdeb959dde6edad5ef7de9dc" alt="Schedule configuration showing max displays and gap between views" width="1792" height="910" data-path="images/docs/eb61a38c8908fbeba60833eecc357d720e747c37abacffdfe246dbd7758bbaf4-Screenshot_2024-10-29_at_2.28.20_PM.png" />
    </Frame>

    <Check>
      Actualiza tu mensaje y ponlo en vivo. Monitorea tus estadísticas y ajusta el intervalo entre visualizaciones según sea necesario.
    </Check>
  </Step>
</Steps>

***

## Mostrar programáticamente el prompt de permiso

Puedes activar el prompt de permiso push manualmente usando los [métodos SDK](./mobile-sdk-reference) `requestPermission()` o `optIn()`. Esto es útil para flujos personalizados como:

* Un [centro de preferencias](./preference-center)
* Una pantalla de perfil de usuario
* Eventos específicos dentro de la app

***

## Rastrear permisos push y resultados de prompts

Cuando uses mensajes in-app para solicitar push, puedes rastrear acciones de clic con el [listener de clic de mensaje in-app](./mobile-sdk-reference#addclicklistener-in-app).

Si el mensaje in-app se muestra pero el usuario no hace clic en el botón, usa los [eventos del ciclo de vida del mensaje in-app](./mobile-sdk-reference#addlifecyclelistener) para rastrear impresiones y cierres.

Para rastrear el resultado del prompt de permiso a nivel del sistema en sí, usa el [listener de permiso push](./mobile-sdk-reference#addpermissionobserver-push).

<Info>
  Puedes enviar estos eventos SDK a tu backend o herramienta de analíticas de tu elección.
</Info>

***

## FAQ

### ¿Qué sucede si un usuario rechaza el prompt de permiso push?

En iOS, rechazar el prompt del sistema deshabilita permanentemente las notificaciones push de tu app — el prompt no puede mostrarse nuevamente. En Android, el usuario tiene una oportunidad más (dos en total). Después de usar todos los intentos, el usuario debe volver a habilitar las notificaciones manualmente en **Configuración > Notificaciones** en su dispositivo. El método `requestPermission(fallbackToSettings: true)` del SDK de OneSignal puede redirigir a los usuarios a su configuración de notificaciones si el permiso fue denegado anteriormente.

### ¿Puedo personalizar el prompt de permiso nativo del sistema?

No. Los diálogos de permiso nativos de iOS y Android son controlados por el sistema operativo y no pueden personalizarse. Solo puedes controlar el soft prompt (el mensaje in-app que se muestra antes del prompt del sistema). Usa el soft prompt para explicar el valor de tus notificaciones, establecer expectativas y aumentar la probabilidad de un "Permitir" en el prompt del sistema.

### ¿Puedo seguir solicitando a usuarios con notificaciones provisionales?

Sí. Si usas [notificaciones push provisionales de iOS](./ios-provisional-push-notifications), aún puedes mostrar un soft prompt para convertir a esos usuarios en suscriptores push completos. Cronometra el prompt estratégicamente — después de que el usuario haya visto el valor de tus notificaciones provisionales.

### ¿Cómo vuelvo a solicitar a usuarios que anteriormente rechazaron push?

No puedes mostrar el prompt de permiso del sistema nuevamente una vez que el usuario ha rechazado en iOS (o dos veces en Android). En su lugar, usa el método SDK `requestPermission(fallbackToSettings: true)`, que abre la página de configuración de notificaciones de la app para que el usuario pueda habilitar las notificaciones manualmente. Combínalo con un mensaje in-app que explique por qué las notificaciones son valiosas.

### ¿Cuándo comenzó Android a requerir prompts de permiso?

Android 13 (nivel de API 33) introdujo el permiso de notificación en tiempo de ejecución, que requiere el consentimiento explícito del usuario para las notificaciones push.

* **Lanzado:** Agosto de 2022 (dispositivos Pixel)
* **Requerido para SDK objetivo:** A partir del 31 de agosto de 2023, todas las apps nuevas y actualizaciones en Google Play deben apuntar al nivel de API 33 o superior.
* **Fuente:** [Guía de desarrollador de Google sobre permisos de notificaciones](https://developer.android.com/develop/ui/views/notifications/notification-permission)

***

<Card title="Notificaciones push provisionales de iOS" icon="apple" href="./ios-provisional-push-notifications">
  Envía notificaciones al Centro de notificaciones sin un prompt de permiso previo en iOS 12+.
</Card>
