SDK push-уведомлений для Kotlin и Java (версия 6.9.1)
Как push-sdk получает уведомления
На мобильном устройстве пользователя должно быть установлено приложение, которое отвечает за доставку push-уведомлений от нашего SDK. Такое приложение называется «дистрибьютором». Оно периодически обращается к серверу, проверяет наличие новых уведомлений для конкретного приложения, где включён наш SDK, и при их появлении отправляет push-уведомления в конечное приложение.
Основным дистрибьютором служит RuStore, однако если у пользователя нет RuStore, роль резервного дистрибьютора может взять на себя одно из других приложений VK. Выбор делается удалённо на сервере, поэтому мы не раскрываем полный список возможных резервных вариантов. Состав приложений-дистрибьюторов может динамически меняться, поэтому на устройстве конкретного пользователя в любой момент может оказаться другое приложение в этой роли.
Для проверки того, что приложение-дистрибьютор установлено на устройстве пользователя, используйте методRuStorePushClient.checkPushAvailability
.
На устройстве пользователя только одно приложение может работать в качестве дистрибьютора, остальные находятся в "спящем" режиме. Если дистрибьютор был удален с устройства или у него изменились настройки, которые могут влиять на доставку push-уведомлений, то новый дистрибьютор автоматически выберется из резервных.
Условия работы push-уведомлений
Ниже перечислены условия работы push-уведомлений.
- Подпись и package name различных типов сборок вашего приложения (debug, release и т.д.) могут отличаться друг от друга. В таком случае вы должны создать в разделе Push-уведомления > Проекты из Консоль RuStore проект под каждый тип сборки..
- Используется актуальная версия SDK.
- Загружены данные о приложении в разделе Push-уведомления > Проекты из Консоль RuStore.
На устройстве пользователя установлено приложение-дистрибьютор (RuStore и т.д.)
Для проверки того, что приложение-дистрибьютор установлено на устройстве пользователя, используйте методRuStorePushClient.checkPushAvailability
..- Если установлено приложение RuStore, то ему разрешен доступ к работе в фоновом режиме. Без этого разрешения push-уведомления будут приходить, но со значительной задержкой.
- Отпечаток подписи приложения, установленного на девайсе, совпадает с отпечатком подписи приложения, которое добавлено в разделе Push-уведомления > Проекты из Консоль RuStore.
Пример реализации
Ознакомьтесь с приложением-примером, чтобы узнать, как правильно интегрировать SDK push-уведомлений:
Подключение в проект
Добавление репозитория
repositories {
maven {
url = uri("https://artifactory-external.vkpartner.ru/artifactory/maven")
}
}
Подключение зависимости
dependencies {
implementation("ru.rustore.sdk:pushclient:6.9.1")
}
Редактирование манифеста приложения
Объявите службу, расширяющую RuStoreMessagingService
.
<service
android:name=".MyRuStoreMessagingService"
android:exported="true"
tools:ignore="ExportedService">
<intent-filter>
<action android:name="ru.rustore.sdk.pushclient.MESSAGING_EVENT" />
</intent-filter>
</service>
Если нужно изменить иконку или цвет стандартной нотификации, добавьте следующий код.
<meta-data
android:name="ru.rustore.sdk.pushclient.default_notification_icon"
android:resource="@drawable/ic_baseline_android_24" />
<meta-data
android:name="ru.rustore.sdk.pushclient.default_notification_color"
android:resource="@color/your_favorite_color" />
Если нужно переопределить канал уведомлений, добавьте следующий код.
<meta-data
android:name="ru.rustore.sdk.pushclient.default_notification_channel_id"
android:value="@string/pushes_notification_channel_id" />
При добавлении канала push-уведомлений вы должны создать канал самостоятельно.
Запрос разрешения на показ уведомлений в Android 13+
- Kotlin
- Java
В версии Android 13 появилось новое разрешение для отображения push-уведомлений. Это затронет все приложения, которые работают на Android 13 или выше и используют RuStore Push SDK.
По умолчанию RuStore Push SDK версии 1.4.0 и выше включает разрешение POST_NOTIFICATIONS
, определённое в манифесте.
Однако приложению также нужно запросить это разрешение во время выполнения через константу android.permission.POST_NOTIFICATIONS
.
Приложение сможет показывать push-уведомления, только когда пользователь предоставит на это разрешение.
Запрос разрешения на показ push-уведомлений.
// Declare the launcher at the top of your Activity/Fragment:
private val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestPermission(),
) { isGranted: Boolean ->
if (isGranted) {
// RuStore Push SDK (and your app) can post notifications.
} else {
// TODO: Inform user that your app will not show notifications.
}
}
private fun askNotificationPermission() {
// This is only necessary for API level>= 33 (TIRAMISU)
if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.TIRAMISU) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
PackageManager.PERMISSION_GRANTED) {
// RuStore Push SDK (and your app) can post notifications.
} else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) {
// TODO: display an educational UI explaining to the user the features that will be enabled
// by them granting the POST_NOTIFICATION permission. This UI should provide the user
// "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission.
// If the user selects "No thanks," allow the user to continue without notifications.
} else {
// Directly ask for the permission
requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
}
}
}
В версии Android 13 появилось новое разрешение для отображения push-уведомлений. Это затронет все приложения, которые работают на Android 13 или выше и используют RuStore Push SDK.
По умолчанию RuStore Push SDK версии 1.4.0 и выше включает разрешение POST_NOTIFICATIONS
, определённое в манифесте.
Однако приложению также нужно запросить это разрешение во время выполнения через константу android.permission.POST_NOTIFICATIONS
.
Приложение сможет показывать push-уведомления, только когда пользователь предоставит на это разрешение.
Запрос разрешения на показ push-уведомлений.
// Declare the launcher at the top of your Activity/Fragment:
private final ActivityResultLauncher<String> requestPermissionLauncher =
registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> {
if (isGranted) {
// RuStore Push SDK (and your app) can post notifications.
} else {
// TODO: Inform user that your app will not show notifications.
}
});
private void askNotificationPermission() {
// This is only necessary for API level>= 33 (TIRAMISU)
if (Build.VERSION.SDK_INT>= Build.VERSION_CODES.TIRAMISU) {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) ==
PackageManager.PERMISSION_GRANTED) {
// RuStore Push SDK (and your app) can post notifications.
} else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) {
// TODO: display an educational UI explaining to the user the features that will be enabled
// by them granting the POST_NOTIFICATION permission. This UI should provide the user
// "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission.
// If the user selects "No thanks," allow the user to continue without notifications.
} else {
// Directly ask for the permission
requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS);
}
}
}
Инициализация
Для инициализации понадобится идентификатор проекта из RuStore Консоль. Чтобы получить его, на странице приложения перейдите в раздел Push-уведомления > Проекты и скопируйте значение в поле ID проекта.

Ручная инициализация в Application
- Kotlin
- Java
Для инициализации добавьте в Application
вашего проекта следующий код.
class App : Application() {
override fun onCreate() {
super.onCreate()
RuStorePushClient.init(
application = this,
projectId = "i5UTx96jw6c1C9LvdlE4cdNrWHMNyRBt",
logger = DefaultLogger()
)
}
}
application
— экземпляр классаApplication
.projectId
— идентификатор вашего проекта из RuStore Консоль.logger
— логгер, по умолчанию используется вывод вlogcat
(опционально).
Для инициализации добавьте в Application
вашего проекта следующий код.
class App : Application() {
@Override
public void onCreate() {
super.onCreate()
RuStorePushClient.INSTANCE.init(
this,
"i5UTx96jw6c1C9LvdlE4cdNrWHMNyRBt",
DefaultLogger()
);
}
}
application
— экземпляр классаApplication
.projectId
— идентификатор вашего проекта из RuStore Консоль.logger
— логгер, по умолчанию используется вывод вlogcat
(опционально).
Автоматическая инициализация
- Kotlin
- Java
Для автоматической инициализации добавьте в AndroidManifest.xml
следующий код.
<meta-data
android:name="ru.rustore.sdk.pushclient.project_id"
android:value="i5UTx96jw6c1C9LvdlE4cdNrWHMNyRBt" />
<meta-data
android:name="ru.rustore.sdk.pushclient.params_class"
android:value="com.example.RuStorePushClientParams" />
projectId
— идентификатор вашего проекта из RuStore Консоль.- (опционально)
com.example.RuStorePushClientParams
— полное имя класса своей реализацииAbstractRuStorePushClientParams
илиSimpleRuStorePushClientParams
. Нужен для указания дополнительных параметров инициализации push-клиента.
Пример реализации AbstractRuStorePushClientParams
.
class RuStorePushClientParams(context: Context)
: AbstractRuStorePushClientParams(context) {
override fun getLogger(): Logger = DefaultLogger("your_tag")
override fun getTestModeEnabled(): Boolean = false
override fun getClientIdCallback(): ClientIdCallback =
ClientIdCallback { ClientId("your_gaid_or_oaid", ClientIdType.GAID) }
}
В реализации класса AbstractRuStorePushClientParams
должен быть только один конструктор с одним аргументом Context
.
Ручной вызов RuStorePushClient.init()
после автоматической инициализации будет проигнорирован.
Для автоматической инициализации добавьте в AndroidManifest.xml
следующий код.
<meta-data
android:name="ru.rustore.sdk.pushclient.project_id"
android:value="i5UTx96jw6c1C9LvdlE4cdNrWHMNyRBt" />
<meta-data
android:name="ru.rustore.sdk.pushclient.params_class"
android:value="com.example.RuStorePushClientParams" />
projectId
— идентификатор вашего проекта из RuStore Консоль.- (опционально)
com.example.RuStorePushClientParams
— полное имя класса своей реализацииAbstractRuStorePushClientParams
илиSimpleRuStorePushClientParams
. Нужен для указания дополнительных параметров инициализации push-клиента.
Пример реализации AbstractRuStorePushClientParams
.
public class RuStorePushClientParams extends AbstractRuStorePushClientParams {
public RuStorePushClientParams(@NonNull Context context) {
super(context);
}
@NonNull
@Override
public Logger getLogger() {
return new DefaultLogger("your_tag");
}
@Override
public boolean getTestModeEnabled() {
return false;
}
@Nullable
@Override
public ClientIdCallback getClientIdCallback() {
return () -> new ClientId("your_gaid_or_oaid", ClientIdType.GAID);
}
}
В реализации класса AbstractRuStorePushClientParams
должен быть только один конструктор с одним аргументом Context
.
Ручной вызов RuStorePushClient.init()
после автоматической инициализации будет проигнорирован.
Логирование событий
- Kotlin
- Java
Если вы хотите логировать события библиотеки push-уведомлений, добавьте в вызов RuStorePushClient.init
параметр logger
.
Этот параметр необязателен для инициализации.
Создайте интерфейс Logger
.
interface Logger {
fun verbose(message: String, throwable: Throwable? = null)
fun debug(message: String, throwable: Throwable? = null)
fun info(message: String, throwable: Throwable? = null)
fun warn(message: String, throwable: Throwable? = null)
fun error(message: String, throwable: Throwable? = null)
fun createLogger(tag: String): Logger
}
Если не передать Logger
, SDK использует реализацию по умолчанию с AndroidLog
.
public class DefaultLogger(
private val tag: String? = null,
) : Logger {
override fun verbose(message: String, throwable: Throwable?) {
Log.v(tag, message, throwable)
}
override fun debug(message: String, throwable: Throwable?) {
Log.d(tag, message, throwable)
}
override fun info(message: String, throwable: Throwable?) {
Log.i(tag, message, throwable)
}
override fun warn(message: String, throwable: Throwable?) {
Log.w(tag, message, throwable)
}
override fun error(message: String, throwable: Throwable?) {
Log.e(tag, message, throwable)
}
override fun createLogger(tag: String): Logger {
val newTag = if (this.tag != null) {
"${this.tag}:$tag"
} else {
tag
}
return DefaultLogger(newTag)
}
}
Если вы хотите логировать события библиотеки push-уведомлений, добавьте в вызов RuStorePushClient.init
параметр logger
.
Этот параметр необязателен для инициализации.
Создайте интерфейс Logger
.
public interface Logger {
void verbose(String message, Throwable throwable);
void debug(String message, Throwable throwable);
void info(String message, Throwable throwable);
void warn(String message, Throwable throwable);
void error(String message, Throwable throwable);
Logger createLogger(String tag);
}
Если не передать Logger
, SDK использует реализацию по умолчанию с AndroidLog
.
public class PushLogger implements Logger {
private final String tag;
public PushLogger(String tag) {
this.tag = tag;
}
@Override
public void debug( @NonNull String message, Throwable throwable) {
Log.d(tag, message, throwable);
}
@Override
public void error( @NonNull String message, Throwable throwable) {
Log.e(tag, message, throwable);
}
@Override
public void info( @NonNull String message, @Nullable Throwable throwable) {
Log.i(tag, message, throwable);
}
@Override
public void verbose( @NonNull String message, @Nullable Throwable throwable) {
Log.v(tag, message, throwable);
}
@Override
public void warn( @NonNull String message, @Nullable Throwable throwable) {
Log.w(tag, message, throwable);
}
@NonNull
@Override
public Logger createLogger( @NonNull String newTag) {
String combinedTag = (tag != null ) ? tag + ":" + newTag : newTag;
return new PushLogger(combinedTag);
}
}
Проверка возможности получать push-уведомления
Ниже перечислены условия работы push-уведомлений.
- Подпись и package name различных типов сборок вашего приложения (debug, release и т.д.) могут отличаться друг от друга. В таком случае вы должны создать в разделе Push-уведомления > Проекты из Консоль RuStore проект под каждый тип сборки..
- Используется актуальная версия SDK.
- Загружены данные о приложении в разделе Push-уведомления > Проекты из Консоль RuStore.
На устройстве пользователя установлено приложение-дистрибьютор (RuStore и т.д.)
Для проверки того, что приложение-дистрибьютор установлено на устройстве пользователя, используйте методRuStorePushClient.checkPushAvailability
..- Если установлено приложение RuStore, то ему разрешен доступ к работе в фоновом режиме. Без этого разрешения push-уведомления будут приходить, но со значительной задержкой.
- Отпечаток подписи приложения, установленного на девайсе, совпадает с отпечатком подписи приложения, которое добавлено в разделе Push-уведомления > Проекты из Консоль RuStore.
- Kotlin
- Java
RuStorePushClient.checkPushAvailability
.
RuStorePushClient.checkPushAvailability()
.addOnSuccessListener { result ->
when (result) {
FeatureAvailabilityResult.Available -> {
// Process push available
}
is FeatureAvailabilityResult.Unavailable -> {
result.cause.resolveForPush(requireContext())
}
}
}
.addOnFailureListener { throwable ->
// Process error
}
RuStorePushClient.INSTANCE.checkPushAvailability
.
RuStorePushClient.INSTANCE.checkPushAvailability()
.addOnSuccessListener(result -> {
// Process result
}
).addOnFailureListener(throwable -> {
// Process error
}
);
Методы для работы с push-токеном
Получение push-токена пользователя
- Kotlin
- Java
Если у пользователя нет push-токена, метод создаст и вернёт новый push-токен.
RuStorePushClient.getToken()
, чтобы получить текущий push-токен пользователя.
RuStorePushClient.getToken()
.addOnSuccessListener { result ->
// Process success
}
.addOnFailureListener { throwable ->
// Process error
}
Если у пользователя нет push-токена, метод создаст и вернёт новый push-токен.
RuStorePushClient.INSTANCE.getToken()
, чтобы получить текущий push-токен пользователя.
RuStorePushClient.INSTANCE.getToken()
.addOnSuccessListener(result -> {
// Process success
}
).addOnFailureListener(throwable -> {
// Process error
}
);
Удаление push-токена пользователя
- Kotlin
- Java
RuStorePushClient.deleteToken()
, чтобы удалить текущий push-токен пользователя.
RuStorePushClient.deleteToken()
.addOnSuccessListener { result ->
// Process success
}
.addOnFailureListener { throwable ->
// Process error
}
RuStorePushClient.deleteToken()
, чтобы удалить текущий push-токен пользователя.
RuStorePushClient.INSTANCE.deleteToken()
.addOnSuccessListener(result -> {
// Process success
}
).addOnFailureListener(throwable -> {
// Process error
}
);
Методы для работы с push-топиком
Подписка на push-уведомления по топику
- Kotlin
- Java
RuStorePushClient.subscribeToTopic(your_topic_name)
для подписки на топик.
RuStorePushClient.subscribeToTopic("your_topic_name")
.addOnSuccessListener { result ->
// Process subscribe success
}
.addOnFailureListener { throwable ->
// Process subscribe error
}
RuStorePushClient.subscribeToTopic(your_topic_name)
для подписки на топик.
RuStorePushClient.INSTANCE.subscribeToTopic("your_topic_name")
.addOnSuccessListener(result -> {
// Process subscribe success
}
).addOnFailureListener(throwable -> {
// Process subscribe error
}
);
Отписка от push-уведомлений по топику
- Kotlin
- Java
RuStorePushClient.unsubscribeFromTopic(your_topic_name)
для отписки от топика.
RuStorePushClient.unsubscribeFromTopic("your_topic_name")
.addOnSuccessListener { result ->
// Process unsubscribe success
}
.addOnFailureListener { throwable ->
// Process unsubscribe error
}
RuStorePushClient.unsubscribeFromTopic(your_topic_name)
для отписки от топика.
RuStorePushClient.INSTANCE.unsubscribeFromTopic("your_topic_name")
.addOnSuccessListener(result -> {
// Process unsubscribe success
}
).addOnFailureListener(throwable -> {
// Process unsubscribe error
}
);
Получение данных от RuStore SDK
- Kotlin
- Java
Чтобы получить данные от RuStore SDK, создайте свой сервис, который наследуется от RuStoreMessagingService
.
Ваш сервис должен обработать любой метод в течение 20 секунд с момента вызова. По истечении этого времени сервис может быть убит системой.
class MessagingService: RuStoreMessagingService() {
override fun onNewToken(token: String) {
}
override fun onMessageReceived(message: RemoteMessage) {
}
override fun onDeletedMessages() {
}
override fun onError(errors: List<RuStorePushClientException>) {
}
}
Название метода | Описание |
---|---|
| Метод вызывается при получении нового push-токена. После вызова этого метода ваше приложение становится ответственно за передачу нового push-токена на свой сервер. Метод возвращает значение нового токена. |
| Метод вызывается при получении нового push-уведомления. Если в объекте Получить |
| Метод вызывается, если один или не сколько push-уведомлений не доставлены на устройство. Например, если время жизни уведомления истекло до момента доставки. При вызове этого метода рекомендуется синхронизироваться со своим сервером, чтобы не пропустить данные. |
| Метод вызывается, если в момент инициализации возникает ошибка. Он возвращает массив объектов с ошибками. Возможные ошибки:
|
Все перечисленные методы вызываются в фоновом потоке.
Ваш сервис должен обработать любой метод в течение 20 секунд с момента вызова. По истечении этого времени сервис может быть убит системой.
public class MessagingService extends RuStoreMessagingService {
@Override
public void onNewToken(String token) {
}
@Override
public void onMessageReceived(RemoteMessage message) {
}
@Override
public void onDeletedMessages() {
}
@Override
public void onError(List<RuStorePushClientException> errors) {
}
}
Название метода | Описание |
---|---|
| Метод вызывается при получении нового push-токена. После вызова этого метода ваше приложение становится ответственно за передачу нового push-токена на свой сервер. Метод возвращает значение нового токена. |
| Метод вызывается при получении нового push-уведомления. Если в объекте Получить |
| Метод вызывается, если один или несколько push-уведомлений не доставлены на устройство. Например, если время жизни уведомления истекло до момента доставки. При вызове этого метода рекомендуется синхронизироваться со своим сервером, чтобы не пропустить данные. |
| Метод вызывается, если в момент инициализации возникает ошибка. Он возвращает массив объектов с ошибками. Возможные ошибки:
|
Все перечисленные методы вызываются в фоновом потоке.
Структура уведомления
- Kotlin
- Java
public data class RemoteMessage(
val messageId: String?,
val priority: Int,
val ttl: Int,
val from: String,
val collapseKey: String?,
val data: Map<String, String>,
val rawData: ByteArray?,
val notification: Notification?
)
messageId
— уникальный ID сообщения. Является идентификатором каждого сообщения.-
priority
— возвращает значение приоритетности (на данный момент не учитывается). Сейчас заложены следующие варианты:0
—UNKNOWN
;1
—HIGH
;2
—NORMAL
.
ttl
— время жизни push-уведомления типаInt
в секундах.from
— поле, по которому можно понять, откуда пришло уведомление:- для уведомлений, отправленных в топик, в поле отображается имя топика;
- в других случаях — часть вашего сервисного токена.
collapseKey
— идентификатор группы уведомлений (на данный момент не учитывается).data
— словарь, в который можно передать дополнительные данные для уведомления.rawData
— словарьdata
в виде массива байтов.notification
— объект уведомления.
public data class Notification(
val title: String?,
val body: String?,
val channelId: String?,
val imageUrl: Uri?,
val color: String?,
val icon: String?,
val clickAction: String?,
val clickActionType: ClickActionType?
)
title
— заголовок уведомления.body
— тело уведомления.channelId
— возможность задать канал, в который отправится уведомление. Актуально для Android 8.0 и выше.imageUrl
— прямая ссылка на изображение для вставки в уведомление. Изображение должно быть не более 1 Мбайт.color
— цвет уведомления в HEX-формате, строкой. Например,#0077FF
.icon
— значок уведомления изres/drawable
в формате строки, которая совпадает с названием ресурса.
Например, вres/drawable
есть значокsmall_icon.xml
, который доступен в коде черезR.drawable.small_icon
.
Чтобы значок отображался в уведомлении, сервер должен указать в параметреicon
значениеsmall_icon
.clickAction
— поле с помощью которого будет сформировано действие при клике на уведомление.clickActionType
— тип поляclickAction
.
enum class ClickActionType {
DEFAULT,
DEEP_LINK
}
-
DEFAULT
— тип поляclickAction
при которомclickAction
будет использоваться какintent action
для открытия активити по клику на уведомление. Подробнее смотри документацию. -
DEEP_LINK
— тип поляclickAction
при которомclickAction
будет использоваться какdeep link
для открытия активити по клику на уведомление. Подробнее смотри документацию.
public final class RemoteMessage {
public String getMessageId();
public int getPriority();
public int getTtl();
public String getFrom();
public String getCollapseKey();
public Map<String, String> getData();
public byte [] getRawData();
public Notification getNotification();
}
messageId
— уникальный ID сообщения. Является идентификатором каждого сообщения.-
priority
— возвращает значение приоритетности (на данный момент не учитывается). Сейчас заложены следующие варианты:0
—UNKNOWN
;1
—HIGH
;2
—NORMAL
.
ttl
— время жизни push-уве домления типаInt
в секундах.from
— поле, по которому можно понять, откуда пришло уведомление:- для уведомлений, отправленных в топик, в поле отображается имя топика;
- в других случаях — часть вашего сервисного токена.
collapseKey
— идентификатор группы уведомлений (на данный момент не учитывается).data
— словарь, в который можно передать дополнительные данные для уведомления.rawData
— словарьdata
в виде массива байтов.notification
— объект уведомления.
public final class Notification {
public String getTitle();
public String getBody();
public String getChannelId();
public Uri getImageUrl();
public String getColor();
public String getIcon();
public String getClickAction();
public ClickActionType getClickActionType();
}
title
— заголовок уведомления.body
— тело уведомления.channelId
— возможность задать канал, в который отправится уведомление. Актуально для Android 8.0 и выше.imageUrl
— прямая ссылка на изображение для вставки в уведомление. Изображение должно быть не более 1 Мбайт.color
— цвет уведомления в HEX-формате, строкой. Например,#0077FF
.icon
— значок уведомления изres/drawable
в формате строки, которая совпадает с названием ресурса.
Например, вres/drawable
есть значокsmall_icon.xml
, который доступен в коде черезR.drawable.small_icon
.
Чтобы значок отображался в уведомлении, сервер должен указать в параметреicon
значениеsmall_icon
.clickAction
— поле с помощью которого будет сформировано действие при клике на уведомление.clickActionType
— тип поляclickAction
.
enum ClickActionType {
DEFAULT,
DEEP_LINK
}
-
DEFAULT
— тип поляclickAction
при которомclickAction
будет использоваться какintent action
для открытия активити по клику на уведомление. Подробнее смотри документацию. -
DEEP_LINK
— тип поляclickAction
при которомclickAction
будет использоваться какdeep link
для открытия активити по клику на уведомление. Подробнее смотри документацию.
Создание канала для отправки уведомления
Для канала, в который отправляется уведомление, действует следующий приоритет.
-
Если в push-уведомлении есть поле
channelId
, RuStore SDK отправит уведомление в указанный канал. Ваше приложение должно создать этот канал заранее. -
Если в push-уведомлении нет поля
channelId
, но ваше приложение указало параметр с каналом вAndroidManifest.xml
, используется указанный канал. Ваше приложение должно создать этот канал заранее. -
Если в push-уведомлении нет поля
channelId
, и канал по умолчанию не задан вAndroidManifest.xml
, RuStore SDK создаст канал и отправит уведомление в него. В дальнейшем все уведомления без явного указания канала будут отправляться в этот канал.
Обработка ошибок
- Kotlin
- Java
-
Публичные методы класса RuStorePushClient при возникновении ошибки возвращают Throwable.
-
Метод onError класса RuStoreMessagingService может возвращать следующий набор ошибок:
UnauthorizedException
— пользователь не авторизован в RuStore. Ошибка может не возникать, даже если пользователь не авторизован в RuStore. Это поведение управляется динамически в Push SDK. Если ваши пользователи не получают такую ошибку, то все равно имеет смысл ее обрабатывать;HostAppNotInstalledException
— RuStore отсутствует на устройстве пользователя;HostAppBackgroundWorkPermissionNotGranted
— у RuStore нет разрешения на работу в фоне. Ошибка не критична. Пуши продолжат приходить, но хуже, чем если бы разрешение на работу в фоне было выдано.
Вышеперечисленные ошибки являются наследниками класса RuStorePushClientException, который в свою очередь является наследником клас са RuStoreException.
- Метод checkPushAvailability класса RuStorePushClient при успешном ответе в объекте FeatureAvailabilityResult.Unavailable возвращает ошибку HostAppNotInstalledException
Если вы хотите использовать UI-интерфейс для работы с ошибками, используйте метод resolveForPush
.
fun RuStoreException.resolveForPush(context: Context)
-
Публичные методы класса RuStorePushClient при возникновении ошибки возвращают Throwable.
-
Метод onError класса RuStoreMessagingService может возвращать следующий набор ошибок:
UnauthorizedException
— пользователь не авторизован в RuStore. Ошибка может не возникать, даже если пользователь не авторизован в RuStore. Это поведение управляется динамически в Push SDK. Если ваши пользователи не получают такую ошибку, то все равно имеет смысл ее обрабатывать;HostAppNotInstalledException
— RuStore отсутствует на устройстве пользователя;HostAppBackgroundWorkPermissionNotGranted
— у RuStore нет разрешения на работу в фоне. Ошибка не критична. Пуши продолжат приходить, но хуже, чем если бы разрешение на работу в фоне было выдано.
Вышеперечисленные ошибки являются наследниками класса RuStorePushClientException, который в свою очередь является наследником класса RuStoreException.
- Метод checkPushAvailability класса RuStorePushClient при успешном ответе в объекте FeatureAvailabilityResult.Unavailable возвращает ошибку HostAppNotInstalledException
Если вы хотите использовать UI-интерфейс для работы с ошибками, используйте метод resolveForPush()
.
public void PushRuStoreExceptionExtKt.resolveForPush(context);
Тестирование интеграции SDK
Ниже перечислены условия работы push-уведомлений.
- Подпись и package name различных типов сборок вашего приложения (debug, release и т.д.) могут отличаться друг от друга. В таком случае вы должны создать в разделе Push-уведомления > Проекты из Консоль RuStore проект под каждый тип сборки..
- Используется актуальная версия SDK.
- Загружены данные о приложении в разделе Push-уведомления > Проекты из Консоль RuStore.
На устройстве пользователя установлено приложение-дистрибьютор (RuStore и т.д.)
Для проверки того, что приложение-дистрибьютор установлено на устройстве пользователя, используйте методRuStorePushClient.checkPushAvailability
..- Если установлено приложение RuStore, то ему разрешен доступ к работе в фоновом режиме. Без этого разрешения push-уведомления будут приходить, но со значительной задержкой.
- Отпечаток подписи приложения, установленного на девайсе, совпадает с отпечатком подписи приложения, которое добавлено в разделе Push-уведомления > Проекты из Консоль RuStore.
- Kotlin
- Java
Чтобы начать тестирование SDK, включите тестовый режим.
RuStorePushClient.init(
application = this ,
projectId = "your_push_project_id" ,
testModeEnabled = true
)
SDK В тестовом режиме не взаимодействует с бэкэндом. В этом режиме формируется тестовый push-токен и работает доставка только тестовых push-уведомлений, отправляемых через SDK. Они отправляются следующим методом.
val testNotificationPayload = TestNotificationPayload(
title = "Test notification title",
body = "Test notification message",
imgUrl = "some_image_http_url",
data = mapOf("some_key" to "some_value")
)
RuStorePushClient.sendTestNotification(testNotificationPayload).addOnCompleteListener(object : OnCompleteListener<Unit> {
override fun onFailure(throwable: Throwable) {
// Process send test push error
}
override fun onSuccess(result: Unit) {
// Process send test push success
}
})
Чтобы начать тестирование SDK, включите тестовый режим.
RuStorePushClient.INSTANCE.init(
this ,
"your_push_project_id" ,
true
)
SDK В тестовом режиме не взаимодействует с бэкэндом. В этом режиме формируется тестовый push-токен и работает доставка только тестовых push-уведомлений, отправляемых через SDK. Они отправляются следующим методом.
TestNotificationPayload testNotificationPayload = new TestNotificationPayload(
"Test notification title" ,
"Test notification message" ,
"some_image_http_url" ,
data
);
RuStorePushClient.INSTANCE.sendTestNotification(testNotificationPayload)
.addOnCompleteListener( new OnCompleteListener<Void>() {
@Override
public void onComplete(Task<Void> task) {
if (task.isSuccessful()) {
// Process send test push success
} else {
Exception exception = task.getException();
// Process send test push error
}
}
});