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

Расширенная настройка уведомлений, дополнительные возможности🔗

Поздний запрос разрешения на уведомления🔗

В Android 13+, при первом запросе разрешения на отправку уведомлений, пользователю будет показан попап. При стандартной настройке MRGSNotificationCenter данный попап будет показан на самом старте приложения, что может негативно сказаться на количестве разрешений, т.к. это является плохой практикой, сначала лучше объяснить пользователю, зачем нужны уведомления.

Если Вам необходимо первый раз запросить разрешение у пользователя позже (например, по нажатию на кнопку, или после определенного экрана), то Вы можете запустить наш MRGSNotificationCenter в нужный момент. После запуска будет запрошено разрешение на отправку уведомлений, получен токен. Для этого на шаге настройки параметров необходимо выставить флаг отложенного старта в true:

import games.my.mrgs.MRGSExternalSDKParams;
import games.my.mrgs.MRGService;
import games.my.mrgs.MRGServiceParams;

public class YourApplicationClass extends Application {
    @Override
    public void onCreate() {
        super.onCreate();

        final MRGServiceParams serviceParams = MRGServiceParams.init(<MRGS_APP_ID>, <CLIENT_SECRET>, MRGSPlatform.ANDROID);
        serviceParams.setDeferredPushStart(true);

        MRGService.service(context, serviceParams);
    }
}

Затем, в момент, когда вы готовы показать пользователю запрос, необходимо вызвать метод:

MRGSNotificationCenter.getInstance().enableNotifications(NOTIFICATIONS_TYPE_LOCAL);

Или другие вариации данного метода (подробнее про включение и отключение уведомлений читайте в соответствующем разделе).

После вызова метода будет произведен старт нашего MRGSNotificationCenter, показан попап. В дальнейшем данный метод вызывать каждый раз уже не обязательно, мы сами автоматически будем запускать MRGSNotificationCenter на старте приложения, если попап был показан хотя бы раз.

Альтернативный метод показа запроса

Если вы отложили запрос на разрешения уведомлений (или нужно показать еще раз, так как диалог может быть показан несколько раз), вы можете вызвать его позже следующим образом:

MRGSNotificationCenter.getInstance().requestNotificationsPermissions();

Получение настроек уведомлений пользователя🔗

Для получения статуса работы уведомлений (включены/отключены), воспользуйтесь методом areNotificationsEnabled

games.my.mrgs.notifications.MRGSNotificationCenter;

boolean status = MRGSNotificationCenter.getInstance().areNotificationsEnabled(context);

Переход в настройки

Если пользователь отказался от уведомлений в системном окне, или выключил необходимые вам типы уведомлений, но готов включить их обратно, то вы можете перебросить его прямо в приложение настроек на вкладку вашего приложения с помощью данного метода

Добавление собственных звуков к уведомлениям.🔗

Для добавления собственного звука, проигрываемого при приходе уведомления, воспользуйтесь полем:

int time = MRGS.timeUnix() + 10;
MRGSPushNotification notification1 = MRGSPushNotification.create("Message with sound", 1, time);
notification1.setSound("custom_notification_sound"; //Имя файла без расширения

На Android 8.0 и выше нет возможности задавать звук у конкретного уведомления. Для настройки звука уведомления его необходимо указать при создании канала

Расположение звукового файла

Если вы указали параметр Sound, при создании канала уведомления, то файл с таким именем должен лежать в ресурсах, директория (res/raw/)

Notification sound

Создание каналов и группы каналов🔗

Начиная с Android 8, в системе появились каналы и группы каналов уведомлений. С помощью них пользователь может отключить часть уведомлений (которые принадлежат к определенному каналу) в своем приложении. MRGS автоматически создает канал с ID MRGS_DEFAULT_CHANNEL и группой MRGS_DEFAULT_CHANNEL_GROUP и использует их в запланированных уведомлениях. Если вы хотите создать канал самостоятельно, для этого существуют классы MRGSPushNotificationChannel и MRGSPushNotificationChannelsGroup

import games.my.mrgs.notifications.MRGSNotificationCenter;
import games.my.mrgs.notifications.MRGSNotificationChannelGroup;

final MRGSNotificationChannelGroup group = new MRGSNotificationChannelGroup("my_group_id", "My Group");
MRGSNotificationCenter.getInstance().createNotificationChannelGroup(context, group);
  • Id - строковой, уникальный в приложении идентификатор группы
  • Name - имя группы, которое будет отображаться в системных настройках приложения
import games.my.mrgs.notifications.MRGSNotificationCenter;
import games.my.mrgs.notifications.MRGSNotificationChannel;

MRGSNotificationChannel channel = new MRGSNotificationChannel("my_channel_id", "My Channel");
channel.setDescription("Description");
channel.setGroup("my_group_id");
channel.setSound("push_sound");
channel.enableLights(true);

MRGSNotificationCenter.getInstance().createNotificationChannel(context, channel);
  • Id - строковой, уникальный в приложении идентификатор канала
  • Name - имя канала, которое будет отображаться в системных настройках приложения
  • Description - краткое описание канала, которое будет отображаться в системных настройках приложения
  • Group - id группы, созданной с помощью метода createNotificationChannelGroup, как описано выше
  • Sound - имя файла(без расширения) со звуком, который будет воспроизводиться при получении уведомления (опционально)
  • ShowLights - использовать ли световой индикатор смартфона (если он есть) при отображении уведомления (опционально)
Расположение звукового файла

Если вы указали параметр Sound, при создании канала уведомления, то файл с таким именем должен лежать в ресурсах, директория (res/raw/)

Notification sound

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

Группировка позволяет объединить несколько уведомлений в одно и отобразить их в виде раскрывающегося списка. Не путайте с группами каналов.

По умолчанию Android не группирует уведомления. Если вы хотите объединить несколько уведомлений в одно, им необходимо задать Id группы.

Воспользуйтесь полями:

import games.my.mrgs.MRGS;
import games.my.mrgs.notifications.MRGSNotificationCenter;
import games.my.mrgs.notifications.MRGSPushNotification;

final int time = MRGS.timeUnix() + 10;
MRGSPushNotification notification1 = MRGSPushNotification.create("Message number 1", 1, time);
notification1.setGroupId(222);
notification1.setGroupMessage("New resources arrived");
notification1.setGroupTitle("Receive your resources");

final int time2 = MRGS.timeUnix() + 15;
MRGSPushNotification notification2 = MRGSPushNotification.create("Message number 2", 1, time2);
notification2.setGroupId(222);
notification2.setGroupMessage("New resources arrived");
notification2.setGroupTitle("Receive your resources");

final MRGSNotificationCenter notificationCenter = MRGSNotificationCenter.getInstance();
notificationCenter.addLocalPush(notification1);
notificationCenter.addLocalPush(notification2);

Собственная верстка в уведомлениях🔗

Android Custom Notification1

Для использования собственной верстки уведомлений на Android необходимо выполнить следующие действия:

  • Создайте layout (разметку) в ресурсах Android. Директория (res/layout)
  • В ресурсы (res/drawable) необходимо положить изображения, которые вы хотите использовать внутри этой разметки
  • Текст можно задавать напрямую, либо так же загружать из ресурсов Android

Пример:

int time = MRGS.timeUnix() + 10;
MRGSPushNotification notification = MRGSPushNotification.create("Custom push notification", 1, time);
//animated_notification - это имя файла разметки (res/layout/animated_notification.xml)
notification.setCustomViewResId(R.layout.animated_notification);
//notification_icon - это id ImageView внутри разметки (<ImageView android:id="@+id/notification_icon">)
//app_icon - иконка в ресурсах (res/drawable/app_icon.png)
//context - контекст приложения
notification.setCustomViewImage("notification_icon", "app_icon", context);
//notification_text1 - это id TextView внутри разметки (<TextView android:id="@+id/notification_text1">)
//app_name - строковый ресурс (res/values/strings.xml <string name="app_name">Unity</string>)
//context - контекст приложения
notification.setCustomViewText("notification_text1", "app_name", context);
//notification_text2 - это id TextView внутри разметки (<TextView android:id="@+id/notification_text2">)
//Hello, World - текст не из ресурсов для отображения на уведомлении
//context - контекст приложения
notification.setCustomViewTextString("notification_text2", "Hello, World!", context);

Включение и выключение уведомлений🔗

MRGS позволит вам с легкостью включить или выключить конкретные типы уведомлений на устройстве пользователя. Данный функционал полезен для проектов, где в настройках есть переключатель доступности уведомлений. Так вы можете управлять доступностью локальных и push уведомлений:

Для включения и отключения локальных уведомлений, воспользуйтесь методами

import games.my.mrgs.notifications.MRGSNotificationCenter;
import static games.my.mrgs.notifications.MRGSNotificationCenter.NOTIFICATIONS_TYPE_LOCAL;

MRGSNotificationCenter.getInstance().enableNotifications(NOTIFICATIONS_TYPE_LOCAL);
MRGSNotificationCenter.getInstance().disableNotifications(NOTIFICATIONS_TYPE_LOCAL);

Для включения и отключения серверных уведомлений, воспользуйтесь методами

import games.my.mrgs.notifications.MRGSNotificationCenter;
import static games.my.mrgs.notifications.MRGSNotificationCenter.NOTIFICATIONS_TYPE_REMOTE;

MRGSNotificationCenter.getInstance().enableNotifications(NOTIFICATIONS_TYPE_REMOTE);
MRGSNotificationCenter.getInstance().disableNotifications(NOTIFICATIONS_TYPE_REMOTE);

Для включения и отключения сразу локальных и серверных уведомлений, воспользуйтесь методами

import games.my.mrgs.notifications.MRGSNotificationCenter;
import static games.my.mrgs.notifications.MRGSNotificationCenter.NOTIFICATIONS_TYPE_ALL;

MRGSNotificationCenter.getInstance().enableNotifications(NOTIFICATIONS_TYPE_ALL);
MRGSNotificationCenter.getInstance().disableNotifications(NOTIFICATIONS_TYPE_ALL);

Android 13

Для версии Android 13 и выше при включении уведомлений у пользователя будет запрошено разрешение на показ уведомлений, если этого запроса не было ранее.

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

import games.my.mrgs.notifications.MRGSNotificationCenter;
import static games.my.mrgs.notifications.MRGSNotificationCenter.NOTIFICATIONS_TYPE_ALL;
import static games.my.mrgs.notifications.MRGSNotificationCenter.NOTIFICATIONS_TYPE_LOCAL;
import static games.my.mrgs.notifications.MRGSNotificationCenter.NOTIFICATIONS_TYPE_REMOTE;

boolean isLocalEnabled = MRGSNotificationCenter.getInstance().isNotificationsEnabled(NOTIFICATIONS_TYPE_LOCAL);
boolean isRemoteEnabled = MRGSNotificationCenter.getInstance().isNotificationsEnabled(NOTIFICATIONS_TYPE_REMOTE);
boolean isAllEnabled = MRGSNotificationCenter.getInstance().isNotificationsEnabled(NOTIFICATIONS_TYPE_ALL);

Управление удалением полученных уведомлений на старте приложения🔗

В момент запуска приложения, MRGS удаляет все полученные уведомления пользователем из панели уведомлений для текущего приложение. Данное поведение можно отключить:

import games.my.mrgs.MRGServiceParams;

final MRGServiceParams params = ...;
params.setClearNotificationTrayEnabled(false);

Последнее обновление: 2023-10-25
Дата создания: 2020-01-20