Перейти к основному содержимому
Документация для версии v73

Публичный 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", ...)