# Personalizando o plugin Cordova

## Notificações push em primeiro plano

Ao receber um push em segundo plano, nenhum evento é acionado até que uma notificação push seja clicada. Após ser aberta, o plugin Pushwoosh dispara os eventos `push-receive` e `push-notification`.

Quando um push é recebido em primeiro plano, o plugin dispara `push-receive` automaticamente e cria uma notificação na Central de Notificações. Quando esta notificação é aberta, ele dispara `push-notification`.

Você pode escutar o evento `push-receive` para reagir imediatamente a um push caso ele seja recebido em primeiro plano, por exemplo, para atualizar o conteúdo na página atual do seu aplicativo. `push-notification`, por outro lado, é usado para reagir a um evento de clique na notificação, que requer interação do usuário, por exemplo, para navegar dentro do seu aplicativo, acionar um novo processo no seu aplicativo, etc.

Para alterar a aparência da notificação push em primeiro plano, você pode usar as preferências **IOS\_FOREGROUND\_ALERT\_TYPE** e **ANDROID\_FOREGROUND\_PUSH**:

**IOS\_FOREGROUND\_ALERT\_TYPE**

*   `NONE` – não exibe uma notificação quando o aplicativo está em primeiro plano (padrão)
*   `BANNER` – exibe um alerta de banner no aplicativo
*   `ALERT` – notificação de alerta

**ANDROID\_FOREGROUND\_PUSH**

*   `true` – não lida automaticamente com pushes em primeiro plano
*   `false` – lida automaticamente com pushes em primeiro plano (padrão)

Exemplo:

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

## Som de push personalizado

Para habilitar o som de notificação personalizado no Android, coloque os arquivos de som na pasta **www/res** e especifique cada som no `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>
```

Os sons estarão acessíveis no menu suspenso **Sound** do painel **Send Push**.

No iOS, os arquivos de som ainda não são associados automaticamente à Aplicação Pushwoosh, mas podem ser usados manualmente, por exemplo, `www/res/sound_name.wav`.

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

As notificações do iOS suportam apenas os formatos de arquivo .aiff, .wav e .caf.
</Aside>

## Ícone de push personalizado

O ícone de notificação push pode ser personalizado no Android localmente usando `pw_notification` como nome do recurso para tal ícone (veja o exemplo [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)); ou remotamente, referenciando qualquer nome de recurso na configuração **Icon** no painel **Send Push**.

## Dados de push personalizados

Dados de push personalizados podem ser enviados usando a configuração **Action** no painel **Send Push**. Para receber e manipular tais dados, use o seguinte código:

```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
    }
  }
);
```

## Controlando o nível de Log

Para auxiliar na depuração e integração, o SDK imprimirá todas as solicitações no console por padrão. Quando você estiver pronto para a compilação de produção, defina a variável `LOG_LEVEL` para um dos seguintes valores:

*   `NONE` – sem logs do SDK
*   `ERROR` – exibe apenas erros no console
*   `WARNING` – mostra avisos
*   `INFO` – mostra mensagens informativas
*   `DEBUG` – mostra tudo, incluindo informações de depuração (padrão)

Exemplo:

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

## Deep linking

Recomendamos o uso de [https://github.com/EddyVerbruggen/Custom-URL-scheme](https://github.com/EddyVerbruggen/Custom-URL-scheme)\
É super fácil configurar deep links para o Cordova e funciona com a funcionalidade de deep linking do Pushwoosh de forma nativa.

Você pode encontrar a instalação e o uso [neste guia](/pt/developer/guides/messaging-channels/deep-linking/) ou na [documentação do plugin](https://github.com/EddyVerbruggen/Custom-URL-scheme#2-installation).

## Bridge JS para Rich Media

Você pode chamar suas funções JS a partir de Rich Media no Cordova WebView através de interfaces javascript.\
Uma chamada de um Rich Media deve ter o seguinte formato:

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

Exemplo:

**1.** Crie um Rich Media com uma chamada javascript:

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

**2.** Adicione uma interface javascript ao seu projeto:

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

**3.** Adicione a função:

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

## Usando o plugin Pushwoosh com outros serviços FCM

Se o seu aplicativo usa outros plugins que dependem do **firebase-messaging**, isso pode resultar em conflitos ou em um dos plugins não funcionar como esperado. Para resolver este conflito, você pode adicionar uma classe FirebaseMessagingService personalizada que irá rotear as notificações push entre os plugins. O plugin Pushwoosh Cordova contém um modelo desta classe que você pode usar como está para forçar todas as notificações a passarem pelos manipuladores do Pushwoosh ou modificá-lo para manipular notificações de outros provedores também. Para habilitar o modelo, descomente as seguintes linhas no `plugin.xml` do plugin:

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

## Compartilhe seu feedback conosco

Seu feedback nos ajuda a criar uma experiência melhor, então adoraríamos ouvir de você se tiver algum problema durante o processo de integração do SDK. Se você enfrentar alguma dificuldade, por favor, não hesite em compartilhar suas opiniões conosco [através deste formulário](https://docs.google.com/forms/d/e/1FAIpQLSd_0b8jwn-V_JmoPLIxIFYbHACCQhrzidOZV3ELywoQPXRSxw/viewform).