Обновление до версии 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. Это предотвращает лишнее возникновение анонимных пользователей:
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?) { }
})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) { }
});