Публичный API SDK
SDK собран из модулей: обязательного Core и опциональных Push, Target, Profile, In-App. Каждый модуль подключается отдельной зависимостью и открывается через соответствующее свойство объекта AltcraftSDK:
AltcraftSDK // Core: инициализация, аутентификация, события, очистка
AltcraftSDK.auth // Core: аутентификация пользователя
AltcraftSDK.push // Push: подписки, токены, уведомления
AltcraftSDK.target // Target: отправка целей
AltcraftSDK.profile // Profile: поля профиля
AltcraftSDK.inApp // In-App: кампании и подписки
Core (обязательный модуль)
object AltcraftSDK
AltcraftSDK
// Инициализация SDK и установка конфигурации
├─ fun initialization(context: Context, configuration: AltcraftConfiguration, complete: ((Result<Unit>) -> Unit)? = null): Unit
// Полная очистка данных SDK (БД, SP, фоновые задачи)
├─ fun clear(context: Context, onComplete: (() -> Unit)? = null): Unit
// Разрешить переинициализацию retry-операций и проверки токена в текущей сессии
├─ fun unlockInitialOperationsInThisSession(): Unit
// Доступ к аутентификации пользователя
├─ val auth: AuthAPI
// Доступ к событиям SDK (один подписчик)
└─ val sdkEvents: SDKEvents
object AuthAPI
AuthAPI
// Установить провайдера JWT-токенов (null — снять)
├─ fun setJWTProvider(provider: JWTInterface?): Unit
// Аутентификация пользователя
├─ fun authenticate(context: Context): Unit
// Выход пользователя (восстановление анонимной сессии)
├─ fun logOut(context: Context): Unit
// Проверка статуса аутентификации
└─ suspend fun isAuthenticated(context: Context): Boolean
object SDKEvents
SDKEvents
// Доступ к подписке на события SDK
├─ val subscription: Events.Subscription
// Типы событий Core-модуля
└─ val moduleEvents: CoreEvents
object Events.Subscription
Events.Subscription
// Подписаться на события SDK (заменяет существующего подписчика)
├─ fun subscribe(newSubscriber: (Event) -> Unit): Unit
// Отписаться от событий SDK
└─ fun unsubscribe(): Unit
object CoreEvents — публичные события Core-модуля
CoreEvents
// Общие события SDK
├─ val configIsSet: SDKEvent // SDK configuration is installed
├─ val sdkCleared: SDKEvent // SDK data has been cleared
├─ val notAuthenticatedError: SDKEvent // User is not authenticated
├─ val userLogOut: SDKEvent // User logged out. Anonymous session started.
├─ val roomMigrationError: SDKEvent // Room database migration failed. The local SDK database will be recreated.
// Успешные API-запросы
├─ val authenticateSuccessful: SDKEvent // successful request: profile/authenticate
// Неудачные API-запросы
└─ val pushStatusRequestFailed: SDKEvent // failed request: push/status
Внутренние события Core (ошибки состояния, парсинга JWT, отсутствия сети и т.п.) в перечислении есть, но в публичном API не документируются.
class AltcraftConfiguration
com.altcraft.sdk.config
└─ class AltcraftConfiguration private constructor(...)
// Класс конфигурации Altcraft SDK: URL API, ресурсный токен, сведения о
// приложении, флаг логов и конфигурации опциональных модулей.
├─ val apiUrl: String
├─ val rToken: String?
├─ val appInfo: AppInfo?
└─ val enableLogging: Boolean?
└─ class Builder(
apiUrl: String, // Базовый URL Altcraft API (обязательный)
rToken: String? = null, // Ролевой токен (опционально)
appInfo: AppInfo? = null, // Сведения о приложении (опционально)
enableLogging: Boolean? = null // Включает/отключает ведение логов (опционально)
)
// Добавить конфигурацию опционального модуля (повторный вызов для того
// же модуля заменяет предыдущую конфигурацию)
├─ fun addModuleConfiguration(configuration: ModuleConfiguration): Builder
// Построить валидную конфиг урацию
└─ fun build(): AltcraftConfiguration
Push (опциональный модуль)
object Push
Push
// Доступ к API push-токенов
├─ val token: TokenAPI
// Доступ к событиям push (доставка, открытие)
├─ val pushEvents: EventAPI
// Типы событий Push-модуля
├─ val moduleEvents: ModuleEvents
// Доступ к приёму входящих push-уведомлений
├─ val receiver: PushReceiverApi
// Доступ к подпискам на push-уведомления
├─ val subscription: SubscriptionAPI
// Запрос разрешения на отправку уведомлений (Android 13+)
└─ fun requestNotificationPermission(context: Context, activity: ComponentActivity): Unit
object PushReceiverApi
PushReceiverApi
// Проверить, принадлежит ли push-уведомление Altcraft
├─ fun isAltcraftPush(message: Map<String, String>): Boolean
// Передать входящее push-уведомление в SDK
└─ fun takePush(context: Context, message: Map<String, String>): Unit
open class PushReceiver
PushReceiver
// Обработка входящего push-уведомления.
// Переопределяется для кастомного показа уведомления. SDK ищет реализации
// рефлексией в пакетах, указанных в PushConfiguration.pushReceiverModules;
// при отсутствии находит стандартную реализацию и вызывает pushHandler.
└─ open suspend fun pushHandler(context: Context, message: Map<String, String>): Unit
object TokenAPI
TokenAPI
// Зарегистрировать провайдера FCM (null — снять)
├─ fun setFCMTokenProvider(provider: FCMInterface?): Unit
// Зарегистрировать провайдера HMS (null — снять)
├─ fun setHMSTokenProvider(provider: HMSInterface?): Unit
// Зарегистрировать провайдера RuStore (null — снять)
├─ fun setRuStoreTokenProvider(provider: RustoreInterface?): Unit
// Получить текущий токен устройства
├─ suspend fun getToken(context: Context): TokenData?
// Удалить токен у выбранного провайдера
├─ suspend fun deleteToken(context: Context, provider: String): Unit
// Форс-обновление токена (удалить → обновить)
├─ suspend fun forcedTokenUpdate(context: Context): Unit
// Сохранить токен провайдера вручную
├─ suspend fun setToken(context: Context, provider: String?, token: String?): Unit
// Изменить приоритет провайдеров и обновить токен
└─ suspend fun changeProviderPriority(context: Context, priority: List<String>): Unit
object EventAPI
EventAPI
// Зафиксировать доставку Altcraft-push (вызывает delivery-ивент)
├─ suspend fun deliveryEvent(context: Context, message: Map<String, String>? = null, messageUID: String? = null): Unit
// Зафиксировать открытие Altcraft-push (вызывает open-ивент)
└─ suspend fun openEvent(context: Context, message: Map<String, String>? = null, messageUID: String? = null): Unit
object SubscriptionAPI
SubscriptionAPI
// Статусы push-подписки
├─ val status: StatusAPI
// Подписка на push-уведомление (status = SUBSCRIBED)
├─ fun subscribe(context: Context, sync: Boolean = true, profileFields: Map<String, Any?>? = null, customFields: Map<String, Any?>? = null, cats: List<CategoryData>? = null, replace: Boolean? = null, skipTriggers: Boolean? = null): Unit
// Приостановка подписки на push-уведомления (status = SUSPENDED)
├─ fun suspend(context: Context, sync: Boolean = true, profileFields: Map<String, Any?>? = null, customFields: Map<String, Any?>? = null, cats: List<CategoryData>? = null, replace: Boolean? = null, skipTriggers: Boolean? = null): Unit
// Отписка от push-уведомлений (status = UNSUBSCRIBED)
├─ fun unsubscribe(context: Context, sync: Boolean = true, profileFields: Map<String, Any?>? = null, customFields: Map<String, Any?>? = null, cats: List<CategoryData>? = null, replace: Boolean? = null, skipTriggers: Boolean? = null): Unit
// Смена статуса подписки указанной в JWT с suspended на subscribed, остальные
// подписки, содержащие указанный push-токен, сменят статус с subscribed на suspended
├─ suspend fun unSuspend(context: Context): ResponseWithHttpCode<ResponseWithProfile>?
// Добавить функциональное поле профиля (set/incr/...)
└─ fun actionField(key: String): ActionFieldBuilder
object StatusAPI
StatusAPI
// Статус последней подписки профиля
├─ suspend fun latest(context: Context): ResponseWithHttpCode<ResponseWithProfile>?
// Статус подписки с текущим токеном устройства
├─ suspend fun current(context: Context): ResponseWithHttpCode<ResponseWithProfile>?
// Статус последней подписки профиля по указанному провайдеру push-уведомлений
└─ suspend fun latestForProvider(context: Context, provider: String? = null): ResponseWithHttpCode<ResponseWithProfile>?
Конфигурация Push-модуля
com.altcraft.sdk.push.config
// Настройки push-модуля передаются в Builder напрямую:
└─ fun AltcraftConfiguration.Builder.pushConfig(
icon: Int? = null, // ID ресурса иконки уведомлений (опционально)
providerPriority: List<String> = emptyList(), // Приоритет провайдеров push-уведомлений (опционально)
pushReceiverModules: List<String> = emptyList(), // Пакеты, где может быть переопределён PushReceiver (опционально)
pushChannelName: String? = null, // Имя канала push-уведомлений (опционально)
pushChannelDescription: String? = null // Описание канала push-уведомлений (опционально)
): AltcraftConfiguration.Builder