# Notificación push personalizada en primer plano para iOS

A partir de la versión 6.10.0, puedes integrar el módulo `PushwooshForegroundPush` para personalizar las notificaciones push en primer plano cuando las alertas nativas del sistema iOS están deshabilitadas.

### 1. Deshabilitar las alertas push nativas en primer plano

Añadiendo `Pushwoosh_SHOW_ALERT = false` a tu `Info.plist`.

```xml
<key>Pushwoosh_SHOW_ALERT</key>
<false/>
```

### 2. Integrando el módulo `PushwooshForegroundPush`

**Swift Package Manager**
<img src="/spm-foreground-push-ios.webp" alt=""/>

<Aside type="caution" title="Importante">
Los módulos ```PushwooshFramework```, ```PushwooshCore```, ```PushwooshBridge``` y ```PushwooshLiveActivities``` son **requeridos**.
</Aside>

**Cocoapods**
```bash
# Descomenta la siguiente línea para definir una plataforma global para tu proyecto
# platform :ios, '13.0'

target 'MyApp' do
  # Comenta la siguiente línea si no quieres usar frameworks dinámicos
  use_frameworks!

  pod 'PushwooshXCFramework'
  pod 'PushwooshFramework/PushwooshForegroundPush'

end
```

### 3. Añadir la configuración de `PushwooshForegroundPush` en AppDelegate

```swift
import UIKit
import PushwooshFramework
import PushwooshForegroundPush

@main
class AppDelegate: UIResponder, UIApplicationDelegate, PWMessagingDelegate, PWForegroundPushDelegate {

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
        Pushwoosh.ForegroundPush.foregroundNotificationWith(style: .style1,
                                                            duration: 5,
                                                            vibration: .notification,
                                                            disappearedPushAnimation: .balls)
        
        Pushwoosh.ForegroundPush.delegate = self
        
        return true
    }

    func pushwoosh(_ pushwoosh: Pushwoosh, onMessageReceived message: PWMessage) {
        if let payload = message.payload {
          // Método de Pushwoosh
          Pushwoosh.ForegroundPush.showForegroundPush(userInfo: payload)
        }
    }
}
```

Usando el método `foregroundNotificationWith`

El método `foregroundNotificationWith` te permite mostrar una notificación push personalizada en primer plano con estilo, duración y retroalimentación háptica configurables.

Firma del método (Swift / Objective-C):

```swift
@objc
static func foregroundNotificationWith(
    style: PWForegroundPushStyle,
    duration: Int,
    vibration: PWForegroundPushHapticFeedback,
    disappearedPushAnimation: PWForegroundPushDisappearedAnimation
)
```

`Parámetros:`

1. `style` (`PWForegroundPushStyle`)
* Actualmente, solo `style1` está disponible.

2. `duration` (`Int`)
* Especifica cuánto tiempo se mostrará la notificación antes de desaparecer (en segundos).

3. `vibration` (`PWForegroundPushHapticFeedback`)
* Controla la retroalimentación háptica cuando se muestra la notificación. Opciones disponibles:

```swift
case none           // Sin vibración
case light          // Vibración ligera
case medium         // Vibración media
case heavy          // Vibración fuerte
case soft           // Vibración suave
case rigid          // Vibración rígida
case notification   // Vibración de notificación estándar
```

4. `disappearedPushAnimation` (`PWForegroundPushDisappearedAnimation`)
* Animación de desaparición de la notificación push

```swift
case balls = 0
case regularPush
```

### 4. Implementando el método delegado `didTapForegroundPush`

Para manejar los toques del usuario en las notificaciones push personalizadas en primer plano, implementa el método del protocolo `PWForegroundPushDelegate`:

```swift
// Manejar el toque en la notificación push en primer plano
func didTapForegroundPush(_ userInfo: [AnyHashable : Any]) {
    print("Foreground custom push: \(userInfo)")

    // Realizar cualquier acción, por ejemplo, navegar a una pantalla específica
    // navigateToScreen(for: userInfo)
}
```

Notas:

* Este método se llama cuando el usuario toca una notificación push personalizada en primer plano.
* `userInfo` contiene el payload de la notificación.
* Asegúrate de establecer `Pushwoosh.ForegroundPush.delegate = self` después de la configuración.

### 5. Parámetros opcionales para personalizar las notificaciones push en primer plano

El módulo `PushwooshForegroundPush` proporciona varios parámetros opcionales para personalizar la apariencia y el comportamiento de tus notificaciones push en primer plano. Estos se pueden establecer globalmente a través de propiedades estáticas.

<table>
  <thead>
    <tr>
      <th style={{ width: '20%' }}>Propiedad</th>
      <th style={{ width: '15%' }}>Tipo</th>
      <th style={{ width: '45%' }}>Descripción</th>
      <th style={{ width: '20%' }}>Predeterminado</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>useLiquidView</td>
      <td>Bool</td>
      <td>Usa la vista Liquid Glass en iOS 26.</td>
      <td>false</td>
    </tr>
    <tr>
      <td>gradientColors</td>
      <td>[UIColor]?</td>
      <td>Array opcional de colores para un fondo degradado.</td>
      <td>nil</td>
    </tr>
    <tr>
      <td>backgroundColor</td>
      <td>UIColor?</td>
      <td>Color de fondo para la notificación push. Si es nil y gradientColors no está establecido, se utiliza el degradado predeterminado.</td>
      <td>Degradado del sistema predeterminado</td>
    </tr>
    <tr>
      <td>usePushAnimation</td>
      <td>Bool</td>
      <td>Indica si se debe animar la notificación push cuando se muestra.</td>
      <td>true</td>
    </tr>
    <tr>
      <td>titlePushColor</td>
      <td>UIColor?</td>
      <td>Color del texto del título de la notificación. Por defecto, es el blanco del sistema si es nil.</td>
      <td>blanco</td>
    </tr>
    <tr>
      <td>messagePushColor</td>
      <td>UIColor?</td>
      <td>Color del texto del mensaje de la notificación. Por defecto, es el blanco del sistema si es nil.</td>
      <td>blanco</td>
    </tr>
    <tr>
      <td>titlePushFont</td>
      <td>UIFont?</td>
      <td>Fuente del texto del título de la notificación. Por defecto, es la fuente del sistema si es nil.</td>
      <td>Fuente del sistema predeterminada</td>
    </tr>
    <tr>
      <td>messagePushFont</td>
      <td>UIFont?</td>
      <td>Fuente del texto del mensaje de la notificación. Por defecto, es la fuente del sistema si es nil.</td>
      <td>Fuente del sistema predeterminada</td>
    </tr>
  </tbody>
</table>

<Aside type="caution" title="Importante">
- Si la bandera `useLiquidView` está habilitada pero la versión del sistema del usuario es inferior a **iOS 26**, se mostrará en su lugar una notificación push basada en `UIView` normal.
- Si tu proyecto se compila con una versión de Swift **inferior a 5.13**, el efecto Liquid Glass no estará disponible en absoluto, incluso en iOS 26. En ese caso, se utilizará en su lugar un `UIVisualEffectView` desenfocado (con `UIBlurEffect`) en todos los dispositivos.
</Aside>

**Resumen:**
- Swift 5.13+ + iOS 26 → Liquid Glass
- Swift 5.13+ + iOS < 26 → UIView estándar
- Swift < 5.13 → Siempre vista desenfocada (sin soporte para Liquid Glass)


**Ejemplo de uso:**

```swift
Pushwoosh.ForegroundPush.useLiquidView = true
Pushwoosh.ForegroundPush.gradientColors = [.red, .orange, .yellow]
Pushwoosh.ForegroundPush.titlePushColor = .red
Pushwoosh.ForegroundPush.messagePushColor = .green
Pushwoosh.ForegroundPush.backgroundColor = .black
Pushwoosh.ForegroundPush.titlePushFont = .boldSystemFont(ofSize: 22)
Pushwoosh.ForegroundPush.messagePushFont = .italicSystemFont(ofSize: 15)
Pushwoosh.ForegroundPush.usePushAnimation = false
```

### 6. Ejemplo de notificación push en primer plano

Este ejemplo demuestra cómo mostrar una notificación push personalizada en primer plano con `título`, `mensaje`, `tarjetas` y `animación GIF`.

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-5.webm" title="Ejemplo" autoplay loop muted playsinline />
  <figcaption>Notificación push en primer plano de Pushwoosh con vista animada de Liquid Glass</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-1.webm" title="Ejemplo" autoplay loop muted playsinline />
  <figcaption>Notificación push en primer plano de Pushwoosh con archivo adjunto gif</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-2.webm" title="Ejemplo" autoplay loop muted playsinline />
  <figcaption>Notificación push en primer plano de Pushwoosh con imagen de tarjeta</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-3.webm" title="Ejemplo" autoplay loop muted playsinline />
  <figcaption>Notificación push en primer plano de Pushwoosh con un gradiente personalizado y colores de título y mensaje personalizados</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-4.webm" title="Ejemplo" autoplay loop muted playsinline />
  <figcaption>Notificación push en primer plano de Pushwoosh con fondo, fuentes de título y mensaje personalizados, y sin animación</figcaption>
</figure>

Eso es todo. Has configurado con éxito las notificaciones push personalizadas en primer plano en iOS con Pushwoosh.