Публичный API SDK
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
// Регистрация провайдера JWT
├─ fun setJWTProvider(provider: JWTInterface?): Unit
// Разрешить переинициализацию push-модуля в текущей сессии
├─ fun reinitializePushModuleInThisSession(): Unit
// Базовый получатель Altcraft push (можно переопределить)
├─ open class PushReceiver
│ // Обработка входящего push-сообщения
│ ├─ open fun pushHandler(context: Context, message: Map<String, String>): Unit
│ // Точка входа доставки push в SDK
│ └─ companion object
│ └─ fun takePush(context: Context, message: Map<String, String>): Unit
// Публичные функции подписки
├─ val pushSubscriptionFunctions: PublicPushSubscriptionFunctions
│ // Подписка на пуш уведомление(status = SUBSCRIBED)
│ ├─ fun pushSubscribe(
│ │ context: Context,
│ │ sync: Boolean = true,
│ │ profileFields: Map<String, Any?>? = null,
│ │ customFields: Map<String, Any?>? = null,
│ │ cats: List<DataClasses.CategoryData>? = null,
│ │ replace: Boolean? = null,
│ │ skipTriggers: Boolean? = null
│ │ ): Unit
│ // Приостановка подписки на push уведомления(status = SUSPENDED)
│ ├─ fun pushSuspend(
│ │ context: Context,
│ │ sync: Boolean = true,
│ │ profileFields: Map<String, Any?>? = null,
│ │ customFields: Map<String, Any?>? = null,
│ │ cats: List<DataClasses.CategoryData>? = null,
│ │ replace: Boolean? = null,
│ │ skipTriggers: Boolean? = null
│ │ ): Unit
│ // Отписка от push уведомлегний (status = UNSUBSCRIBED)
│ ├─ fun pushUnSubscribe(
│ │ context: Context,
│ │ sync: Boolean = true,
│ │ profileFields: Map<String, Any?>? = null,
│ │ customFields: Map<String, Any?>? = null,
│ │ cats: List<DataClasses.CategoryData>? = null,
│ │ replace: Boolean? = null,
│ │ skipTriggers: Boolean? = null
│ │ ): Unit
│ // смена статуса подписки указанной в JWT с suspended на subscribed, остальные подписки содержащие указанный push токен сменят статус с subscribed на suspended.
│ ├─ suspend fun unSuspendPushSubscription(context: Context): DataClasses.ResponseWithHttpCode?
│ // Статус последней подписки профиля
│ ├─ suspend fun getStatusOfLatestSubscription(context: Context): DataClasses.ResponseWithHttpCode?
│ // Статус последней подписки профиля по указанному провайдеру push уведомлений
│ ├─ suspend fun getStatusOfLatestSubscriptionForProvider(context: Context, provider: String? = null): DataClasses.ResponseWithHttpCode?
│ // Статус подписки с текущим токеном устройсва.
│ ├─ suspend fun getStatusForCurrentSubscription(context: Context): DataClasses.ResponseWithHttpCode?
│ // добавить функциональное поле профиля(set/incr/...)
│ └─ fun actionField(key: String): ActionFieldBuilder
// Публичные функции управления токенами
├─ val pushTokenFunctions: PublicPushTokenFunctions
│ // Сохранить токен провайдера вручную (onNewToken)
│ ├─ fun setPushToken(context: Context, provider: String, token: String): Unit
│ // Получить текущий токен устройства
│ ├─ suspend fun getPushToken(context: Context): DataClasses.TokenData?
│ // Зарегистрировать провайдера FCM
│ ├─ fun setFCMTokenProvider(provider: FCMInterface?): Unit
│ // Зарегистрировать провайдера HMS
│ ├─ fun setHMSTokenProvider(provider: HMSInterface?): Unit
│ // Зарегистрировать провайдера RuStore
│ ├─ fun setRuStoreTokenProvider(provider: RustoreInterface?): Unit
│ // Удалить токен у выбранного провайдера
│ ├─ suspend fun deleteDeviceToken(context: Context, provider: String, complete: () -> Unit): Unit
│ // Форс-обновление токена (удалить → обновить)
│ ├─ fun forcedTokenUpdate(context: Context, complete: () -> Unit): Unit
│ // Изменить приоритет провайдеров и обновить токен
│ └─ suspend fun changePushProviderPriorityList(context: Context, priorityList: List<String>): Unit
// Публичные функции отправки событий по пушам
├─ val pushEventFunction: PublicPushEventFunctions
│ // Зафиксировать доставку Altcraft-push (вызывает delivery-ивент)
│ ├─ fun deliveryEvent(context: Context, message: Map<String, String>? = null, uid: String? = null): Unit
│ // Зафиксировать открытие Altcraft-push (вызывает open-ивент)
│ └─ fun openEvent(context: Context, message: Map<String, String>? = null, uid: String? = null): Unit
// События SDK (один подписчик)
└─ val eventSDKFunctions: Events
// Подписаться на события SDK
├─ fun subscribe(newSubscriber: (DataClasses.Event) -> Unit): Unit
// Отписаться от событий SDK
└─ fun unsubscribe(): Unit
class AltcraftConfiguration
com.altcraft.sdk.config
└─ class AltcraftConfiguration private constructor(...)
// Класс инициализации конфигурации Altcraft SDK:
// URL API, ресурсный токен, сведения о приложении, флаг использования foreground service
// и настройки push-уведомлений (канал, модули получателя и приоритет провайдеров).
├─ class Builder(
│ apiUrl: String, // Базовый URL Altcraft API (обязательный)
│ icon: Int? = null, // ID ресурса иконки уведомлений (опционально)
│ rToken: String? = null, // Ролевой токен
│ usingService: Boolean = false, // Использовать foreground service при подписке/обновлении токена
│ serviceMessage: String? = null, // Текст уведомления foreground service (опционально)
│ appInfo: DataClasses.AppInfo? = null, // Метаданные Firebase Analytics (опционально)
│ providerPriorityList: List<String>? = null, // Приоритет провайдеров push уведомлений(опционально)
│ pushReceiverModules: List<String>? = null, // Пакеты модулей, где может быть переопределён PushReceiver (опционально)
│ pushChannelName: String? = null, // Имя канала push-уведомлений (опционально)
│ pushChannelDescription: String? = null // Описание канала push-уведомлений (опционально)
│ )
│ └─ fun build(): AltcraftConfiguration // Построить валидную конфигурацию
│
├─ fun getApiUrl(): String // Возвращает базовый URL Altcraft API
├─ fun getIcon(): Int? // Возвращает ID иконки для уведомлений (опционально)
├─ fun getRToken(): String? // Возвращает ресурсный токен (опционально)
├─ fun getUsingService(): Boolean // Признак использования foreground service при подписке/обновлении токена
├─ fun getServiceMessage(): String? // Сообщение уведомления foreground service (опционально)
├─ fun getAppInfo(): DataClasses.AppInfo? // Сведения о приложении (ID/IID/версия) (опционально)
├─ fun getProviderPriorityList(): List<String>? // Приоритет провайдеров push-уведомлений (опционально)
├─ fun getPushReceiverModules(): List<String>? // Модули с переопределениями PushReceiver (опционально)
├─ fun getPushChannelName(): String? // Имя канала уведомлений (опционально)
└─ fun getPushChannelDescription(): String? // Описание канала уведомлений (опционально)
Event Classes
Event
// Базовое событие SDK (универсальная телеметрия).
function: String
eventCode: Int?
eventMessage: String?
eventValue: Map<String, Any?>?
date: Date
Error
// Ошибка SDK, наследует Event.
function: String
eventCode: Int?
eventMessage: String?
eventValue: Map<String, Any?>?
date: Date
RetryError
// Ошибка запроса, для которого предусмотрен автоматический повтор и выполнение
function: String
eventCode: Int?
eventMessage: String?
eventValue: Map<String, Any?>?
date: Date
Data Classes
// Токен push-провайдера устройства
data class TokenData(
provider: String,
token: String
)
// Опциональные данные для Firebase Analytics (если используется)
data class AppInfo(
appID: String,
appIID: String,
appVer: String
)
asMap(): Map<String, String>
// Обёртка ответа API вместе с HTTP-кодом
data class ResponseWithHttpCode(
httpCode: Int?,
response: Response?
)
// Ответ запроса
data class Response(
error: Int? = null,
@SerialName("error_text") errorText: String? = null,
profile: ProfileData? = null
)
// Данные профиля пользователя
data class ProfileData(
id: String? = null,
status: String? = null,
@SerialName("is_test") isTest: Boolean? = null,
subscription: SubscriptionData? = null
)
// Текущая подписка профиля
data class SubscriptionData(
@SerialName("subscription_id") subscriptionId: String? = null,
@SerialName("hash_id") hashId: String? = null,
provider: String? = null,
status: String? = null,
fields: Map<String, JsonElement>? = null,
cats: List<CategoryData>? = null
)
// Категория подписки (имя, заголовок, флаги)
data class CategoryData(
name: String?,
title: String? = null,
steady: Boolean? = null,
active: Boolean?
)
// Подписка на канал Email (добавляется мобильным событием)
data class EmailSubscription(
@SerialName("resource_id") resourceId: Int,
email: String,
status: String? = null,
priority: Int? = null,
@SerialName("custom_fields") customFields: Map<String, @Contextual Any?>? = null,
cats: List<String>? = null,
@SerialName("channel") channel: String = "email"
)
// Подписка на канал SMS (добавляется мобильным событием)
data class SmsSubscription(
@SerialName("resource_id") resourceId: Int,
phone: String,
status: String? = null,
priority: Int? = null,
@SerialName("custom_fields") customFields: Map<String, @Contextual Any?>? = null,
cats: List<String>? = null,
@SerialName("channel") channel: String = "sms"
)
// Подписка на push-канал (добавляется мобильным событием)
data class PushSubscription(
@SerialName("resource_id") resourceId: Int,
provider: String,
@SerialName("subscription_id") subscriptionId: String,
status: String? = null,
priority: Int? = null,
@SerialName("custom_fields") customFields: Map<String, @Contextual Any?>? = null,
cats: List<String>? = null,
@SerialName("channel") channel: String = "push"
)
// Подписка с cc_data (Telegram, WhatsApp, Viber, Notify)
data class CcDataSubscription(
@SerialName("resource_id") resourceId: Int,
@SerialName("channel") channel: String,
@SerialName("cc_data") ccData: JsonObject,
status: String? = null,
priority: Int? = null,
@SerialName("custom_fields") customFields: Map<String, @Contextual Any?>? = null,
cats: List<String>? = null
)
// Контейнер UTM-параметров для атрибуции мобильных событий (все поля опциональны)
data class UTM(
campaign: String? = null,
content: String? = null,
keyword: String? = null,
medium: String? = null,
source: String? = null,
temp: String? = null
)
Interfaces
JWTInterface:
JWTInterface
// Доступ к текущему JWT
└─ fun getJWT(): String?
// Возвращает JWT или null
FCMInterface:
FCMInterface
// Контракт операций с FCM-токеном
├─ suspend fun getToken(): String?
│ // Возвращает токен FCM или null
└─ suspend fun deleteToken(completion: (Boolean) -> Unit)
// Удаляет токен FCM
HMSInterface:
HMSInterface
// Контракт операций с HMS-токеном
├─ suspend fun getToken(context: Context): String?
│ // Возвращает токен HMS или null
└─ suspend fun deleteToken(context: Context, complete: (Boolean) -> Unit)
// Удаляет токен HMS
RuStoreInterface:
RustoreInterface
// Контракт операций с RuStore-токеном
├─ suspend fun getToken(): String?
│ // Возвращает токен RuStore или null
└─ suspend fun deleteToken(complete: (Boolean) -> Unit)
// Удаляет токен RuStore
Subscription:
Subscription (sealed interface)
// Базовый контракт модели подписки для всех каналов
├─ val resourceId: Int
│ // Обязательный ID ресурса Altcraft (JSON: "resource_id")
├─ val status: String?
│ // Необязательный статус подписки
├─ val priority: Int?
│ // Необязательный приоритет
├─ val customFields: Map<String, Any?>?
│ // Необязательные стандартные и кастомные поля (JSON: "custom_fields")
├─ val cats: List<String>?
│ // Необязательные категории подписки
└─ val channel: String
// Обязательный тип канала (например, "email", "sms", "push", "telegram_bot", ...)