# Настройка плагина Cordova

## Push-уведомления на переднем плане

При получении push-уведомления в фоновом режиме никакие события не срабатывают до тех пор, пока пользователь не нажмет на уведомление. После его открытия плагин Pushwoosh вызывает события `push-receive` и `push-notification`.

Когда push-уведомление получено на переднем плане, плагин автоматически вызывает событие `push-receive` и создает уведомление в Центре уведомлений. Когда это уведомление открывается, вызывается событие `push-notification`.

Вы можете прослушивать событие `push-receive`, чтобы немедленно реагировать на push-уведомление, если оно получено на переднем плане, например, для обновления контента на текущей странице вашего приложения. Событие `push-notification`, с другой стороны, используется для реакции на клик по уведомлению, что требует взаимодействия с пользователем, например, для навигации внутри вашего приложения, запуска нового процесса и т.д.

Чтобы изменить внешний вид push-уведомлений на переднем плане, вы можете использовать настройки **IOS\_FOREGROUND\_ALERT\_TYPE** и **ANDROID\_FOREGROUND\_PUSH**:

**IOS\_FOREGROUND\_ALERT\_TYPE**

*   `NONE` – не отображать уведомление, когда приложение находится на переднем плане (по умолчанию)
*   `BANNER` – отображает баннерное оповещение в приложении
*   `ALERT` – оповещение

**ANDROID\_FOREGROUND\_PUSH**

*   `true` – не обрабатывать автоматически push-уведомления на переднем плане
*   `false` – автоматически обрабатывать push-уведомления на переднем плане (по умолчанию)

Пример:

```
cordova plugin add pushwoosh-cordova-plugin --variable IOS_FOREGROUND_ALERT_TYPE="ALERT" --variable ANDROID_FOREGROUND_PUSH="true"
```

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

Чтобы включить пользовательский звук уведомлений на Android, поместите звуковые файлы в папку **www/res** и укажите каждый звук в `config.xml`:

```txt
<?xml version=‘1.0’ encoding=‘utf-8’?>
<widget id="YOUR_ID" version="1.0.0" xmlns="http://www.w3.org/ns/widgets” xmlns:cdv=“http://cordova.apache.org/ns/1.0">
	...
    <platform name="android">
        <allow-intent href="market:*" />
		...
        <-- Add this line for each sound -->
        <resource-file src="www/res/push.wav" target="res/raw/push.wav" />
    </platform>
</widget>
```

Звуки будут доступны в выпадающем меню **Sound** на панели **Send Push**.

На iOS звуковые файлы пока не связываются автоматически с приложением Pushwoosh, но их можно использовать вручную, например, `www/res/sound_name.wav`.

<Aside type="caution">
#### iOS

Уведомления iOS поддерживают только форматы файлов .aiff, .wav и .caf.
</Aside>

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

Иконку push-уведомления можно настроить на Android локально, используя `pw_notification` в качестве имени ресурса для такой иконки (см. примеры [1](https://github.com/Pushwoosh/pushwoosh-phonegap-cordova-sample/blob/master/Cordova/hooks/after_platform_add/2_set_notification_icon.js) [2](https://github.com/Pushwoosh/pushwoosh-phonegap-cordova-sample/tree/master/Cordova/config/android/res)); или удаленно, указав любое имя ресурса в настройке **Icon** на панели **Send Push**.

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

Пользовательские данные push-уведомления можно отправить с помощью настройки **Action** на панели **Send Push**. Чтобы получить и обработать такие данные, используйте следующий код:

```javascript
document.addEventListener('push-notification',
  function(event) {
    var message = event.notification.message; // Push message
    var userData = event.notification.userdata; // Custom push data

    if (userData) {
      // handle custom push data here
    }
  }
);
```

## Управление уровнем логирования

Для помощи в отладке и интеграции SDK по умолчанию выводит все запросы в консоль. Когда вы будете готовы к сборке для продакшена, установите переменную `LOG_LEVEL` в одно из следующих значений:

*   `NONE` – нет логов от SDK
*   `ERROR` – отображать в консоли только ошибки
*   `WARNING` – показывать предупреждения
*   `INFO` – показывать информационные сообщения
*   `DEBUG` – показывать все, включая отладочную информацию (по умолчанию)

Пример:

```
cordova plugin add pushwoosh-cordova-plugin --variable LOG_LEVEL="INFO"
```

## Диплинки

Мы рекомендуем использовать [https://github.com/EddyVerbruggen/Custom-URL-scheme](https://github.com/EddyVerbruggen/Custom-URL-scheme)\
Настроить диплинки для Cordova очень просто, и это работает с функциональностью диплинков Pushwoosh "из коробки".

Инструкции по установке и использованию вы можете найти в [этом руководстве](/ru/developer/guides/messaging-channels/deep-linking/) или в [документации плагина](https://github.com/EddyVerbruggen/Custom-URL-scheme#2-installation).

## Rich Media JS Bridge

Вы можете вызывать свои JS-функции из Rich Media в Cordova WebView через javascript-интерфейсы.\
Вызов из Rich Media должен иметь следующий формат:

\<interface>.callFunction('\<function\_name>', \<params\_string>)

Пример:

**1.** Создайте Rich Media с вызовом javascript:

```javascript
testBridge.callFunction('testFunction', JSON.stringify({'param1' : 1, 'param2':'test'}))
```

**2.** Добавьте javascript-интерфейс в ваш проект:

```javascript
pushNotification.addJavaScriptInterface('testBridge');
```

**3.** Добавьте функцию:

```javascript
function testFunction(params) {
    alert("Bridge is working! " + params.param1 + " " + params.param2);
}
```

## Использование плагина Pushwoosh с другими сервисами FCM

Если ваше приложение использует другие плагины, которые зависят от **firebase-messaging**, это может привести к конфликтам или к тому, что один из плагинов не будет работать должным образом. Чтобы разрешить этот конфликт, вы можете добавить собственный класс FirebaseMessagingService, который будет маршрутизировать push-уведомления между плагинами. Плагин Pushwoosh Cordova содержит шаблон этого класса, который вы можете использовать как есть, чтобы заставить все уведомления проходить через обработчики Pushwoosh, или изменить его для обработки уведомлений от других провайдеров. Чтобы включить шаблон, раскомментируйте следующие строки в файле `plugin.xml` плагина:

```
    <service android:name="com.pushwoosh.plugin.pushnotifications.CustomFirebaseMessagingService" android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
```

## Поделитесь с нами своим мнением

Ваши отзывы помогают нам создавать лучший опыт, поэтому мы будем рады услышать от вас, если у вас возникнут какие-либо проблемы в процессе интеграции SDK. Если вы столкнетесь с какими-либо трудностями, пожалуйста, не стесняйтесь поделиться своими мыслями с нами [через эту форму](https://docs.google.com/forms/d/e/1FAIpQLSd_0b8jwn-V_JmoPLIxIFYbHACCQhrzidOZV3ELywoQPXRSxw/viewform).