# Notification push personnalisée au premier plan pour iOS

À partir de la version 6.10.0, vous pouvez intégrer le module `PushwooshForegroundPush` pour personnaliser les notifications push au premier plan lorsque les alertes système natives d'iOS sont désactivées.

### 1. Désactiver les alertes push natives au premier plan

Ajoutez `Pushwoosh_SHOW_ALERT = false` à votre `Info.plist`.

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

### 2. Intégrer le module `PushwooshForegroundPush`

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

<Aside type="caution" title="Important">
Les modules ```PushwooshFramework```, ```PushwooshCore```, ```PushwooshBridge``` et ```PushwooshLiveActivities``` sont **requis**.
</Aside>

**Cocoapods**
```bash
# Uncomment the next line to define a global platform for your project
# platform :ios, '13.0'

target 'MyApp' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  pod 'PushwooshXCFramework'
  pod 'PushwooshFramework/PushwooshForegroundPush'

end
```

### 3. Ajouter la configuration de `PushwooshForegroundPush` dans 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 {
          // Pushwoosh method
          Pushwoosh.ForegroundPush.showForegroundPush(userInfo: payload)
        }
    }
}
```

Utilisation de la méthode `foregroundNotificationWith`

La méthode foregroundNotificationWith vous permet d'afficher une notification push personnalisée au premier plan avec un style, une durée et un retour haptique configurables.

Signature de la méthode (Swift / Objective-C) :

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

`Paramètres :`

1. `style` (`PWForegroundPushStyle`)
* Actuellement, seul style1 est disponible.

2. `duration` (`Int`)
* Spécifie la durée d'affichage de la notification avant sa disparition (en secondes).

3. `vibration` (`PWForegroundPushHapticFeedback`)
* Contrôle le retour haptique lorsque la notification est affichée. Options disponibles :

```swift
case none           // Aucune vibration
case light          // Vibration légère
case medium         // Vibration moyenne
case heavy          // Vibration forte
case soft           // Vibration douce
case rigid          // Vibration rigide
case notification   // Vibration de notification standard
```

4. `disappearedPushAnimation` (`PWForegroundPushDisappearedAnimation`)
* Animation de disparition de la notification push

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

### 4. Implémenter la méthode déléguée `didTapForegroundPush`

Pour gérer les appuis de l'utilisateur sur les notifications push personnalisées au premier plan, implémentez la méthode du protocole `PWForegroundPushDelegate` :

```swift
// Gérer l'appui sur la notification push au premier plan
func didTapForegroundPush(_ userInfo: [AnyHashable : Any]) {
    print("Push personnalisé au premier plan : \(userInfo)")

    // Effectuer une action, par ex., naviguer vers un écran spécifique
    // navigateToScreen(for: userInfo)
}
```

Remarques :

* Cette méthode est appelée lorsque l'utilisateur appuie sur une notification push personnalisée au premier plan.
* userInfo contient la charge utile (payload) de la notification.
* Assurez-vous de définir `Pushwoosh.ForegroundPush.delegate = self` après la configuration.

### 5. Paramètres optionnels pour la personnalisation des notifications push au premier plan

Le module `PushwooshForegroundPush` fournit plusieurs paramètres optionnels pour personnaliser l'apparence et le comportement de vos notifications push au premier plan. Ceux-ci peuvent être définis globalement via des propriétés statiques.

<table>
  <thead>
    <tr>
      <th style={{ width: '20%' }}>Propriété</th>
      <th style={{ width: '15%' }}>Type</th>
      <th style={{ width: '45%' }}>Description</th>
      <th style={{ width: '20%' }}>Défaut</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>useLiquidView</td>
      <td>Bool</td>
      <td>Utiliser la vue Liquid Glass sur iOS 26.</td>
      <td>false</td>
    </tr>
    <tr>
      <td>gradientColors</td>
      <td>[UIColor]?</td>
      <td>Tableau optionnel de couleurs pour un arrière-plan en dégradé.</td>
      <td>nil</td>
    </tr>
    <tr>
      <td>backgroundColor</td>
      <td>UIColor?</td>
      <td>Couleur d'arrière-plan pour la notification push. Si nil et que gradientColors n'est pas défini, le dégradé par défaut est utilisé.</td>
      <td>Dégradé système par défaut</td>
    </tr>
    <tr>
      <td>usePushAnimation</td>
      <td>Bool</td>
      <td>Indique si la notification push doit être animée lors de son affichage.</td>
      <td>true</td>
    </tr>
    <tr>
      <td>titlePushColor</td>
      <td>UIColor?</td>
      <td>Couleur du texte du titre de la notification. Par défaut, blanc système si nil.</td>
      <td>white</td>
    </tr>
    <tr>
      <td>messagePushColor</td>
      <td>UIColor?</td>
      <td>Couleur du texte du message de la notification. Par défaut, blanc système si nil.</td>
      <td>white</td>
    </tr>
    <tr>
      <td>titlePushFont</td>
      <td>UIFont?</td>
      <td>Police du texte du titre de la notification. Par défaut, police système si nil.</td>
      <td>Police système par défaut</td>
    </tr>
    <tr>
      <td>messagePushFont</td>
      <td>UIFont?</td>
      <td>Police du texte du message de la notification. Par défaut, police système si nil.</td>
      <td>Police système par défaut</td>
    </tr>
  </tbody>
</table>

<Aside type="caution" title="Important">
- Si l'indicateur `useLiquidView` est activé mais que la version du système de l'utilisateur est inférieure à **iOS 26**, une notification push standard basée sur `UIView` sera affichée à la place.
- Si votre projet est compilé avec une version de Swift **inférieure à 5.13**, l'effet Liquid Glass ne sera pas disponible du tout — même sur iOS 26. Dans ce cas, une `UIVisualEffectView` floutée (avec `UIBlurEffect`) sera utilisée à la place sur tous les appareils.
</Aside>

**Résumé :**
- Swift 5.13+ + iOS 26 → Liquid Glass
- Swift 5.13+ + iOS < 26 → UIView standard
- Swift < 5.13 → Vue toujours floutée (pas de support Liquid Glass)


**Exemple d'utilisation :**

```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. Exemple de notification push au premier plan

Cet exemple montre comment afficher une notification push personnalisée au premier plan avec un titre, un message, des cartes et une animation GIF.

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-5.webm" title="Example" autoplay loop muted playsinline />
  <figcaption>Notification push au premier plan de Pushwoosh avec vue Liquid Glass animée</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-1.webm" title="Example" autoplay loop muted playsinline />
  <figcaption>Notification push au premier plan de Pushwoosh avec pièce jointe gif</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-2.webm" title="Example" autoplay loop muted playsinline />
  <figcaption>Notification push au premier plan de Pushwoosh avec image de carte</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-3.webm" title="Example" autoplay loop muted playsinline />
  <figcaption>Notification push au premier plan de Pushwoosh avec un dégradé personnalisé, et des couleurs de titre et de message personnalisées</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-4.webm" title="Example" autoplay loop muted playsinline />
  <figcaption>Notification push au premier plan de Pushwoosh avec un arrière-plan, des polices de titre et de message personnalisés, et sans animation</figcaption>
</figure>

C'est tout. Vous avez configuré avec succès les notifications push personnalisées au premier plan dans iOS avec Pushwoosh.