Перейти к основному содержимому
Altcraft Docs LogoAltcraft Docs Logo
Пользователям iconПользователям
Разработчикам iconРазработчикам
Администраторам iconАдминистраторам
Русский
  • Русский
  • English
Войти
    API пользователяВзаимодействие с APIМатчинг
      Профилиarrow
    • Импортировать профильОбновить профильДобавить профиль в базу данныхПолучить информацию о профилеИмпортировать профиль в RabbitMQМассовое добавление профилей в базу данныхМассовое обновление профилейМассовый импорт профилейУдалить профильФункциональное обновление полей базыФункциональное обновление полей подпискиВыгрузка профилей в файлПолучение данных по нескольким профилямОбъединение нескольких профилейОтписать профиль от ресурсаРазделение профиля
        Историяarrow
      • Получить историю одного профиляПолучить историю нескольких профилей
        Связи профилейarrow
      • Добавить связьУдалить связьУсилить/ослабить связьПерезаписать значения свойств связиПолучить информацию о связях профиляПолучить список связей профиля
        Подпискиarrow
      • Добавить или редактировать подпискуПолучить все подписки профиляПолучить все подписки нескольких профилейПолучить информацию о подписке профиляУдалить подписку профиляВосстановить удаленную подписку профиляПриостановить все подпискиВосстановить все приостановленные подписки
      Базы данныхarrow
    • Получить список баз данныхПолучить информацию о базе данныхПолучить информацию о полях базы данныхОчистка базы данных для тестированияПолучить статистику по базе данныхОбновить статистику по базе данных
      Ресурсыarrow
    • Получить список ресурсовПолучить информацию о ресурсеПолучить информацию о полях подписки ресурсаПолучить статистику по ресурсамОбновить статистику по ресурсам
      Сегментыarrow
    • Добавить сегментОбновить сегментПолучить информацию о сегментеПолучить список сегментовУдалить сегментПолучить статистику по сегментамОбновить статистику по сегментамДобавить или удалить профильПолучить данные профилей статического или обновляемого сегмента
      Стоп-спискиarrow
    • Добавить стоп-списокПереименовать стоп-списокПолучить информацию о стоп-спискеПолучить информацию о нескольких стоп-списковУдалить стоп-списокВыгрузить данные из стоп-списка в файл
        Добавление и удаление из стоп-спискаarrow
      • Проверить email-адрес в стоп-спискеДобавить email-адрес в стоп-списокДобавить один или несколько email-адресов в стоп-списокУдалить email-адрес из стоп-спискаУдалить все email-адреса из стоп-спискаПроверить домен в стоп-спискеДобавить домен в стоп-списокДобавить один или несколько доменов в стоп-списокУдалить домен из стоп-спискаУдалить все домены из стоп-спискаПроверить номер телефона в стоп-спискеДобавить номер телефона в стоп-списокДобавить один или несколько номеров в стоп-списокУдалить номер из стоп-спискаУдалить все номера из стоп-списка
      Шаблоныarrow
    • Получить список шаблоновПолучить информацию о шаблонеУдалить шаблонДобавить шаблон сообщенияОбновить шаблон сообщенияChannel object
      Рассылкиarrow
    • Получить список рассылокПолучить информацию о рассылкеПолучить лог рассылкиКлонировать рассылкуУдалить рассылкуАктивировать рассылкуДеактивировать рассылкуПолучить статус рассылки
        Броадкаст рассылкиarrow
      • Получить список броадкаст рассылокПолучить информацию о броадкаст рассылкеДобавить броадкаст рассылкуОбновить броадкаст рассылкуЗапустить броадкаст рассылку
        Регулярные рассылкиarrow
      • Получить список регулярных рассылокПолучить информацию о регулярной рассылкеДобавить регулярную рассылкуОбновить регулярную рассылкуЗапустить регулярную рассылку
        Триггерыarrow
      • Получить список триггерных рассылокПолучить информацию о триггерной рассылкеДобавить триггерную рассылкуОбновить триггерную рассылкуЗапуск триггерной рассылки (API call)Импорт профиля + Отправка триггераЗадание на массовую отправку триггераЗадание на массовый импорт профилей + отправка триггераМассовая отправка триггераМассовый импорт профилей + отправка триггераКлонировать триггер рассылкуData array
      Кампанииarrow
    • Получить информацию о кампанииПолучить список кампанийАктивация кампанииЗавершение кампанииДеактивация кампанииПолучить статус кампании
      Сценарии (цепочки)arrow
    • Отправить профиль клиента в сценарийОдновременный импорт и запуск профиля в сценарийМассовый импорт и запуск профилей в сценарийЗадание на массовый импорт и запуск профилей в сценарийПолучить список сценариевАктивировать сценарийДеактивировать сценарийПолучить информацию о сценарииИзменить приоритет сценария
      Промокодыarrow
    • Импортировать промокодыПолучить информацию о промокодеАктивировать промокодОбновить промокодПривязать промокод к профилюОтвязать промокод от профиляПолучить все промокоды
      Программы лояльностиarrow
    • Получить уровень профиля в программе лояльностиЭкспорт транзакций балловСгораемые баллы за периодПолучение транзакций по счёту профиляПолучение списка триггерных промоакцийНачисление баллов участникуСписание баллов участникаПодтверждение временной транзакцииПредварительный расчет заказаПодтверждение заказаОтмена временной транзакцииОтмена балльной транзакцииПолучение баланса балльного счётаРегистрация участника в программе лояльностиМассовая регистрация участников в программу лояльностиЗадание на массовое добавление участников в программу лояльностиУдаление участника из программы лояльности
      Формыarrow
    • Получить информацию о формеПолучение списка формЭкспорт данных заполнения формы по пользователюЭкспорт данных заполнений формыОпубликовать формуСнять форму с публикацииУдалить форму
      Целиarrow
    • Регистрация события достижения цели
      Пуши приложенийarrow
    • Обработка и добавление подпискиДобавить события с app push
      Маркетarrow
      • Объекты маркетаarrow
      • Структура заказа (order data object)Product data objectСтруктура SKU (SKU data object)Категории (categories array)Custom fields array
        Заказыarrow
      • Импорт заказа и статусов позицийПолучить список заказовУдалить заказПолучить статус заказаИзменение статуса позиции заказа
        Продукты и SKUarrow
      • Импорт продуктов, SKU и категорийПолучение списка продуктовПолучение списка SKUИмпорт SKU и категорийУдалить продуктыУдалить SKU
      Отчеты и статистикаarrow
    • Получить сводный отчетПолучить отчет о возвратахПолучить отчет о недоставках
      Сендерыarrow
    • Получить список сендеров
        Виртуальные сендерыarrow
      • Получить список виртуальных сендеровПолучить информацию о виртуальном сендереКлонировать виртуальный сендерДобавить виртуальный сендерОбновить виртуальный сендерУдалить виртуальный сендер
      Объектыarrow
    • AKMTA objectContent objectCustom channels rules objectEmail rule objectFile objectProfile data objectSMS rule objectSender objectSender typesStart schedule objectSubscription objectTrigger types
      Запросы к внешним базам данныхarrow
      • Запросы сегментацииarrow
      • Добавить запрос сегментацииОбновить запрос сегментацииПолучить информацию о запросе сегментацииПолучить список запросов на сегментациюУдалить запрос сегментации
        Запросы для шаблоновarrow
      • Добавить запрос для шаблоновОбновить запрос для шаблоновПолучить информацию о запросе для шаблоновПолучить список запросов для шаблоновУдалить запрос для шаблонов
      Прочееarrow
    • Загрузить файлПолучить веб-версию сообщенияPush провайдерыДедупликация запросовРабота с API через RabbitMQСписок гендерных идентификацийПолучить допустимые значения полей browsers, devices, tz, oses, languages
    Список API-методовИмпорт и настройка коллекции API-методов в Postman
      SDKarrow
      • mSDKarrow
        • Androidarrow
        • Быстрый стартКонфигурация SDKФункционал SDKПубличный API SDK
            Настройка провайдеровarrow
          • Firebase Cloud MessagingHuawei Mobile ServicesRuStore
          iOSarrow
        • Быстрый стартКонфигурация SDKФункционал SDKПубличный API SDK
            Настройка провайдеровarrow
          • Apple Push Notification ServiceFirebase Cloud MessagingHuawei Mobile Services
          React Native (Android/iOS)arrow
        • Быстрый стартКонфигурация SDKФункционал SDKПубличный API SDKНастройка провайдеров
          Flutter (Android/iOS)arrow
        • Быстрый стартКонфигурация SDKФункционал SDKПубличный API SDKНастройка провайдеров
        Работа с ролевым и JWT-токеном
      Web Push SDK
  • SDK
  • mSDK
  • iOS
  • Публичный API SDK

Публичный API SDK

SDK собран из модулей: обязательного Core и опциональных Push, Target, Profile, In-App. Каждый модуль подключается отдельной зависимостью и открывается через соответствующее свойство объекта AltcraftSDK.shared — оно появляется в коде при подключении модуля:

AltcraftSDK.shared                   // Core: инициализация, аутентификация, события, очистка
AltcraftSDK.shared.authFunctions // Core: аутентификация пользователя
AltcraftSDK.shared.eventSDKFunctions // Core: подписка на события SDK
AltcraftSDK.shared.backgroundTasks // Core: фоновые задачи
AltcraftSDK.shared.push // Push: подписки, токены, уведомления
AltcraftSDK.shared.target // Target: отправка целей
AltcraftSDK.shared.profile // Profile: поля профиля
AltcraftSDK.shared.inApp // In-App: кампании и подписки
примечание

Классы фасадов Push, Target, Profile и InApp недоступны в Notification Service Extension: расширение работает в отдельном процессе. Для вызова API из NSE используется класс AltcraftNSE.

Core (обязательный модуль)​

class AltcraftSDK
AltcraftSDK
// Синглтон — точка входа в SDK
├─ static let shared: AltcraftSDK
// Инициализация SDK и установка конфигурации (completion вызывается на main)
├─ func initialization(
│ configuration: AltcraftConfiguration?,
│ completion: (@Sendable (Bool) -> Void)? = nil
│ ): Void
// Полная очистка данных SDK (кэш, БД, настройки), затем вызов completion
├─ func clear(completion: (() -> Void)? = nil): Void
// Установка App Group и инициализация Core Data под shared-контейнер
├─ func setAppGroup(groupName: String?): Void
// Регистрация JWT-провайдера для получения токенов
├─ func setJWTProvider(provider: JWTInterface): Void
// Поток SDK-событий (один активный подписчик)
├─ let eventSDKFunctions: SDKEvents
// Доступ к аутентификации пользователя
├─ let authFunctions: AuthAPI
// Регистрация периодических фоновых задач (BGAppRefreshTask)
└─ let backgroundTasks: BackgroundTask

// Опциональные модули (видны при линковке соответствующего модуля):
├─ var push: Push // AltcraftPush
├─ var target: Target // AltcraftTarget
├─ var profile: Profile // AltcraftProfile
└─ var inApp: InApp // AltcraftInApp
class AuthAPI
AuthAPI
// Аутентификация пользователя
├─ func authenticate(): Void
// Выход пользователя (восстановление анонимной сессии)
└─ func logOut(): Void

// ObjC-совместимые обёртки:
├─ func authenticateObjC(): Void
└─ func logOutObjC(): Void
class SDKEvents
SDKEvents
// Подписаться на события SDK (заменяет существующего подписчика)
├─ func subscribe(callback: @escaping (Event) -> Void): Void
// Перегрузка для совместимости: параметр queue игнорируется,
// колбэк всегда доставляется на main-потоке
├─ func subscribe(
│ on queue: DispatchQueue = .main,
│ callback: @escaping (Event) -> Void
│ ): Void
// Отписаться от событий (колбэк остаётся назначенным, доставка останавливается)
└─ func unsubscribe(): Void

// ObjC-совместимые обёртки:
├─ func subscribeObjC(_ callback: @escaping (Event) -> Void): Void
└─ func unsubscribeObjC(): Void
class Event — модель события SDK
Event
// Базовое событие SDK (универсальная телеметрия)
public let id: UUID // уникальный идентификатор события
public let function: String // имя функции SDK, создавшей событие
public let event: (any SDKEvent)? // типизированное событие (см. CoreEvents и события модулей)
public let message: String? // текстовое описание
public let value: [String: Any]? // дополнительные данные (nil-значения отфильтровываются)
public let date: Date // время события
public var objcValue: NSDictionary? // ObjC-доступ к value

// Конструктор
└─ init(
function: String,
event: (any SDKEvent)? = nil,
message: String? = nil,
value: [String: Any?]? = nil,
date: Date = Date()
)

// Событие-ошибка без автоматического повтора (наследует Event)
ErrorEvent : Event
// Событие-ошибка запроса с автоматическим повтором (наследует ErrorEvent)
RetryEvent : ErrorEvent

События сравниваются по id; Event, ErrorEvent и RetryEvent принимают одинаковый набор параметров конструктора.

enum CoreEvents — события Core-модуля
CoreEvents
// Общие события SDK
├─ configSet // SDK configuration is installed.
├─ sdkCleared // SDK data has been cleared
├─ initAwait // waiting for SDK initialization to complete
├─ userLogOut // User logged out. Anonymous session started
├─ backgroundTaskRegister // SDK background task is registered
├─ backgroundTaskCompleted // SDK background task completed
// Ошибки состояния и окружения
├─ configIsNotSet // the configuration is not set
├─ coreDataError // error in CoreData. Re-initialize the SDK.
├─ errorLoadModelInCoreData // failed to load model from framework.
├─ appGroupIsNotSet // App Group name was not set.
├─ contextIsUnavailable // core data context is unavailable
├─ invalidCoreDataEntityName // the coreData entity name is not valid
├─ entityNotFoundByID // entity not found by ID
├─ coreDataModelNotFoundInBundle // Core Data model was not found in any bundle
├─ coreDataModelMissingEntity // Core Data model is missing the required entity; the model did not load
├─ sdkInitWaitingExpired // SDK initialization timeout has expired
├─ notAuthenticatedError // user is not authenticated
// Некорректные значения
├─ invalidUrlValue // invalid apiUrl value - empty or null.
├─ invalidRTokenValue // invalid resource token value - resource token is empty.
├─ nonJsonObject // non-json object has been provided
├─ fieldsIsObjects // invalid values: not all values are primitives
// Отсутствие состояния SDK и проблемы окружения
├─ configIsNil // config data is nil
├─ userTagIsNil // userTag is null. It is impossible to identify the user
├─ permissionDenied // notification permission denied.
├─ backgroundTaskExpired // SDK background task expired
// Ошибки аутентификации
├─ jwtIsNil // JWT token is nil
├─ jwtParsingError // JWT parsing error
├─ externalAuthDataIsNil // external auth data is nil
├─ internalAuthDataIsNil // internal auth data is nil
// Ошибки создания и обработки запросов
├─ failedCreateRequest // Failed to create request.
├─ failedProcessingResponse // Failed processing the response
// Некорректные запросы и ответы
├─ responseDataIsNull // response data is null
├─ invalidRequestUrl // invalid request url
├─ invalidResponseFormat // invalid response format
// Успешные / неудачные API-запросы
├─ authenticateSuccessful // successful request: profile/authenticate
└─ authenticateFailed // failed request: profile/authenticate

Каждое событие — кейс перечисления со строковым сообщением: var message: String { get }.

actor BackgroundTask
BackgroundTask
// Зарегистрировать фоновую задачу SDK (BGAppRefreshTask)
├─ func registerBackgroundTask(): Void
// Запланировать повтор неудачных запросов
├─ func scheduleRetry(): Void
// Запланировать periodic-refresh при необходимости
├─ func scheduleRefreshIfNeeded(): Void
// Отменить запланированную задачу
└─ func cancelScheduled(): Void
class AltcraftConfiguration
// Класс конфигурации Altcraft SDK: URL API, ресурсный токен, сведения о
// приложении и флаг логов. Создаётся только через Builder.
// ObjC-совместим: AltcraftConfiguration / AltcraftConfiguration_Builder.
├─ @objc(AltcraftConfiguration_Builder) public final class Builder
│ // Все базовые параметры задаются в инициализаторе
│ ├─ init(
│ │ apiUrl: String, // URL API (обязательный)
│ │ rToken: String? = nil, // ролевой токен (опционально)
│ │ appInfo: AppInfo? = nil, // метаданные приложения (опционально)
│ │ enableLogging: Bool? = nil // флаг логов (опционально)
│ │ )
│ // ObjC-вариант инициализатора (AppInfoObjC)
│ ├─ init(
│ │ apiUrl: String,
│ │ rToken: String?,
│ │ appInfoObjC: AppInfoObjC?,
│ │ enableLogging: Bool
│ │ )
│ // Установить метаданные приложения (повторный вызов заменяет значение)
│ ├─ @discardableResult func setAppInfo(_ info: AppInfo?) -> Builder
│ // ObjC-вариант установки метаданных
│ ├─ @discardableResult func setAppInfo(_ dto: AppInfoObjC?) -> Builder
│ // Конфигурации модулей добавляются методами pushConfig() / inAppConfig()
│ // Построить валидную конфигурацию (nil, если apiUrl пуст)
│ └─ func build() -> AltcraftConfiguration?

Push (опциональный модуль)​

class Push
Push
// Доступ к API push-токенов
├─ var token: TokenAPI
// Доступ к API push-подписок и статусов
├─ var subscription: SubscriptionAPI
// Доступ к событиям push (доставка, открытие)
├─ var pushEvents: EventAPI
// Доступ к приёму и обработке push-уведомлений
└─ var notificationManager: NotificationManager
class TokenAPI
TokenAPI
// Зарегистрировать провайдера Apple Push Notification service (nil — снять)
├─ func setAPNSTokenProvider(_ provider: APNSInterface?): Void
// Зарегистрировать провайдера Firebase Cloud Messaging (nil — снять)
├─ func setFCMTokenProvider(_ provider: FCMInterface?): Void
// Зарегистрировать провайдера Huawei Mobile Services (nil — снять)
├─ func setHMSTokenProvider(_ provider: HMSInterface?): Void
// Асинхронно получить текущий push-токен (completion опционален)
├─ func getToken(completion: (@Sendable (TokenData?) -> Void)? = nil): Void
// ObjC-вариант получения токена
├─ func getPushTokenObjC(_ completion: ((TokenDataObjC?) -> Void)? = nil): Void
// Сохранить токен вручную (String для FCM/HMS, Data для APNs)
├─ func setToken(provider: String, pushToken: Any?): Void
// Применить новый приоритет провайдеров и инициировать обновление токена
├─ func changeProviderPriority(_ list: [String]): Void
// Форсировать обновление токена (определить провайдера → удалить (кроме APNs) → запросить новый)
├─ func forcedTokenUpdate(completion: (@Sendable () -> Void)? = nil): Void
// Удалить токен выбранного провайдера и вызвать completion
└─ func deleteToken(
provider: String,
completion: (@Sendable () -> Void)? = nil
): Void
class SubscriptionAPI
SubscriptionAPI
// Оформить подписку (status = SUBSCRIBED)
├─ func subscribe(
│ sync: Bool = true,
│ profileFields: [String: Any?]? = nil,
│ customFields: [String: Any?]? = nil,
│ cats: [CategoryData]? = nil,
│ replace: Bool? = nil,
│ skipTriggers: Bool? = nil
│ ): Void
// Отписаться (status = UNSUBSCRIBED)
├─ func unsubscribe(
│ sync: Bool = true,
│ profileFields: [String: Any?]? = nil,
│ customFields: [String: Any?]? = nil,
│ cats: [CategoryData]? = nil,
│ replace: Bool? = nil,
│ skipTriggers: Bool? = nil
│ ): Void
// Приостановить (status = SUSPENDED)
├─ func suspend(
│ sync: Bool = true,
│ profileFields: [String: Any?]? = nil,
│ customFields: [String: Any?]? = nil,
│ cats: [CategoryData]? = nil,
│ replace: Bool? = nil,
│ skipTriggers: Bool? = nil
│ ): Void
// Смена статуса подписки, указанной в JWT, с suspended на subscribed;
// остальные подписки с этим push-токеном сменят статус на suspended
├─ func unSuspend(
│ completion: @escaping @Sendable (
│ ResponseModel.ResponseWithHttpCode<ResponseModel.ResponseWithProfile>?
│ ) -> Void
│ ): Void
// Добавить функциональное поле профиля (set/incr/...)
├─ func actionField(key: String) -> ActionFieldBuilder
// Статус последней подписки профиля
├─ func latest(
│ completion: @escaping @Sendable (
│ ResponseModel.ResponseWithHttpCode<ResponseModel.ResponseWithProfile>?
│ ) -> Void
│ ): Void
// Статус подписки, соответствующей текущим токену и провайдеру
├─ func current(
│ completion: @escaping @Sendable (
│ ResponseModel.ResponseWithHttpCode<ResponseModel.ResponseWithProfile>?
│ ) -> Void
│ ): Void
// Статус последней подписки по провайдеру (если nil — используется текущий)
└─ func latestForProvider(
provider: String? = nil,
completion: @escaping @Sendable (
ResponseModel.ResponseWithHttpCode<ResponseModel.ResponseWithProfile>?
) -> Void
): Void

Для каждого метода есть ObjC-перегрузка, принимающая NSDictionary / CategoryDataObjC и возвращающая ResponseWithHttpCodeObjC.

class EventAPI
EventAPI
// Зафиксировать доставку Altcraft-push (вызывает delivery-событие)
├─ func deliveryEvent(from request: UNNotificationRequest): Void
// Зафиксировать открытие Altcraft-push (вызывает open-событие)
└─ func openEvent(from request: UNNotificationRequest): Void
class NotificationManager
// Менеджер входящих push-уведомлений: регистрация, показ, обработка клика
NotificationManager
// Синглтон (точка доступа)
├─ static let shared: NotificationManager
// Регистрация на push (delegate + requestAuthorization + registerForRemoteNotifications)
├─ func registerForPushNotifications(
│ for application: UIApplication,
│ completion: ((_ granted: Bool, _ error: Error?) -> Void)? = nil
│ ): Void
// Управление обработкой push-уведомлений в foreground (true — приложению)
├─ var customPushProcessing: Bool
// Управление обработкой кликов по уведомлениям (true — приложению)
├─ var customClickProcessing: Bool
// Колбэк для кастомной обработки уведомления в foreground
├─ var onForegroundNotification: (
│ (UNNotification, @escaping (UNNotificationPresentationOptions) -> Void) -> Void
│ )?
// Колбэк для кастомной обработки клика по уведомлению
├─ var onNotificationClick: (
│ (UNNotificationResponse, @escaping () -> Void) -> Void
│ )?
// События NotificationCenter, публикуемые SDK
├─ Notification.Name.altcraftPushWillPresent // уведомление показывается в foreground
└─ Notification.Name.altcraftPushDidReceive // нажатие на уведомление / action
Конфигурация Push-модуля
// Конфигурация добавляется в Builder методом pushConfig():
└─ func AltcraftConfiguration.Builder.pushConfig(
providerPriority: [String] = [], // Приоритет провайдеров push-уведомлений (опционально)
pushReceiverModules: [String] = [], // Префиксы пакетов с кастомными receivers (опционально)
pushChannelName: String? = nil, // Имя канала push-уведомлений (опционально)
pushChannelDescription: String? = nil // Описание канала push-уведомлений (опционально)
) -> Self

Target (опциональный модуль)​

class Target
Target
// Доступ к API регистрации целей
├─ var target: TargetAPI
// Отправить цель (target-событие) на сервер
└─ func sendTarget(
sid: String,
altcraftClientID: String = "",
eventName: String,
sendMessageId: String? = nil,
payload: [String: Any?]? = nil,
matching: [String: Any?]? = nil,
matchingType: String? = nil,
profileFields: [String: Any?]? = nil,
subscription: (any Subscription)? = nil,
utm: UTM? = nil
): Void
class TargetAPI
TargetAPI
// Отправить цель (target-событие) на сервер
└─ func sendTarget(
sid: String,
altcraftClientID: String = "",
eventName: String,
sendMessageId: String? = nil,
payload: [String: Any?]? = nil,
matching: [String: Any?]? = nil,
matchingType: String? = nil,
profileFields: [String: Any?]? = nil,
subscription: (any Subscription)? = nil,
utm: UTM? = nil
): Void

Profile (опциональный модуль)​

class Profile
Profile
// Доступ к API обновления полей профиля
├─ var update: UpdateAPI
// Обновить поля профиля
└─ func updateProfileFields(
profileFields: [String: Any?]? = nil,
skipTriggers: Bool? = nil
): Void
class UpdateAPI
UpdateAPI
// Обновить поля профиля
└─ func updateProfileFields(
profileFields: [String: Any?]? = nil,
skipTriggers: Bool? = nil
): Void

In-App (опциональный модуль)​

class InApp
InApp
// Подписка на жизненный цикл приложения для автоматического показа In-App
├─ func registerLifecycleTracking(): Void
// Установить маркер текущего экрана (используется при фильтрации In-App уведомлений)
├─ func setScreen(screen: String): Void
// Триггер кастомной In-App кампании по имени
├─ func trigger(name: String): Void
// Запрос доступных In-App placements
├─ func getPlacements(): Void
// Настроить анимацию In-App уведомления
├─ func animation(_ block: @escaping @MainActor (InAppAnimator) -> Void): Void
// Управление подписками на In-App уведомления
└─ var subscription: SubscribeAPI
class SubscribeAPI (In-App)
SubscribeAPI
// Подписка на In-App уведомления (status = SUBSCRIBED)
├─ func subscribe(
│ sync: Bool = true,
│ profileFields: [String: Any?]? = nil,
│ customFields: [String: Any?]? = nil,
│ cats: [CategoryData]? = nil,
│ replace: Bool? = nil,
│ skipTriggers: Bool? = nil
│ ): Void
// Отписка от In-App уведомлений (status = UNSUBSCRIBED)
├─ func unSubscribe(
│ sync: Bool = true,
│ profileFields: [String: Any?]? = nil,
│ customFields: [String: Any?]? = nil,
│ cats: [CategoryData]? = nil,
│ replace: Bool? = nil,
│ skipTriggers: Bool? = nil
│ ): Void
// Статус подписки на In-App уведомления
└─ func getSubscriptionStatus(
completion: @escaping @Sendable (
ResponseModel.ResponseWithHttpCode<ResponseModel.ResponseWithProfile>?
) -> Void
): Void
protocol InAppAnimator
InAppAnimator
// Идентификатор размещения, к которому относится аниматор
├─ var companyId: Int { get }
// Применить блок к In-App view мгновенно, без запуска анимации
├─ @MainActor func prepare(_ block: (UIView) -> Void): Void
// Настроить и запустить UIKit-анимацию для In-App view
└─ @MainActor func animate(
duration: TimeInterval,
delay: TimeInterval,
options: UIView.AnimationOptions,
animations: @escaping (UIView) -> Void,
completion: ((Bool) -> Void)?
): Void
Конфигурация In-App модуля
// Конфигурация добавляется в Builder методом inAppConfig():
└─ func AltcraftConfiguration.Builder.inAppConfig(
inAppAutoRequest: Bool = true, // Автоматический запрос In-App placements (опционально)
placementsRequestInterval: Measurement<UnitDuration> = 30 минут,
// Интервал автоматических запросов placements (опционально)
maxPlacements: Int = 500 // Максимум placements в локальном хранилище (опционально)
) -> Self

Модели данных​

Data Classes (Core)
// Метаданные приложения для аналитики (если используется)
public struct AppInfo: Codable, Sendable {
public var appID: String
public var appIID: String
public var appVer: String
}

// Обёртка ответа API вместе с HTTP-кодом
public struct ResponseWithHttpCode<T: ResponseData & Sendable> {
public let httpCode: Int?
public let response: T?
}

// Ответ запроса, содержащий данные профиля
public struct ResponseWithProfile: Codable {
public let error: Int?
public let errorText: String?
public let profile: ProfileData?
}

// Данные профиля пользователя
public struct ProfileData: Codable {
public let id: String?
public let status: String?
public let acid: String?
public let isTest: Bool?
public let subscription: SubscriptionData?
}

// Текущая подписка профиля
public struct SubscriptionData: Codable {
public let subscriptionId: String?
public let hashId: String?
public let provider: String?
public let status: String?
public let fields: [String: JSONValue]?
public let cats: [CategoryData]?
}

// Категория подписки (имя, заголовок, флаги)
public struct CategoryData: Codable {
public var name: String?
public var title: String?
public var steady: Bool?
public var active: Bool?
}
Data Classes (Push)
// Токен push-провайдера устройства
public struct TokenData: Codable, Hashable, Sendable {
public let provider: String
public let token: String
}
Data Classes (Target)
// Контейнер UTM-параметров для атрибуции целей (все поля опциональны)
public struct UTM: Codable {
public let campaign: String?
public let content: String?
public let keyword: String?
public let medium: String?
public let source: String?
public let temp: String?
}

// Базовый протокол всех типов подписок, добавляемых целью
public protocol Subscription {}

// Подписка на канал Email
public struct EmailSubscription: Subscription, Codable {
public let resourceId: Int
public let email: String
public let status: String?
public let priority: Int?
public let customFields: [String: JSONValue]?
public let cats: [String]?
public let channel: String = "email"
}

// Подписка на канал SMS
public struct SmsSubscription: Subscription, Codable {
public let resourceId: Int
public let phone: String
public let status: String?
public let priority: Int?
public let customFields: [String: JSONValue]?
public let cats: [String]?
public let channel: String = "sms"
}

// Подписка на push-канал
public struct PushSubscription: Subscription, Codable {
public let resourceId: Int
public let provider: String
public let subscriptionId: String
public let status: String?
public let priority: Int?
public let customFields: [String: JSONValue]?
public let cats: [String]?
public let channel: String = "push"
}

// Подписка с cc_data (Telegram, WhatsApp, Viber, Notify)
public struct CcDataSubscription: Subscription, Codable {
public let resourceId: Int
public let channel: String
public let ccData: [String: JSONValue]
public let status: String?
public let priority: Int?
public let customFields: [String: JSONValue]?
public let cats: [String]?
}

// Построитель функциональных операций (set/unset/incr/add/delete/upsert) над
// полем профиля. Результат — запись для словаря profileFields.
public struct ActionFieldBuilder {
public init(key: String)
public func set(value: Any?) -> [String: Any?]
public func unset(value: Any?) -> [String: Any?]
public func incr(value: Any?) -> [String: Any?]
public func add(value: Any?) -> [String: Any?]
public func delete(value: Any?) -> [String: Any?]
public func upsert(value: Any?) -> [String: Any?]
}
Constants
// Константы push-модуля
└─ enum PushConstants
// Провайдеры push-уведомлений
├─ enum ProviderName
│ ├─ static let apns = "ios-apns"
│ ├─ static let firebase = "ios-firebase"
│ └─ static let huawei = "ios-huawei"
Interfaces

JWTInterface (Core):

JWTInterface
// Доступ к текущему JWT
└─ func getToken() -> String?
// Возвращает текущий JWT или nil

APNSInterface (Push):

APNSInterface
// Контракт получения APNs-токена
└─ func getToken(completion: @escaping (String?) -> Void)
// Возвращает APNs-токен через completion или nil

FCMInterface (Push):

FCMInterface
// Контракт операций с FCM-токеном (получение/отзыв)
├─ func getToken(completion: @escaping (String?) -> Void)
│ // Возвращает FCM-токен через completion или nil
└─ func deleteToken(completion: @escaping (Bool) -> Void)
// Удаляет FCM-токен; completion(true|false)

HMSInterface (Push):

HMSInterface
// Контракт операций с HMS-токеном
├─ func getToken(completion: @escaping (String?) -> Void)
│ // Возвращает HMS-токен через completion или nil
└─ func deleteToken(completion: @escaping (Bool) -> Void)
// Удаляет HMS-токен; completion(true|false)

Subscription (Target):

Subscription (protocol)
// Базовый протокол для всех типов подписок, передаваемых с целью.
// Полиморфная сериализация, поле-дискриминатор — channel.
AltcraftNSE — вызов API из Notification Service Extension
AltcraftNSE
// Общий (singleton) экземпляр для централизованной логики NSE
├─ static let shared: AltcraftNSE
// Установка App Group и инициализация общего контейнера данных
├─ func setAppGroup(groupName: String?): Void
// Регистрация JWT-провайдера
├─ func setJWTProvider(provider: JWTInterface): Void

// Расширения модулей (видны при линковке соответствующего модуля):

// Push:
├─ func isAltcraftPush(_ request: UNNotificationRequest) -> Bool
├─ func handleNotificationRequest(
│ request: UNNotificationRequest,
│ contentHandler: @escaping (UNNotificationContent) -> Void
│ ): Void
├─ func serviceExtensionTimeWillExpire(): Void
// Target:
├─ func sendTarget(...): Void // те же параметры, что у Target.sendTarget
// Profile:
└─ func updateProfileFields(
profileFields: [String: Any?]? = nil,
skipTriggers: Bool? = nil
): Void
Последнее обновление 5 нояб. 2026 г.
Предыдущая страница
Функционал SDK
Следующая страница
Настройка провайдеров
  • Core (обязательный модуль)
  • Push (опциональный модуль)
  • Target (опциональный модуль)
  • Profile (опциональный модуль)
  • In-App (опциональный модуль)
  • Модели данных
© 2015 - 2026 Altcraft. Все права защищены.