# Notificação push customizada em primeiro plano para iOS

A partir da versão 6.10.0, você pode integrar o módulo `PushwooshForegroundPush` para customizar notificações push em primeiro plano quando os alertas nativos do sistema iOS estiverem desativados.

### 1. Desative os alertas de push nativos em primeiro plano

Adicionando `Pushwoosh_SHOW_ALERT = false` ao seu `Info.plist`.

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

### 2. Integrando o Módulo `PushwooshForegroundPush`

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

<Aside type="caution" title="Importante">
Os módulos ```PushwooshFramework```, ```PushwooshCore```, ```PushwooshBridge``` e ```PushwooshLiveActivities``` são **obrigatórios**.
</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. Adicione a Configuração `PushwooshForegroundPush` no 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)
        }
    }
}
```

Usando o Método `foregroundNotificationWith`

O método foregroundNotificationWith permite que você exiba uma notificação push customizada em primeiro plano com estilo, duração e feedback tátil configuráveis.

Assinatura do Método (Swift / Objective-C):

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

`Parâmetros:`

1. `style` (`PWForegroundPushStyle`)
* Atualmente, apenas o style1 está disponível.

2. `duration` (`Int`)
* Especifica por quanto tempo a notificação será exibida antes de desaparecer (em segundos).

3. `vibration` (`PWForegroundPushHapticFeedback`)
* Controla o feedback tátil quando a notificação é exibida. Opções disponíveis:

```swift
case none           // Sem vibração
case light          // Vibração leve
case medium         // Vibração média
case heavy          // Vibração forte
case soft           // Vibração suave
case rigid          // Vibração rígida
case notification   // Vibração de notificação padrão
```

4. `disappearedPushAnimation` (`PWForegroundPushDisappearedAnimation`)
* Animação de desaparecimento do push

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

### 4. Implementando o Método Delegate `didTapForegroundPush`

Para lidar com os toques do usuário em notificações push customizadas em primeiro plano, implemente o método do protocolo `PWForegroundPushDelegate`:

```swift
// Lida com o toque no push em primeiro plano
func didTapForegroundPush(_ userInfo: [AnyHashable : Any]) {
    print("Foreground custom push: \(userInfo)")

    // Realize qualquer ação, ex: navegar para uma tela específica
    // navigateToScreen(for: userInfo)
}
```

Notas:

* Este método é chamado quando o usuário toca em um push customizado em primeiro plano.
* userInfo contém o payload da notificação.
* Certifique-se de definir `Pushwoosh.ForegroundPush.delegate = self` após a configuração.

### 5. Parâmetros Opcionais para Customizar Notificações Push em Primeiro Plano

O módulo `PushwooshForegroundPush` fornece vários parâmetros opcionais para customizar a aparência e o comportamento de suas notificações push em primeiro plano. Eles podem ser definidos globalmente através de propriedades estáticas.

<table>
  <thead>
    <tr>
      <th style={{ width: '20%' }}>Propriedade</th>
      <th style={{ width: '15%' }}>Tipo</th>
      <th style={{ width: '45%' }}>Descrição</th>
      <th style={{ width: '20%' }}>Padrão</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>useLiquidView</td>
      <td>Bool</td>
      <td>Usa a visualização Liquid Glass no iOS 26.</td>
      <td>false</td>
    </tr>
    <tr>
      <td>gradientColors</td>
      <td>[UIColor]?</td>
      <td>Array opcional de cores para um fundo gradiente.</td>
      <td>nil</td>
    </tr>
    <tr>
      <td>backgroundColor</td>
      <td>UIColor?</td>
      <td>Cor de fundo para o push. Se for nulo e gradientColors não estiver definido, o gradiente padrão é usado.</td>
      <td>Gradiente padrão do sistema</td>
    </tr>
    <tr>
      <td>usePushAnimation</td>
      <td>Bool</td>
      <td>Se deve animar o push quando exibido.</td>
      <td>true</td>
    </tr>
    <tr>
      <td>titlePushColor</td>
      <td>UIColor?</td>
      <td>Cor do texto do título da notificação. O padrão é o branco do sistema se for nulo.</td>
      <td>white</td>
    </tr>
    <tr>
      <td>messagePushColor</td>
      <td>UIColor?</td>
      <td>Cor do texto da mensagem da notificação. O padrão é o branco do sistema se for nulo.</td>
      <td>white</td>
    </tr>
    <tr>
      <td>titlePushFont</td>
      <td>UIFont?</td>
      <td>Fonte do texto do título da notificação. O padrão é a fonte do sistema se for nulo.</td>
      <td>Fonte padrão do sistema</td>
    </tr>
    <tr>
      <td>messagePushFont</td>
      <td>UIFont?</td>
      <td>Fonte do texto da mensagem da notificação. O padrão é a fonte do sistema se for nulo.</td>
      <td>Fonte padrão do sistema</td>
    </tr>
  </tbody>
</table>

<Aside type="caution" title="Importante">
- Se a flag `useLiquidView` estiver ativada, mas a versão do sistema do usuário for inferior ao **iOS 26**, um push regular baseado em `UIView` será exibido.
- Se o seu projeto for compilado com uma versão do Swift **inferior a 5.13**, o efeito Liquid Glass não estará disponível — mesmo no iOS 26. Nesse caso, uma `UIVisualEffectView` desfocada (com `UIBlurEffect`) será usada em todos os dispositivos.
</Aside>

**Resumo:**
- Swift 5.13+ + iOS 26 → Liquid Glass
- Swift 5.13+ + iOS < 26 → UIView Padrão
- Swift < 5.13 → Sempre visualização desfocada (sem suporte a Liquid Glass)


**Exemplo 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. Exemplo de Push em Primeiro Plano

Este exemplo demonstra como exibir uma notificação push customizada em primeiro plano com `título`, `mensagem`, `cartões` e `animação GIF`.

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-5.webm" title="Exemplo" autoplay loop muted playsinline />
  <figcaption>Push em primeiro plano da Pushwoosh com visualização Liquid Glass animada</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-1.webm" title="Exemplo" autoplay loop muted playsinline />
  <figcaption>Push em primeiro plano da Pushwoosh com anexo gif</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-2.webm" title="Exemplo" autoplay loop muted playsinline />
  <figcaption>Push em primeiro plano da Pushwoosh com imagem de cartão</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-3.webm" title="Exemplo" autoplay loop muted playsinline />
  <figcaption>Push em primeiro plano da Pushwoosh com um gradiente customizado e cores de título e mensagem customizadas</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-4.webm" title="Exemplo" autoplay loop muted playsinline />
  <figcaption>Push em primeiro plano da Pushwoosh com fundo, fontes de título e mensagem customizados, e sem animação</figcaption>
</figure>

É isso. Você configurou com sucesso as notificações push customizadas em primeiro plano no iOS com a Pushwoosh.