# Пользовательское push-уведомление в активном режиме для iOS

Начиная с версии 6.10.0, вы можете интегрировать модуль `PushwooshForegroundPush` для настройки push-уведомлений в активном режиме, когда нативные системные оповещения iOS отключены.

### 1. Отключите нативные оповещения для push-уведомлений в активном режиме

Добавьте `Pushwoosh_SHOW_ALERT = false` в ваш `Info.plist`.

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

### 2. Интеграция модуля `PushwooshForegroundPush`

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

<Aside type="caution" title="Важно">
Модули ```PushwooshFramework```, ```PushwooshCore```, ```PushwooshBridge``` и ```PushwooshLiveActivities``` **обязательны**.
</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. Добавьте конфигурацию `PushwooshForegroundPush` в 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)
        }
    }
}
```

Использование метода `foregroundNotificationWith`

Метод `foregroundNotificationWith` позволяет отображать пользовательское push-уведомление в активном режиме с настраиваемым стилем, продолжительностью и тактильной обратной связью.

Сигнатура метода (Swift / Objective-C):

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

`Параметры:`

1. `style` (`PWForegroundPushStyle`)
* В настоящее время доступен только `style1`.

2. `duration` (`Int`)
* Указывает, как долго уведомление будет отображаться перед исчезновением (в секундах).

3. `vibration` (`PWForegroundPushHapticFeedback`)
* Управляет тактильной обратной связью при показе уведомления. Доступные опции:

```swift
case none           // Без вибрации
case light          // Легкая вибрация
case medium         // Средняя вибрация
case heavy          // Сильная вибрация
case soft           // Мягкая вибрация
case rigid          // Резкая вибрация
case notification   // Стандартная вибрация уведомления
```

4. `disappearedPushAnimation` (`PWForegroundPushDisappearedAnimation`)
* Анимация исчезновения push-уведомления

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

### 4. Реализация метода делегата `didTapForegroundPush`

Для обработки нажатий пользователя на пользовательские push-уведомления в активном режиме реализуйте метод протокола `PWForegroundPushDelegate`:

```swift
// Обработка нажатия на push-уведомление в активном режиме
func didTapForegroundPush(_ userInfo: [AnyHashable : Any]) {
    print("Foreground custom push: \(userInfo)")

    // Выполните любое действие, например, переход на определенный экран
    // navigateToScreen(for: userInfo)
}
```

Примечания:

* Этот метод вызывается, когда пользователь нажимает на пользовательское push-уведомление в активном режиме.
* `userInfo` содержит полезную нагрузку уведомления.
* Убедитесь, что вы установили `Pushwoosh.ForegroundPush.delegate = self` после конфигурации.

### 5. Необязательные параметры для настройки push-уведомлений в активном режиме

Модуль `PushwooshForegroundPush` предоставляет несколько необязательных параметров для настройки внешнего вида и поведения ваших push-уведомлений в активном режиме. Их можно установить глобально через статические свойства.

<table>
  <thead>
    <tr>
      <th style={{ width: '20%' }}>Свойство</th>
      <th style={{ width: '15%' }}>Тип</th>
      <th style={{ width: '45%' }}>Описание</th>
      <th style={{ width: '20%' }}>По умолчанию</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>useLiquidView</td>
      <td>Bool</td>
      <td>Использовать вид Liquid Glass на iOS 26.</td>
      <td>false</td>
    </tr>
    <tr>
      <td>gradientColors</td>
      <td>[UIColor]?</td>
      <td>Необязательный массив цветов для градиентного фона.</td>
      <td>nil</td>
    </tr>
    <tr>
      <td>backgroundColor</td>
      <td>UIColor?</td>
      <td>Цвет фона для push-уведомления. Если nil и gradientColors не установлен, используется градиент по умолчанию.</td>
      <td>Системный градиент по умолчанию</td>
    </tr>
    <tr>
      <td>usePushAnimation</td>
      <td>Bool</td>
      <td>Анимировать ли push-уведомление при показе.</td>
      <td>true</td>
    </tr>
    <tr>
      <td>titlePushColor</td>
      <td>UIColor?</td>
      <td>Цвет текста заголовка уведомления. По умолчанию системный белый, если nil.</td>
      <td>white</td>
    </tr>
    <tr>
      <td>messagePushColor</td>
      <td>UIColor?</td>
      <td>Цвет текста сообщения уведомления. По умолчанию системный белый, если nil.</td>
      <td>white</td>
    </tr>
    <tr>
      <td>titlePushFont</td>
      <td>UIFont?</td>
      <td>Шрифт текста заголовка уведомления. По умолчанию системный шрифт, если nil.</td>
      <td>Системный шрифт по умолчанию</td>
    </tr>
    <tr>
      <td>messagePushFont</td>
      <td>UIFont?</td>
      <td>Шрифт текста сообщения уведомления. По умолчанию системный шрифт, если nil.</td>
      <td>Системный шрифт по умолчанию</td>
    </tr>
  </tbody>
</table>

<Aside type="caution" title="Важно">
- Если флаг `useLiquidView` включен, но версия системы пользователя ниже **iOS 26**, вместо него будет показано обычное push-уведомление на основе `UIView`.
- Если ваш проект скомпилирован с версией Swift **ниже 5.13**, эффект Liquid Glass будет недоступен вообще — даже на iOS 26. В этом случае на всех устройствах будет использоваться размытый `UIVisualEffectView` (с `UIBlurEffect`).
</Aside>

**Итог:**
- Swift 5.13+ + iOS 26 → Liquid Glass
- Swift 5.13+ + iOS < 26 → Стандартный UIView
- Swift < 5.13 → Всегда размытый вид (нет поддержки Liquid Glass)


**Пример использования:**

```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. Пример push-уведомления в активном режиме

Этот пример демонстрирует, как отобразить пользовательское push-уведомление в активном режиме с `заголовком`, `сообщением`, `карточками` и `GIF-анимацией`.

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-5.webm" title="Example" autoplay loop muted playsinline />
  <figcaption>Push-уведомление Pushwoosh в активном режиме с анимированным Liquid Glass</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-1.webm" title="Example" autoplay loop muted playsinline />
  <figcaption>Push-уведомление Pushwoosh в активном режиме с gif-вложением</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-2.webm" title="Example" autoplay loop muted playsinline />
  <figcaption>Push-уведомление Pushwoosh в активном режиме с изображением-карточкой</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-3.webm" title="Example" autoplay loop muted playsinline />
  <figcaption>Push-уведомление Pushwoosh в активном режиме с пользовательским градиентом и цветами заголовка и сообщения</figcaption>
</figure>

<figure style={{ textAlign: "center" }}>
  <video src="/ios-foreground-custom-4.webm" title="Example" autoplay loop muted playsinline />
  <figcaption>Push-уведомление Pushwoosh в активном режиме с пользовательским фоном, шрифтами заголовка и сообщения и без анимации</figcaption>
</figure>

Вот и все. Вы успешно настроили пользовательские push-уведомления в активном режиме для iOS с помощью Pushwoosh.