Pular para o conteúdo

Personalizar o SDK do Android

Deep linking

Anchor link to

Na sua atividade que irá lidar com o deep link, adicione a tag <data> com os parâmetros scheme, host e pathPrefix.

<activity
android:name=".PromoActivity"
android:label="PromoActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="com.pushwoosh"
android:host="promotion"
android:pathPrefix="" />
</intent-filter>
</activity>

No exemplo acima, o deep link abrirá a PromoActivity. A implementação básica abaixo exibe um alerta com o valor do id da promoção para fins de simplicidade. Na sua aplicação, ele poderia definitivamente fazer algo útil!

public class PromoActivity extends Activity
{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.deep_link);
setTitle("Deep link activity");
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
if (TextUtils.equals(action, Intent.ACTION_VIEW))
{
openUrl(data);
}
}
private void openUrl(Uri uri)
{
String promoId = uri.getQueryParameter("id");
Toast.makeText(getApplicationContext(), promoId, Toast.LENGTH_LONG).show();
}
}

Rastreamento de compras no aplicativo

Anchor link to

Se você deseja rastrear compras no aplicativo em Jornadas do Cliente, configure o envio de informações de compra para a Pushwoosh chamando este método:

Pushwoosh.getInstance().sendInappPurchase(@NonNull String sku, @NonNull BigDecimal price, @NonNull String currency);

Notificação push de Geozones

Anchor link to

Para usar pushes de Geozone, adicione a biblioteca com.pushwoosh:pushwoosh-location e chame:

PushwooshLocation.startLocationTracking();

No seu AndroidManifest.xml, inclua as permissões necessárias:

<manifest ... >
<!-- Required for geolocation-based push notifications -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Required for precise location tracking -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Required for background location access on Android 10 (API level 29) and higher -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

Usando notificações locais com a Pushwoosh

Anchor link to

Se você usa a API de Notificações Locais da Pushwoosh, adicione a permissão RECEIVE_BOOT_COMPLETED ao seu AndroidManifest.xml:

AndroidManifest.xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>x

Usando o número de emblema no Android

Anchor link to

A Pushwoosh suporta a configuração do número de emblema no atalho do ícone do aplicativo para os seguintes launchers do Android:
Sony, Samsung, LG, HTC, ASUS, ADW, APEX, NOVA, HUAWEI, ZUK, OPPO.
Para usar esta funcionalidade, basta adicionar a biblioteca com.pushwoosh:pushwoosh-badge à sua aplicação.

Abrindo atividade personalizada

Anchor link to

Se você deseja iniciar uma atividade específica em resposta a notificações push, adicione o seguinte intent-filter a essa atividade:

AndroidManifest.xml
<activity android:name="YourActivity">
<intent-filter>
<action android:name="${applicationId}.MESSAGE"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>

Controlando o Nível de Log

Anchor link to

Para auxiliar na depuração e integração, o SDK imprimirá todas as solicitações no console por padrão. Quando estiver pronto para a compilação de produção, adicione os metadados com.pushwoosh.log_level com o valor “ERROR” ao AndroidManifest.xml. Desta forma, apenas informações sobre erros irão para o console. Outra opção pode ser uma das seguintes:

NONE - Nenhum log do SDK
ERROR - Exibir apenas erros no console
WARN - Exibir também avisos
INFO - Exibir mensagens informativas
DEBUG - Até mesmo informações de depuração são exibidas agora
NOISE - Tudo que o SDK pode imprimir e mais

AndroidManifest.xml
<meta-data android:name="com.pushwoosh.log_level" android:value="ERROR" />

Usando o Proguard

Anchor link to

Ao usar o Proguard, adicione as seguintes opções:

proguard-rules.pro
-keep class com.pushwoosh.** { *; }
-dontwarn com.pushwoosh.**

Veja os requisitos da biblioteca Google Play Services em relação ao Proguard aqui:
https://developers.google.com/android/guides/setup

Personalizando o comportamento de abertura de notificação

Anchor link to

Se você precisar selecionar programaticamente qual atividade exibir como resultado de uma notificação push, você pode criar um NotificationServiceExtension personalizado e incluir o nome de classe totalmente qualificado do seu NotificationServiceExtension nos metadados sob o valor com.pushwoosh.notification_service_extension.

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.notification_service_extension"
android:value="com.your.package.YourNotificationServiceExtension" />
YourNotificationServiceExtension.java
public class YourNotificationServiceExtension extends NotificationServiceExtension {
@Override
protected void startActivityForPushMessage(PushMessage message) {
// super.startActivityForPushMessage() starts default launcher activity
// or activity marked with ${applicationId}.MESSAGE action.
// Simply do not call it to override this behaviour.
// super.startActivityForPushMessage(message);
// start your activity instead:
Intent launchIntent = new Intent(getApplicationContext(), YourActivity.class);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// (Optional) pass notification data to Activity
launchIntent.putExtra(Pushwoosh.PUSH_RECEIVE_EVENT, message.toJson().toString());
context.startActivity(launchIntent);
}
}

Personalizando notificações push

Anchor link to

Para personalizar a visualização das notificações push, você precisa criar uma Factory personalizada. Você pode criar uma NotificationFactory personalizada e incluir o nome de classe totalmente qualificado da sua NotificationFactory nos metadados sob o valor com.pushwoosh.notification_factory.

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.notification_factory"
android:value="com.your.package.YourNotificationFactory" />
YourNotificationFactory
public class YourNotificationFactory extends PushwooshNotificationFactory {
@Override
public Notification onGenerateNotification(@NonNull PushMessage pushMessage) {
if (customNotification) {
// TODO: generate and return custom notification
}
// return default Pushwoosh notification
return super.onGenerateNotification(pushMessage);
}
}

Personalizando o resumo do grupo

Anchor link to

Para personalizar a aparência de um resumo de grupo, crie uma Factory personalizada. Você pode criar uma SummaryNotificationFactory personalizada e incluir o nome de classe totalmente qualificado da sua SummaryNotificationFactory nos metadados sob o valor com.pushwoosh.summary_notification_factory.

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.summary_notification_factory"
android:value="com.your.package.YourSummaryNotificationFactory" />
YourSummaryNotificationFactory
public class YourSummaryNotificationFactory extends PushwooshSummaryNotificationFactory {
@Override
public String summaryNotificationMessage(int notificationsAmount) {
// return the message you want
return super.summaryNotificationMessage(notificationsAmount);
}
@Override
public int summaryNotificationIconResId() {
// return the icon resource id you want
return super.summaryNotificationIconResId();
}
}

URL de endpoint privado

Anchor link to

A Pushwoosh fornece endpoints privados para clientes com assinaturas do Plano Personalizado. Para configurar um endpoint privado para o SDK do Android, você precisa adicionar o seguinte ao seu arquivo AndroidManifest.xml:

AndroidManifest.xml
<meta-data android:name="com.pushwoosh.base_url" android:value="PUSHWOOSH_PRIVATE_ENDPOINT_URL_PROVIDED" />

Criando uma fila de Rich Media

Anchor link to

Caso haja várias páginas de Rich Media para exibir simultaneamente (por exemplo, eventos de gatilho para dois ou mais In-Apps ocorrem em um momento, ou uma página de Rich Media já está sendo exibida no momento em que um evento de gatilho diferente ocorre), você pode configurar uma fila para a exibição de páginas de Rich Media. Para criar uma fila, adicione o seguinte código ao seu projeto:

Application.java
package com.pushwoosh.testingapp;
import com.pushwoosh.RichMediaManager;
import com.pushwoosh.exception.PushwooshException;
import com.pushwoosh.richmedia.RichMediaPresentingDelegate;
import com.pushwoosh.richmedia.RichMedia;
import com.pushwoosh.internal.utils.PWLog;
import java.util.ArrayDeque;
import java.util.concurrent.locks.ReentrantLock;
public class DefaultRichMediaPresentingDelegate implements RichMediaPresentingDelegate {
private final String TAG = DefaultRichMediaPresentingDelegate.class.getSimpleName();
private ArrayDeque<RichMedia> richMediaQueue = new ArrayDeque<>();
private RichMedia currentRichMedia = null;
private ReentrantLock reentrantLock;
public DefaultRichMediaPresentingDelegate() {
PWLog.noise(TAG, "new DefaultRichMediaPresentingDelegate:" + this);
reentrantLock = new ReentrantLock();
}
@Override
public boolean shouldPresent(RichMedia richMedia) {
PWLog.noise(TAG, "shouldPresent:" + richMedia);
if (currentRichMedia == null) {
PWLog.noise(TAG, "currentRichMedia is null");
}
if (richMedia.isLockScreen()) {
PWLog.noise(TAG, "isLockScreen is true");
return true;
}
try {
reentrantLock.lock();
if (currentRichMedia == null) {
PWLog.noise(TAG, "show:" + richMedia);
currentRichMedia = richMedia;
return true;
} else {
PWLog.noise(TAG, "add to queue:" + richMedia);
richMediaQueue.add(richMedia);
return false;
}
} finally {
reentrantLock.unlock();
}
}
@Override
public void onPresent(RichMedia richMedia) {
PWLog.noise(TAG, "onPresent" + richMedia);
}
@Override
public void onError(RichMedia richMedia, PushwooshException pushwooshException) {
PWLog.error(TAG, pushwooshException + " richMedia:"+richMedia.toString());
tryShowNextRichMediaThreadSafety();
}
@Override
public void onClose(RichMedia richMedia) {
PWLog.noise(TAG, "onClose:" + richMedia);
tryShowNextRichMediaThreadSafety();
}
private void tryShowNextRichMediaThreadSafety() {
try {
reentrantLock.lock();
tryShowNextRichMedia();
} finally {
reentrantLock.unlock();
}
}
private void tryShowNextRichMedia() {
if (!richMediaQueue.isEmpty()) {
currentRichMedia = richMediaQueue.poll();
PWLog.noise(TAG, "try manual show:" + currentRichMedia);
RichMediaManager.present(currentRichMedia);
} else {
PWLog.noise(TAG, "richMediaQueue is empty");
currentRichMedia = null;
}
}
}

Push com som personalizado

Anchor link to
  1. Coloque seu arquivo de áudio na pasta apropriada. Para o framework nativo do Android, seus arquivos devem ser colocados na pasta /app/src/main/res/raw.

2. Crie um Canal de Notificação.

3. Selecione um som ao configurar uma mensagem push.

4. Defina o Canal de Notificação ao qual a mensagem pertencerá. Para fazer isso, especifique o seguinte no campo “Parâmetros raiz do Android”:{"pw_channel": "NOME DO CANAL DE NOTIFICAÇÃO PUSH"} //`` aqui você precisa especificar o nome do seu canal com som personalizado

No caso de usar a API remota, defina os parâmetros da seguinte forma em sua solicitação da API /createMessage:

"android_root_params": {"pw_channel": "push"} // aqui você precisa especificar o nome do seu canal com som personalizado, por exemplo, "push" para as notificações com som push.wav.
"android_sound": "push" // aqui você deve especificar o nome do arquivo sem extensão

Depois de enviar o push com esses parâmetros especificados, o Canal de Notificação com o som selecionado é criado para todos os dispositivos com Android 8+.

Agora, para enviar o push com um som personalizado, você precisa especificar apenas o canal associado a esse som.

Regras do Proguard para sons de notificação personalizados

Anchor link to

Se seu aplicativo usa o proguard para encolhimento de código e recursos, é importante manter seus arquivos de som intactos e disponíveis para bibliotecas externas. Se você usar a propriedade minifyEnabled = true no seu build.gradle, adicione as seguintes regras ao seu proguard-rules.pro:

-keep public class your.package.name.R$raw {
*;
}

Se você encolher os recursos do seu aplicativo além do encolhimento de código usando a propriedade shrinkResources=true, você deve especificar adicionalmente quais recursos deseja manter. Para fazer isso, crie um novo arquivo XML com qualquer nome, salve-o em algum lugar do seu projeto (por exemplo, em res/xml) e especifique os nomes dos recursos sob o parâmetro tools:keep na tag resources:

<?xml version="1.0" encoding="utf-8"?>
<resources xmlns:tools="http://schemas.android.com/tools"
tools:keep="@raw/*"
/>

Lista completa de flags de metadados do SDK do Android

Anchor link to

Para configurar uma flag, você precisa adicionar o bloco de metadados ao seu arquivo AndroidManifest.xml dentro da tag application. Por exemplo, se você quiser definir o ID da aplicação Pushwoosh, adicione o seguinte código ao seu arquivo AndroidManifest.xml:

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.appid"
android:value="XXXXX-XXXXX" />
FlagDescriçãoValores possíveis
com.pushwoosh.appidDefine o ID da aplicação Pushwoosh.XXXXX-XXXXX
com.pushwoosh.senderidDefine o ID do remetente do projeto Firebase.123456789000
com.pushwoosh.log_levelDefine o nível de log. Para detalhes, consulte Controlando o Nível de Log. NONE / ERROR / WARN / INFO / DEBUG (padrão) / NOISE
com.pushwoosh.base_urlSubstitui a URL base do servidor Pushwoosh.https://cp.pushwoosh.com/json/1.3/ (padrão)
com.pushwoosh.notification_service_extensionNotificationServiceExtension personalizado. Para detalhes, consulte Personalizando o comportamento de abertura de notificação. com.myapp.MyNotificationServiceExtension
com.pushwoosh.notification_factory

NotificationFactory personalizado.

Para detalhes, consulte Personalizando notificações push.

com.myapp.MyNotificationFactory
com.pushwoosh.summary_notification_factorySummaryNotificationFactory personalizado.com.myapp.MySummaryNotificationFactory
com.pushwoosh.multi_notification_modeSe verdadeiro, as notificações serão agrupadas. Se falso, apenas a última notificação recebida será exibida.true / false (padrão)
com.pushwoosh.allow_server_communicationSe verdadeiro, o SDK tem permissão para enviar solicitações de rede para os servidores da Pushwoosh.true (padrão) / false
com.pushwoosh.handle_notifications_using_workmanagerSe verdadeiro, o WorkManager é configurado para lidar com notificações.true / false (padrão)
com.pushwoosh.notification_iconNome do recurso do ícone de notificação personalizado (pequeno). Se nulo, o ícone padrão da aplicação será usado. res/drawable-xxhdpi-v11/notification_small_icon.png / null
com.pushwoosh.notification_icon_colorCor de fundo do ícone de notificação (pequeno).#FFFFFF
com.pushwoosh.allow_collecting_device_dataSe verdadeiro, o SDK tem permissão para coletar e enviar dados do dispositivo para a Pushwoosh.true (padrão) / false
com.pushwoosh.allow_collecting_device_os_versionSe verdadeiro, o SDK tem permissão para coletar e enviar a versão do SO do dispositivo para a Pushwoosh.true (padrão) / false
com.pushwoosh.allow_collecting_device_localeSe verdadeiro, o SDK tem permissão para coletar e enviar a localidade do dispositivo para a Pushwoosh.true (padrão) / false
com.pushwoosh.allow_collecting_device_modelSe verdadeiro, o SDK tem permissão para coletar e enviar o modelo do dispositivo para a Pushwoosh.true (padrão) / false
com.pushwoosh.in_app_business_solutions_cappingLimita o número de vezes que o In-App push-unregister pode ser exibido em um dia.1 (padrão), 2, …, n
com.pushwoosh.start_foreground_serviceSe verdadeiro, o Serviço em Primeiro Plano é iniciado junto com a chamada PushwooshLocation.startLocationTracking()true / false (padrão)
com.pushwoosh.foreground_service_notification_textDefine o texto de uma notificação criada quando o Serviço em Primeiro Plano é iniciado para a chave “com.pushwoosh.start_foreground_service”.Trabalho em andamento (padrão)
com.pushwoosh.foreground_service_notification_channel_nameDefine o nome do canal para a notificação criada quando o Serviço em Primeiro Plano é iniciado para a chave “com.pushwoosh.start_foreground_service”. Serviço em primeiro plano (padrão)
com.pushwoosh.trusted_package_namesPermite compartilhar o HWID da Pushwoosh com o pacote especificado”com.mycompany.myapp1, com.mycompany.myapp2”

Excluindo Notificações Push via TTL (Time-To-Live)

Anchor link to

Para excluir automaticamente notificações push após um período de tempo especificado usando TTL (Time-to-Live), siga estes passos:

  1. Crie uma NotificationFactory personalizada. Saiba mais

  2. No método onGenerateNotification(), crie uma notificação usando a classe Notification.Builder ou NotificationCompat.Builder e chame o método setTimeoutAfter:

public class YourNotificationFactory extends PushwooshNotificationFactory {
@Override
public Notification onGenerateNotification(@NonNull PushMessage pushMessage) {
Notification.Builder builder = new Notification.Builder(getApplicationContext(), addChannel(pushData));
Notification notification = builder.setContentText(pushData.getMessage())
.setContentTitle(title)
.setContentText(text)
// rest of your notification creation code
.setTimeoutAfter(timeout) // tempo em milissegundos antes que a notificação seja cancelada
.build();
}
}

Compartilhe Seu Feedback Conosco

Anchor link to

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, não hesite em compartilhar suas ideias conosco através deste formulário.