FAQ
Общие вопросы
Где искать платформенные особенности интеграции?
Для каждой платформы есть отдельный раздел документации и собственный FAQ:
Как правильно вызывать setup() и auth()?
setup() нужно вызывать один раз за жизненный цикл приложения, а не на каждом экране или при каждом открытии отдельного раздела.
Метод auth() следует вызывать только после успешного завершения setup() и после проверки, что SDK уже инициализировано. Если запускать эти методы одновременно или в неверном порядке, можно получить ошибки авторизации и нестабильное поведение SDK.
Какие зависимости и ключи использовать для Carrot quest и Dashly?
Для Carrot quest и Dashly используются разные зависимости и разные ключи. Их нельзя смешивать между собой.
Если вы подключаете Carrot quest SDK, убедитесь, что используете зависимость и ключи именно от Carrot quest. Если используется международная сборка Dashly, необходимо подключать соответствующую зависимость и ключи от Dashly.
Если использовать ключи от одного продукта в сборке другого, SDK не сможет корректно авторизоваться.
Как настроить репозитории и coreLibraryDesugaring для Android и Flutter?
Для Android-проекта необходимо убедиться, что подключен корректный Maven-репозиторий SDK.
Для Flutter-проектов, особенно в release-сборках и при использовании актуальных версий Android Gradle Plugin, может потребоваться включить coreLibraryDesugaringEnabled true и добавить зависимость desugar_jdk_libs.
Если этих настроек нет, возможны ошибки при скачивании зависимостей или при сборке release-версии приложения.
Почему push-уведомления могут работать по-разному в фоне и при открытом приложении?
Когда приложение закрыто или находится в фоне, доставка push-уведомлений обычно выполняется через системные push-сервисы: FCM, Huawei Push Kit или APNs.
Когда приложение открыто, часть уведомлений может приходить через веб-сокеты SDK. Поэтому поведение уведомлений в foreground и background может отличаться.
Это важно учитывать при проверке доставки, диагностике дублей и разборе кейсов, когда push приходит даже при изменении конфигурации системного push-канала.
Можно ли перехватывать push-уведомления и сохранять их в собственную историю уведомлений?
Да. Для этого нужно обрабатывать уведомления на уровне платформы.
На Android обычно используются BroadcastReceiver для уведомлений, полученных через сокеты, и FirebaseMessagingService.onMessageReceived для уведомлений, полученных через FCM. На iOS для таких задач используется NotificationServiceExtension.
Такой подход позволяет сохранять текст и метаданные уведомления внутри собственного раздела приложения.
Поддерживается ли React Native?
Нет, React Native официально не поддерживается.
Если приложение написано на React Native, интеграция возможна только через собственные мосты к нативным SDK iOS и Android. В таком сценарии реализация и сопровождение полностью остаются на стороне приложения.
Как правильно использовать auth и hashedAuth?
Если используется метод auth, передавайте в него данные так, как описано в документации вашей платформы. В этом сценарии часть логики расчёта выполняется SDK.
Если используется hashedAuth, в SDK передаётся уже готовый хэш, который должен быть рассчитан на сервере. Для вычисления HMAC SHA-256 в качестве сообщения передаётся только userId, а в качестве ключа используется userAuthKey.
Не храните userAuthKey в клиентском коде, если используете серверный сценарий с hashedAuth.
Какие ограничения есть у кастомизации и UI?
У SDK есть платформенные ограничения, которые важно учитывать заранее.
Во Flutter тема интерфейса зависит от системных настроек устройства. На планшетах Android чат может открываться в альбомной ориентации согласно текущему дизайну SDK.
На iOS для записи событий рекомендуется использовать актуальные методы API, указанные в документации вашей версии SDK. Это помогает избежать ошибок интеграции и неоднозначного поведения при передаче параметров.
Как правильно выполнять выход пользователя и смену аккаунта?
При выходе пользователя из аккаунта необходимо корректно сбрасывать состояние SDK.
Для этого используйте штатные методы выхода или деинициализации на соответствующей платформе, например deInit() на Android и logout() на iOS. Это особенно важно, если на одном устройстве могут входить разные пользователи.
Если не очищать состояние SDK, сообщения, push-уведомления и данные профиля могут остаться привязанными к предыдущей сессии.
Чем отличаются pushNotificationsUnsubscribe() и pushCampaignsUnsubscribe()?
Эти методы решают разные задачи.
pushNotificationsUnsubscribe() используется для отписки устройства от push-уведомлений. pushCampaignsUnsubscribe() относится к подписке на push-кампании на уровне профиля в Carrot quest.
Если у вас есть требования по приватности, пользовательским настройкам подписки или внутренним сценариям согласия, важно выбрать правильный метод в зависимости от того, нужно ли отключить уведомления на устройстве или изменить маркетинговую подписку профиля.
Как настроить push-уведомления для Huawei-устройств?
На устройствах Huawei без Google Mobile Services стандартный сценарий через FCM может не работать.
Для таких устройств необходимо использовать Huawei Push Kit и выполнять отдельную настройку HMS-сценария. Если ваше приложение поддерживает аудиторию с Huawei-устройствами, эту настройку лучше предусмотреть заранее.
Что учитывать на Android 15 из-за edge-to-edge интерфейса?
Начиная с Android 15, система активнее использует edge-to-edge отображение интерфейса. Из-за этого элементы чата или служебные экраны могут визуально смещаться под статус-бар или системную навигацию, если в приложении не настроена корректная работа с Window Insets.
Если вы адаптируете приложение под Android 15, проверьте safe area и поведение экранов с SDK в полноэкранном режиме.