Перейти к содержанию

Настройка Android SDK

Глубокие ссылки (Deep linking)

Anchor link to

В activity, которая будет обрабатывать глубокую ссылку, добавьте тег <data> с параметрами scheme, host и 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>

В приведенном выше примере глубокая ссылка откроет PromoActivity. Для простоты базовая реализация ниже отображает предупреждение со значением promo id. В вашем приложении это, безусловно, может быть что-то более полезное!

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

Отслеживание покупок в приложении

Anchor link to

Если вы хотите отслеживать покупки в приложении в сценариях Customer Journey, настройте отправку информации о покупках в Pushwoosh, вызвав этот метод:

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

Push-уведомления на основе геозон

Anchor link to

Чтобы использовать push-уведомления на основе геозон, добавьте библиотеку com.pushwoosh:pushwoosh-location и вызовите:

PushwooshLocation.startLocationTracking();

В ваш AndroidManifest.xml добавьте необходимые разрешения:

<manifest ... >
<!-- Требуется для push-уведомлений на основе геолокации -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- Требуется для точного отслеживания местоположения -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- Требуется для фонового доступа к местоположению на Android 10 (API уровень 29) и выше -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
</manifest>

Использование локальных уведомлений с Pushwoosh

Anchor link to

Если вы используете Pushwoosh Local Notifications API, добавьте разрешение RECEIVE_BOOT_COMPLETED в ваш AndroidManifest.xml:

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

Использование счетчика на иконке приложения в Android

Anchor link to

Pushwoosh поддерживает установку счетчика на иконке приложения для следующих лаунчеров Android:
Sony, Samsung, LG, HTC, ASUS, ADW, APEX, NOVA, HUAWEI, ZUK, OPPO.
Чтобы использовать эту функцию, просто добавьте библиотеку com.pushwoosh:pushwoosh-badge в ваше приложение.

Открытие кастомной activity

Anchor link to

Если вы хотите запускать определенную activity в ответ на push-уведомления, добавьте к этой activity следующий intent-filter:

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

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

Anchor link to

Для помощи в отладке и интеграции SDK по умолчанию выводит все запросы в консоль. Когда вы будете готовы к релизной сборке, добавьте метаданные com.pushwoosh.log_level со значением “ERROR” в AndroidManifest.xml. Таким образом, в консоль будет выводиться только информация об ошибках. Другие возможные опции:

NONE - Нет логов от SDK
ERROR - Отображать только ошибки в консоли
WARN - Отображать также предупреждения
INFO - Отображать информационные сообщения
DEBUG - Отображать даже отладочную информацию
NOISE - Все, что может вывести SDK, и даже больше

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

Использование Proguard

Anchor link to

При использовании Proguard добавьте следующие опции:

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

Смотрите требования библиотеки Google Play Services относительно Proguard здесь:
https://developers.google.com/android/guides/setup

Настройка поведения при открытии уведомления

Anchor link to

Если вам нужно программно выбирать, какую activity отображать в результате push-уведомления, вы можете создать кастомный NotificationServiceExtension и включить полное имя класса вашего NotificationServiceExtension в метаданные под значением 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() запускает activity лаунчера по умолчанию
// или activity, помеченную действием ${applicationId}.MESSAGE.
// Просто не вызывайте его, чтобы переопределить это поведение.
// super.startActivityForPushMessage(message);
// вместо этого запустите свою activity:
Intent launchIntent = new Intent(getApplicationContext(), YourActivity.class);
launchIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
// (Опционально) передать данные уведомления в Activity
launchIntent.putExtra(Pushwoosh.PUSH_RECEIVE_EVENT, message.toJson().toString());
context.startActivity(launchIntent);
}
}

Кастомизация push-уведомлений

Anchor link to

Чтобы настроить внешний вид push-уведомлений, вам необходимо создать кастомную фабрику. Вы можете создать кастомный NotificationFactory и включить полное имя класса вашего NotificationFactory в метаданные под значением 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: сгенерируйте и верните кастомное уведомление
}
// вернуть стандартное уведомление Pushwoosh
return super.onGenerateNotification(pushMessage);
}
}

Кастомизация сводки группы

Anchor link to

Чтобы настроить внешний вид сводки группы, создайте кастомную фабрику. Вы можете создать кастомный SummaryNotificationFactory и включить полное имя класса вашего SummaryNotificationFactory в метаданные под значением 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 super.summaryNotificationMessage(notificationsAmount);
}
@Override
public int summaryNotificationIconResId() {
// верните желаемый идентификатор ресурса иконки
return super.summaryNotificationIconResId();
}
}

URL приватной конечной точки

Anchor link to

Pushwoosh предоставляет приватные конечные точки для клиентов с подпиской по тарифу Custom Plan. Чтобы настроить приватную конечную точку для Android SDK, вам нужно добавить следующее в ваш файл AndroidManifest.xml:

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

Создание очереди Rich Media

Anchor link to

Если необходимо одновременно отобразить несколько Rich Media страниц (например, триггерные события для двух или более In-App сообщений происходят в один момент, или Rich Media страница уже отображается в момент возникновения другого триггерного события), вы можете настроить очередь для отображения Rich Media страниц. Чтобы создать очередь, добавьте следующий код в ваш проект:

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-уведомление с кастомным звуком

Anchor link to
  1. Поместите ваш аудиофайл в соответствующую папку. Для нативного фреймворка Android ваши файлы должны быть размещены в папке /app/src/main/res/raw.

2. Создайте Канал уведомлений.

3. Выберите звук при настройке push-сообщения.

4. Установите Канал уведомлений, к которому будет принадлежать сообщение. Для этого укажите следующее в поле «Android root params»:{"pw_channel": "НАЗВАНИЕ КАНАЛА PUSH-УВЕДОМЛЕНИЙ"} //``здесь вам нужно указать имя для вашего канала с кастомным звуком

В случае использования remote API, установите параметры следующим образом в вашем /createMessage API-запросе:

"android_root_params": {"pw_channel": "push"} // здесь вам нужно указать имя для вашего канала с кастомным звуком, например, "push" для уведомлений со звуком push.wav.
"android_sound": "push" // здесь вы должны указать имя файла без расширения

Как только вы отправите push с указанными параметрами, Канал уведомлений с выбранным звуком будет создан для всех устройств с Android 8+.

Теперь, чтобы отправить push с кастомным звуком, вам нужно указать только канал, связанный с этим звуком.

Правила Proguard для кастомных звуков уведомлений

Anchor link to

Если ваше приложение использует Proguard для сокращения кода и ресурсов, важно сохранить ваши звуковые файлы нетронутыми и доступными для внешних библиотек. Если вы используете свойство minifyEnabled = true в вашем build.gradle, добавьте следующие правила в ваш proguard-rules.pro:

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

Если вы сокращаете ресурсы вашего приложения поверх сокращения кода, используя свойство shrinkResources=true, вам следует дополнительно указать, какие ресурсы вы хотите сохранить. Для этого создайте новый XML-файл с любым именем, сохраните его где-нибудь в вашем проекте (например, в res/xml) и укажите имена ресурсов под параметром tools:keep в теге resources:

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

Полный список флагов метаданных Android SDK

Anchor link to

Чтобы установить флаг, вам нужно добавить блок метаданных в ваш файл AndroidManifest.xml внутри тега application. Например, если вы хотите установить ID приложения Pushwoosh, добавьте следующий код в ваш файл AndroidManifest.xml:

AndroidManifest.xml
<meta-data
android:name="com.pushwoosh.appid"
android:value="XXXXX-XXXXX" />
ФлагОписаниеВозможные значения
com.pushwoosh.appidУстанавливает ID приложения Pushwoosh.XXXXX-XXXXX
com.pushwoosh.senderidУстанавливает ID отправителя проекта Firebase.123456789000
com.pushwoosh.log_levelУстанавливает уровень логирования. Подробнее см. в разделе Управление уровнем логирования.NONE / ERROR / WARN / INFO / DEBUG (по умолчанию) / NOISE
com.pushwoosh.base_urlПереопределяет базовый URL сервера Pushwoosh.https://cp.pushwoosh.com/json/1.3/ (по умолчанию)
com.pushwoosh.notification_service_extensionКастомный NotificationServiceExtension. Подробнее см. в разделе Настройка поведения при открытии уведомления.com.myapp.MyNotificationServiceExtension
com.pushwoosh.notification_factory

Кастомный NotificationFactory.

Подробнее см. в разделе Кастомизация push-уведомлений.

com.myapp.MyNotificationFactory
com.pushwoosh.summary_notification_factoryКастомный SummaryNotificationFactory.com.myapp.MySummaryNotificationFactory
com.pushwoosh.multi_notification_modeЕсли true, уведомления будут сгруппированы. Если false, будет отображаться только последнее полученное уведомление.true / false (по умолчанию)
com.pushwoosh.allow_server_communicationЕсли true, SDK разрешено отправлять сетевые запросы на серверы Pushwoosh.true (по умолчанию) / false
com.pushwoosh.handle_notifications_using_workmanagerЕсли true, для обработки уведомлений устанавливается WorkManager.true / false (по умолчанию)
com.pushwoosh.notification_iconИмя ресурса для кастомной (маленькой) иконки уведомления. Если null, будет использоваться иконка приложения по умолчанию.res/drawable-xxhdpi-v11/notification_small_icon.png / null
com.pushwoosh.notification_icon_colorЦвет фона (маленькой) иконки уведомления.#FFFFFF
com.pushwoosh.allow_collecting_device_dataЕсли true, SDK разрешено собирать и отправлять данные устройства в Pushwoosh.true (по умолчанию) / false
com.pushwoosh.allow_collecting_device_os_versionЕсли true, SDK разрешено собирать и отправлять версию ОС устройства в Pushwoosh.true (по умолчанию) / false
com.pushwoosh.allow_collecting_device_localeЕсли true, SDK разрешено собирать и отправлять локаль устройства в Pushwoosh.true (по умолчанию) / false
com.pushwoosh.allow_collecting_device_modelЕсли true, SDK разрешено собирать и отправлять модель устройства в Pushwoosh.true (по умолчанию) / false
com.pushwoosh.in_app_business_solutions_cappingОграничивает количество показов In-App сообщения push-unregister в день.1 (по умолчанию), 2, …, n
com.pushwoosh.start_foreground_serviceЕсли true, Foreground Service запускается вместе с вызовом PushwooshLocation.startLocationTracking()true / false (по умолчанию)
com.pushwoosh.foreground_service_notification_textУстанавливает текст уведомления, создаваемого при запуске Foreground Service для ключа “com.pushwoosh.start_foreground_service”.Work in progress (по умолчанию)
com.pushwoosh.foreground_service_notification_channel_nameУстанавливает имя канала для уведомления, создаваемого при запуске Foreground Service для ключа “com.pushwoosh.start_foreground_service”.Foreground service (по умолчанию)
com.pushwoosh.trusted_package_namesРазрешает совместное использование Pushwoosh HWID с указанным пакетом”com.mycompany.myapp1, com.mycompany.myapp2”

Удаление push-уведомлений через TTL (Time-To-Live)

Anchor link to

Чтобы автоматически удалять push-уведомления по истечении заданного периода времени с помощью TTL (Time-to-Live), выполните следующие шаги:

  1. Создайте кастомный NotificationFactory. Узнать больше

  2. В методе onGenerateNotification(), создайте уведомление, используя класс Notification.Builder или NotificationCompat.Builder, и вызовите метод 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)
// остальной код создания уведомления
.setTimeoutAfter(timeout) // время в миллисекундах, по истечении которого уведомление будет отменено
.build();
}
}

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

Anchor link to

Ваши отзывы помогают нам делать наш продукт лучше, поэтому мы будем рады, если вы поделитесь с нами своим мнением в случае возникновения проблем в процессе интеграции SDK. Если вы столкнетесь с какими-либо трудностями, пожалуйста, не стесняйтесь поделиться своими мыслями с нами через эту форму.