Skip to content

Обновление до версии 3.0.0

Версия 3.0.0 — мажорное обновление с ломающими изменениями в публичном API. Ниже перечислено то, что нужно учесть при переходе.

Новая система логирования

Методы setDebug(boolean) / isDebug() удалены. Уровень логирования задаётся через setLogLevel(SdkLogLevel) со значениями NONE, ERROR, WARN, INFO, DEBUG, VERBOSE. По умолчанию — NONE: SDK не пишет в логи ничего, в том числе в release-сборке (раньше часть логов выводилась всегда).

Дополнительно можно получать записи логов прямо в своём коде через setLogSink(...) (например, пробросить в свой логгер или крэш-репортер) и снять одномоментный срез состояния SDK для баг-репорта через getDiagnostics(). Чувствительные данные (токены, e-mail, идентификаторы) маскируются, пока не вызван setLogIncludeSensitive(true).

Примеры — в разделе Инициализация → Логи и диагностика.

Подписки на состояние удалены

Удалены методы addStateObserver / getStateFlow / addAuthStateObserver / getAuthStateFlow / addSessionExpiredObserver / getInitObservable, а также модели CarrotState / CarrotAuthState. Восстановление сессии теперь выполняется автоматически:

  • результат операций берите из их Callback;
  • факт инициализации — из Carrot.isInit().

UserProperty и Operation

Операция над свойством вынесена в отдельный enum Operation (io.carrotquest_sdk.android.models.Operation) со значениями в UPPER_CASE (UPDATE_OR_CREATE, SET_ONCE, ADD, DELETE, APPEND, UNION, EXCLUDE). Прежний вложенный UserProperty.Operation больше не используется.

Поле UserProperty.operation перестало быть публичным изменяемым — читается через getOperation(), а сам класс стал неизменяемым. Подробнее — в разделе Передача свойств.

Тип колбэка

Тип CarrotSDK.Callback убран — вместо него top-level io.carrotquest_sdk.android.Callback<T>. Брендовый Carrot.Callback сохранён как взаимозаменяемый подтип, поэтому существующий код с Carrot.Callback продолжает работать.

Запись событий

Параметры события больше не передаются JSON-строкой. Используйте типобезопасный билдер EventParams — SDK сам сериализует значения в JSON. Подробнее — в разделе Запись событий.

Push-хелперы принимают только Map<String, String>

Перегрузки с RemoteMessage и метод sendFcmToken(...) удалены. Пробрасывайте токен через sendPushToken(token), а входящие сообщения — через isCarrotPush(map) / sendPushNotification(map, context). Примеры — в разделе Push-уведомления.

Авторизация при старте

Если в приложении есть авторизация пользователей, вызывайте её при старте приложения — наилучшее место — onResponse колбэка setup. Это предотвращает лишнее возникновение анонимных пользователей:

kotlin
Carrot.setup(this, apiKey, object : Carrot.Callback<Boolean> {
    override fun onResponse(result: Boolean) {
        if (!result) return
        Carrot.auth(userId, userAuthKey, object : Carrot.Callback<String> {
            override fun onResponse(authedUserId: String?) { }
            override fun onFailure(e: Throwable?) { }
        })
    }
    override fun onFailure(e: Throwable?) { }
})
java
Carrot.setup(this, apiKey, new Carrot.Callback<Boolean>() {
    @Override
    public void onResponse(Boolean result) {
        if (!Boolean.TRUE.equals(result)) return;
        Carrot.auth(userId, userAuthKey, new Carrot.Callback<String>() {
            @Override
            public void onResponse(String authedUserId) { }
            @Override
            public void onFailure(Throwable e) { }
        });
    }
    @Override
    public void onFailure(Throwable e) { }
});