Push нотификации
Убедитесь, что предыдущие шаги выполнены успешно
- SDK подключено к проекту: добавлена зависимость
io.carrotquest:android-sdk(см. Установка) - Ключи взяты из раздела для разработчика (не из webApi): Ключи для SDK
- Инициализация выполнена успешно и в Logcat появилась надпись “SDK init success”
Результат шага
- Приложение принимает push-уведомления Carrot quest и шлёт в кабинет статистику показов/кликов
Для работы с уведомлениями Carrot quest SDK использует Firebase Cloud Messaging (FCM). Поэтому сначала нужно настроить FCM в проекте и загрузить серверный ключ в личный кабинет Carrot quest, а затем пробросить FCM-токен и входящие сообщения в SDK.
Применение ключа в настройках Carrot quest
В консоли Firebase перейдите в свой проект → Project settings → вкладка Service accounts → Generate new private key. Браузер скачает JSON-файл с ключом.
Зайдите в личный кабинет Carrot quest, откройте Настройки → Разработчикам → Push-уведомления для SDK и загрузите этот JSON.
Подробная инструкция по созданию Firebase-проекта: Настройка Firebase project | База знаний.
Подключение Firebase в проект
Добавьте Firebase в Android-приложение по официальной инструкции Firebase и убедитесь, что в build.gradle[.kts] модуля приложения подключён firebase-messaging:
implementation("com.google.firebase:firebase-messaging:24.1.0")implementation 'com.google.firebase:firebase-messaging:24.1.0'Отправка токена уведомлений в Carrot quest
В вашем FirebaseMessagingService (если такого ещё нет — создайте и зарегистрируйте в AndroidManifest.xml как обычный FirebaseMessagingService) переопределите onNewToken и пробросьте токен в SDK через Carrot.sendPushToken:
import com.google.firebase.messaging.FirebaseMessagingService
import io.carrotquest_sdk.android.Carrot
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onNewToken(token: String) {
super.onNewToken(token)
Carrot.sendPushToken(token)
}
}import com.google.firebase.messaging.FirebaseMessagingService;
import io.carrotquest_sdk.android.Carrot;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onNewToken(String token) {
super.onNewToken(token);
Carrot.sendPushToken(token);
}
}Обработка входящих push
В том же FirebaseMessagingService, в onMessageReceived, проверьте через Carrot.isCarrotPush, что сообщение пришло от Carrot quest, и передайте его в SDK методом Carrot.sendPushNotification. Свои собственные пуши обработайте как обычно:
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import io.carrotquest_sdk.android.Carrot
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onMessageReceived(message: RemoteMessage) {
super.onMessageReceived(message)
val pushData = message.data
if (Carrot.isCarrotPush(pushData)) {
Carrot.sendPushNotification(pushData, this)
} else {
// Логика показа собственных push-уведомлений
}
}
}import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
import io.carrotquest_sdk.android.Carrot;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage message) {
super.onMessageReceived(message);
if (Carrot.isCarrotPush(message.getData())) {
Carrot.sendPushNotification(message.getData(), this);
} else {
// Логика показа собственных push-уведомлений
}
}
}Настройка Huawei Push Kit
Чтобы доставлять пуши на устройства без Google-сервисов (Huawei), в дополнение к FCM можно использовать Huawei Push Kit (HPK). SDK сам определит, что устройство Huawei, и подменит канал доставки — со стороны интеграции достаточно пробросить HPK-токен и входящие сообщения теми же методами Carrot.sendPushToken / Carrot.isCarrotPush / Carrot.sendPushNotification.
Загрузка ключей в Carrot quest
Сначала интегрируйте HPK в своё приложение по инструкции Huawei. Затем в личном кабинете Carrot quest откройте Настройки → Разработчикам → Push-уведомления для SDK и заполните Client ID, Client Secret и Webhook Secret.
Передача токена и обработка push
Создайте сервис, унаследованный от HmsMessageService, и пробросьте в SDK токен и входящие сообщения:
import android.os.Bundle
import com.huawei.hms.push.HmsMessageService
import com.huawei.hms.push.RemoteMessage
import io.carrotquest_sdk.android.Carrot
class MyHuaweiPushKitService : HmsMessageService() {
override fun onMessageReceived(message: RemoteMessage?) {
val pushData = message?.dataOfMap.orEmpty()
if (Carrot.isCarrotPush(pushData)) {
Carrot.sendPushNotification(pushData, this)
} else {
// Логика показа собственных push-уведомлений
}
}
override fun onNewToken(token: String?) {
super.onNewToken(token)
Carrot.sendPushToken(token)
}
override fun onNewToken(token: String?, bundle: Bundle?) {
super.onNewToken(token, bundle)
Carrot.sendPushToken(token)
}
}import android.os.Bundle;
import com.huawei.hms.push.HmsMessageService;
import com.huawei.hms.push.RemoteMessage;
import io.carrotquest_sdk.android.Carrot;
import java.util.Collections;
import java.util.Map;
public class MyHuaweiPushKitService extends HmsMessageService {
@Override
public void onMessageReceived(RemoteMessage message) {
Map<String, String> pushData = message != null ? message.getDataOfMap() : Collections.emptyMap();
if (Carrot.isCarrotPush(pushData)) {
Carrot.sendPushNotification(pushData, this);
} else {
// Логика показа собственных push-уведомлений
}
}
@Override
public void onNewToken(String token) {
super.onNewToken(token);
Carrot.sendPushToken(token);
}
@Override
public void onNewToken(String token, Bundle bundle) {
super.onNewToken(token, bundle);
Carrot.sendPushToken(token);
}
}Не забудьте зарегистрировать сервис в AndroidManifest.xml по инструкции HMS.
Иконка и цвет уведомления
Иконку и цвет уведомлений Carrot quest можно настроить под свой бренд.
Иконка — одним из двух способов:
- вызвать после
Carrot.setup(...):kotlinCarrot.setNotificationIcon(R.drawable.ic_my_notification)javaCarrot.setNotificationIcon(R.drawable.ic_my_notification); - либо положить в
res/drawableиконку с именемic_cq_notification.xml.
Цвет задаётся в ресурсах через имя colorCqNotify:
<color name="colorCqNotify">#EF7F28</color>Возврат на свой экран после чата из пуша
Если пользователь открывает чат по тапу на пуше при закрытом приложении, после закрытия чата процесс завершится — стартовая Activity не запустится. Чтобы вернуть управление в нужный экран, передайте полное имя класса Activity в SDK:
Carrot.setParentActivityClassName("com.example.MainActivity")Carrot.setParentActivityClassName("com.example.MainActivity");Метод отписки от пушей
Данные методы помогут отписать конкретного пользователя от пушей и от всех рассылок.
Метод для отписки от пушей
kotlinCarrot.pushNotificationsUnsubscribe()javaCarrot.pushNotificationsUnsubscribe();Метод для отписки от всех рассылок
kotlinCarrot.pushCampaignsUnsubscribe()javaCarrot.pushCampaignsUnsubscribe();
Настройка push уведомлений
О том, как настроить триггерные push-уведомления в мобильном приложении: Триггерные сообщения в мобильном приложении | База знаний.
FAQ
Почему могут не приходить пуши?
Неверные ключи
Были взяты ключи из webApi, а не из раздела Разработчикам.
Решение: вернитесь в раздел Ключи для SDK и проверьте, всё ли вы сделали правильно