Перейти к основному содержимому
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 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
  • Flutter (Android/iOS)
  • Публичный API SDK

Публичный API SDK

class AltcraftSDK

Точка входа в SDK. Все методы статические. JWT-провайдер и push token providers регистрируются нативно: Application.onCreate на Android и AppDelegate на iOS. Через Dart API передаются конфигурация, команды подписки, мобильные события, push-токены, события SDK и вспомогательные операции.

AltcraftSDK
// ---- Инициализация и состояние ----
├─ static Future<void> initialize(AltcraftConfig config)
├─ static Future<void> clear()
├─ static Future<bool> requestNotificationPermission()
└─ static Future<void> unlockInitialOperationsInThisSession()

// ---- Подписка на push ----
├─ static Future<void> pushSubscribe({bool? sync, ...})
├─ static Future<void> pushSuspend({bool? sync, ...})
├─ static Future<void> pushUnSubscribe({bool? sync, ...})
└─ static Future<ResponseWithHttpCode?> unSuspendPushSubscription()

// ---- Статус подписки ----
├─ static Future<ResponseWithHttpCode?> getStatusOfLatestSubscription()
├─ static Future<ResponseWithHttpCode?> getStatusForCurrentSubscription()
└─ static Future<ResponseWithHttpCode?> getStatusOfLatestSubscriptionForProvider(String? provider)

// ---- События SDK ----
├─ static Stream<SdkEvent> subscribeToEvents()
└─ static Future<void> unsubscribeFromEvents()

// ---- Мобильные события и профиль ----
├─ static Future<void> mobileEvent({required String sid, required String eventName, ...})
└─ static Future<void> updateProfileFields({Map<String, dynamic>? profileFields, bool? skipTriggers})

// ---- Push-токены ----
├─ static Future<TokenData?> getPushToken()
├─ static Future<void> setPushToken(String provider, String? token)
├─ static Future<void> forcedTokenUpdate()
├─ static Future<void> deleteDeviceToken(String provider)
└─ static Future<void> changePushProviderPriorityList(List<String> priorityList)

// ---- Push-уведомления ----
├─ static Future<void> takePush(Map<String, String> message)
├─ static Future<bool> isAltcraftPush(Map<String, String> message)
├─ static Future<void> deliveryEvent(Map<String, String>? message, String? messageUID)
└─ static Future<void> openEvent(Map<String, String>? message, String? messageUID)

// ---- Native storage ----
├─ static Future<void> setAppGroup(String? groupName)
└─ static Future<void> setUserDefaultsValue(String? suiteName, String key, String? value)
Обработка ошибок

Большинство методов возвращает Future<void> и не возвращает серверный ответ напрямую. Ошибки платформенного вызова приходят как AltcraftException. Серверный результат операций подписки, обновления профиля, мобильных событий и retry-ошибок нужно читать через subscribeToEvents().


Инициализация​

initialize(config)

static Future<void> initialize(AltcraftConfig config)

Инициализирует Altcraft SDK с заданной конфигурацией. Вызывается один раз при старте приложения, до выполнения основных SDK-операций.

ПараметрТипОписание
configAltcraftConfigОбъект конфигурации SDK. Поле apiUrl обязательно.

Возвращает: Future<void> — завершается, когда нативный SDK завершил инициализацию.

Выбрасывает: AltcraftException при ошибке конфигурации или инициализации. Основные коды: ALTCRAFT_INIT_INVALID_CONFIG, ALTCRAFT_INIT_ERROR, INITIALIZATION_FAILED, SDK_ERROR.

import 'package:altcraft_sdk/altcraft_sdk.dart';
import 'package:flutter/widgets.dart';

Future<void> main() async {
WidgetsFlutterBinding.ensureInitialized();

await AltcraftSDK.initialize(
const AltcraftConfig(
apiUrl: 'https://pxl-demo.altcraft.com',
appInfo: AppInfo(
appID: '1:100000000000:android:1000000000000000',
appIID: '10000000-0000-4000-8000-000000000001',
appVer: '1.0.0',
),
providerPriorityList: ['android-firebase'],
enableLogging: true,
),
);

runApp(const MyApp());
}

clear()

static Future<void> clear()

Очищает данные SDK на нативной стороне: локальное хранилище SDK, сохранённые токены и отложенные операции.

Возвращает: Future<void>.
Выбрасывает: AltcraftException при ошибке.

requestNotificationPermission()

static Future<bool> requestNotificationPermission()

Запрашивает разрешение POST_NOTIFICATIONS на Android 13+. На Android ниже 13 возвращает true, так как runtime-разрешение не требуется. На iOS этот Dart-метод не запрашивает разрешение и возвращает false; iOS-разрешения настраиваются нативно через UNUserNotificationCenter.

Возвращает: Future<bool> — true, если разрешение предоставлено или не требуется, false при отказе, отсутствии Activity или на iOS.

final bool granted = await AltcraftSDK.requestNotificationPermission();

if (granted) {
await AltcraftSDK.pushSubscribe(sync: true);
}

unlockInitialOperationsInThisSession()

static Future<void> unlockInitialOperationsInThisSession()

Разблокирует начальные операции в текущей сессии Android-приложения. На iOS метод является no-op и завершается успешно.


Подписка на push​

pushSubscribe() / pushSuspend() / pushUnSubscribe()

static Future<void> pushSubscribe({
bool? sync,
Map<String, dynamic>? profileFields,
Map<String, dynamic>? customFields,
List<dynamic>? cats,
bool? replace,
bool? skipTriggers,
})

static Future<void> pushSuspend({
bool? sync,
Map<String, dynamic>? profileFields,
Map<String, dynamic>? customFields,
List<dynamic>? cats,
bool? replace,
bool? skipTriggers,
})

static Future<void> pushUnSubscribe({
bool? sync,
Map<String, dynamic>? profileFields,
Map<String, dynamic>? customFields,
List<dynamic>? cats,
bool? replace,
bool? skipTriggers,
})
МетодСтатусУспехОшибкаRetry-ошибка
pushSubscribe()subscribed230430530
pushSuspend()suspended231431531
pushUnSubscribe()unsubscribed232432532

Все три метода имеют одинаковую сигнатуру.

ПараметрТипОписание
syncbool?true — синхронный запрос на стороне SDK; false — асинхронный. Если передан null, нативный SDK использует true.
profileFieldsMap<String, dynamic>?Поля профиля. Значения должны быть JSON-совместимыми.
customFieldsMap<String, dynamic>?Пользовательские поля подписки. Рекомендуются скалярные JSON-значения.
catsList<dynamic>?Категории подписки. Передавайте список Map, например CategoryData(...).toMap().
replacebool?При true SDK может заменить существующие подписки с тем же push-токеном согласно логике нативного SDK.
skipTriggersbool?При true профиль игнорируется в триггерах рассылок и сценариев.

Возвращает: Future<void> — означает, что команда принята bridge/native SDK. Серверный результат приходит через subscribeToEvents().

await AltcraftSDK.pushSubscribe(
sync: true,
profileFields: const {
'_fname': 'Ivan',
'_lname': 'Petrov',
},
customFields: const {
'source': 'flutter_app',
},
cats: const [
{'name': 'developer_news', 'active': true},
],
);

Как читать ошибку из события: если event.type == 'error' или event.type == 'retryError', проверьте event.code, event.message и event.value. Для серверного ответа обычно используется ключ response_with_http_code; вложенные поля приходят в snake_case.

AltcraftSDK.subscribeToEvents().listen((SdkEvent event) {
final raw = event.value?['response_with_http_code'];
if (raw is! Map) return;

final responseWithHttp = Map<String, dynamic>.from(raw);
final int? httpCode = responseWithHttp['http_code'] as int?;
final response = responseWithHttp['response'] as Map<dynamic, dynamic>?;
final int? error = response?['error'] as int?;
final String? errorText = response?['error_text'] as String?;

if (event.type == 'error' || event.type == 'retryError') {
print('SDK error code=${event.code} http=$httpCode error=$error text=$errorText');
}
});

unSuspendPushSubscription()

static Future<ResponseWithHttpCode?> unSuspendPushSubscription()

Возобновляет приостановленную push-подписку. Используется для LogIn/LogOut-переходов между профилями.

Возвращает: Future<ResponseWithHttpCode?>. Возвращает null, если нативный SDK не вернул ответ.
Выбрасывает: AltcraftException при ошибке платформенного вызова.

final ResponseWithHttpCode? result =
await AltcraftSDK.unSuspendPushSubscription();

if (result == null) {
await AltcraftSDK.pushSubscribe(sync: true);
return;
}

final response = result.response;
final profile = response?['profile'] as Map<String, dynamic>?;
final subscription = profile?['subscription'] as Map<String, dynamic>?;

if (result.httpCode == 200 && subscription == null) {
await AltcraftSDK.pushSubscribe(sync: true);
}

Статус подписки​

getStatusOfLatestSubscription()

static Future<ResponseWithHttpCode?> getStatusOfLatestSubscription()

Возвращает статус последней подписки профиля.

getStatusForCurrentSubscription()

static Future<ResponseWithHttpCode?> getStatusForCurrentSubscription()

Возвращает статус подписки для текущего push-токена и текущего провайдера.

getStatusOfLatestSubscriptionForProvider(provider)

static Future<ResponseWithHttpCode?> getStatusOfLatestSubscriptionForProvider(
String? provider,
)

Возвращает статус последней подписки по указанному провайдеру. Если provider == null, используется провайдер текущего токена.

ПараметрТипОписание
providerString?Идентификатор провайдера, например android-firebase или ios-apns.

Все три метода возвращают Future<ResponseWithHttpCode?>. Если result == null, ответа нет. Если result.response?['error'] != 0, сервер вернул ошибку — обработайте error и error_text.

final ResponseWithHttpCode? result =
await AltcraftSDK.getStatusForCurrentSubscription();

if (result == null) return;

final response = result.response;
final int? error = response?['error'] as int?;
final String? errorText = response?['error_text'] as String?;

if (error != null && error != 0) {
print('Status error: $errorText');
return;
}

final profile = response?['profile'] as Map<String, dynamic>?;
final subscription = profile?['subscription'] as Map<String, dynamic>?;
print('status=${subscription?['status']} provider=${subscription?['provider']}');

События SDK​

subscribeToEvents()

static Stream<SdkEvent> subscribeToEvents()

Возвращает общий broadcast Stream<SdkEvent> из EventChannel (com.altcraft/events). Поток кэшируется на Dart-стороне, поэтому несколько подписчиков слушают один источник событий.

Возвращает: Stream<SdkEvent>.

unsubscribeFromEvents()

static Future<void> unsubscribeFromEvents()

Останавливает доставку событий из нативного SDK и очищает текущий native event sink. Для повторного получения событий подпишитесь на subscribeToEvents() снова.

Возвращает: Future<void>.
Выбрасывает: AltcraftException при ошибке платформенного вызова.

import 'dart:async';
import 'package:altcraft_sdk/altcraft_sdk.dart';

StreamSubscription<SdkEvent>? sdkEventsSubscription;

void startListening() {
sdkEventsSubscription = AltcraftSDK.subscribeToEvents().listen(
(SdkEvent event) {
print('[${event.type}] ${event.function}: ${event.message}');
},
);
}

Future<void> stopListening() async {
await sdkEventsSubscription?.cancel();
sdkEventsSubscription = null;
await AltcraftSDK.unsubscribeFromEvents();
}

Мобильные события и профиль​

mobileEvent()

static Future<void> mobileEvent({
required String sid,
required String eventName,
String? sendMessageId,
Map<String, dynamic>? payload,
Map<String, dynamic>? matching,
String? matchingType,
Map<String, dynamic>? profileFields,
Map<String, dynamic>? subscription,
Map<String, dynamic>? utm,
})

Регистрирует мобильное событие Altcraft.

ПараметрТипОписание
sidStringИдентификатор пикселя. Не должен быть пустым.
eventNameStringИмя события. Не должно быть пустым.
sendMessageIdString?SMID отправленного сообщения.
payloadMap<String, dynamic>?Данные события. Используйте JSON-совместимые значения.
matchingMap<String, dynamic>?Данные матчинга, например {'email': 'ivan.petrov@example.com'}.
matchingTypeString?Тип матчинга.
profileFieldsMap<String, dynamic>?Поля профиля.
subscriptionMap<String, dynamic>?Подписка для канала. Передавайте Subscription.toMap().
utmMap<String, dynamic>?UTM-метки. Передавайте UTM(...).toMap() или обычный Map.

Возвращает: Future<void> — команда принята SDK. Результат отправки отслеживается через события SDK (237, 437, 535).
Выбрасывает: AltcraftException с кодом ERR, если sid или eventName пустые/не переданы.

await AltcraftSDK.mobileEvent(
sid: 'pixel-100000000000000000000000',
eventName: 'purchase',
payload: const {
'order_id': 'A-1001',
'amount': 3990,
'currency': 'RUB',
},
);

updateProfileFields()

static Future<void> updateProfileFields({
Map<String, dynamic>? profileFields,
bool? skipTriggers,
})

Обновляет поля профиля на сервере.

ПараметрТипОписание
profileFieldsMap<String, dynamic>?Карта полей профиля для обновления.
skipTriggersbool?При true профиль игнорируется в триггерах рассылок и сценариев.

Возвращает: Future<void> — команда принята SDK. Серверный результат приходит через события SDK (233, 433, 533).


Push-токены​

getPushToken()

static Future<TokenData?> getPushToken()

Возвращает текущие данные push-токена устройства и провайдера.

Возвращает: Future<TokenData?> — объект TokenData или null, если токен недоступен.
Выбрасывает: AltcraftException при ошибке платформенного вызова.

setPushToken(provider, token)

static Future<void> setPushToken(String provider, String? token)

Устанавливает или очищает push-токен для указанного провайдера. Если token == null, токен очищается.

ПараметрТипОписание
providerStringИдентификатор провайдера, например android-firebase, android-huawei, android-rustore, ios-apns, ios-firebase, ios-huawei.
tokenString?Значение токена. null — очистка токена.

forcedTokenUpdate()

static Future<void> forcedTokenUpdate()

Запускает принудительное обновление push-токена через нативный SDK.

deleteDeviceToken(provider)

static Future<void> deleteDeviceToken(String provider)

Удаляет токен устройства для указанного провайдера.

ПараметрТипОписание
providerStringИдентификатор провайдера.

changePushProviderPriorityList(priorityList)

static Future<void> changePushProviderPriorityList(List<String> priorityList)

Изменяет список приоритетов push-провайдеров. Индекс 0 — самый приоритетный провайдер.

ПараметрТипОписание
priorityListList<String>Новый список приоритетов.
await AltcraftSDK.changePushProviderPriorityList(
['android-firebase', 'android-huawei', 'android-rustore'],
);

Все методы этой группы выбрасывают AltcraftException при ошибке платформенного вызова.


Push-уведомления​

takePush(message)

static Future<void> takePush(Map<String, String> message)

Передаёт входящий push payload в SDK. Метод доступен на Android. На iOS вызов завершится AltcraftException с кодом UNAVAILABLE_ON_IOS.

ПараметрТипОписание
messageMap<String, String>Data payload push-уведомления.

isAltcraftPush(message)

static Future<bool> isAltcraftPush(Map<String, String> message)

Проверяет, относится ли push-сообщение к Altcraft.

ПараметрТипОписание
messageMap<String, String>Data payload push-сообщения.

Возвращает: Future<bool> — true, если сообщение принадлежит Altcraft. На iOS всегда возвращает false.

deliveryEvent(message, messageUID)

static Future<void> deliveryEvent(Map<String, String>? message, String? messageUID)

Ручная регистрация доставки push-уведомления. Метод доступен на Android. На iOS вызов завершится AltcraftException с кодом UNAVAILABLE_ON_IOS.

ПараметрТипОписание
messageMap<String, String>?Data payload уведомления.
messageUIDString?Идентификатор сообщения.

Можно передать только message или только messageUID. Если оба значения null, SDK не сможет корректно идентифицировать push-сообщение.

openEvent(message, messageUID)

static Future<void> openEvent(Map<String, String>? message, String? messageUID)

Ручная регистрация открытия push-уведомления. Метод доступен на Android. На iOS вызов завершится AltcraftException с кодом UNAVAILABLE_ON_IOS.


Native storage​

setAppGroup(groupName)

static Future<void> setAppGroup(String? groupName)

Устанавливает App Group для iOS SDK. На Android метод является no-op. Несмотря на nullable-сигнатуру Dart, на iOS значение groupName должно быть непустой строкой; null вернёт AltcraftException с кодом ERR.

ПараметрТипОписание
groupNameString?Идентификатор App Group, например group.altcraft.flutter.example.

setUserDefaultsValue(suiteName, key, value)

static Future<void> setUserDefaultsValue(String? suiteName, String key, String? value)

Сохраняет строковое значение в нативном хранилище. На iOS используется UserDefaults; если указан suiteName, используется App Group suite. На Android suiteName игнорируется, значение сохраняется в SharedPreferences плагина (altcraft_sdk). Если value == null, ключ удаляется.

ПараметрТипОписание
suiteNameString?Имя App Group / suite для iOS. На Android игнорируется.
keyStringКлюч хранилища. Не должен быть null.
valueString?Значение для сохранения. null удаляет ключ.
class AltcraftConfig
class AltcraftConfig {
final String apiUrl;
final String? rToken;
final AppInfo? appInfo;
final List<String>? providerPriorityList;
final bool? enableLogging;

// Android-only
final int? icon;
final List<String>? pushReceiverModules;
final String? pushChannelName;
final String? pushChannelDescription;
}

Класс конфигурации Altcraft SDK. В toMap() Android-only поля передаются с префиксом android_: android_icon, android_pushReceiverModules, android_pushChannelName, android_pushChannelDescription.

ПолеТипОбязательныйОписание
apiUrlStringДаURL Altcraft API.
rTokenString?НетРолевой токен для сценариев без JWT.
appInfoAppInfo?НетМетаданные приложения.
providerPriorityListList<String>?НетПриоритет push-провайдеров. Индекс 0 — самый приоритетный.
enableLoggingbool?НетВключает/отключает логи нативного SDK.
iconint?НетID ресурса иконки уведомлений. Используется только на Android.
pushReceiverModulesList<String>?НетПакеты модулей с переопределённым PushReceiver. Используется только на Android.
pushChannelNameString?НетИмя канала push-уведомлений. Используется только на Android.
pushChannelDescriptionString?НетОписание канала push-уведомлений. Используется только на Android.

AppInfo:

class AppInfo {
final String appID;
final String appIID;
final String appVer;
}
ПолеТипОписание
appIDStringИдентификатор приложения.
appIIDStringИдентификатор установки приложения.
appVerStringВерсия приложения.
Data Classes

SdkEvent

class SdkEvent {
final String function;
final int? code;
final String message;
final String type;
final Map<String, dynamic>? value;
final String? timestamp;
}

Универсальное событие SDK, доставляется в Dart через Stream<SdkEvent>.

ПолеТипОписание
functionStringИмя функции SDK, вызвавшей событие.
codeint?Код события.
messageStringСообщение события.
typeStringevent, error, retryError.
valueMap<String, dynamic>?Дополнительные данные, например response_with_http_code.
timestampString?Временная метка в формате yyyy-MM-dd HH:mm:ss.SSS.

TokenData

class TokenData {
final String provider;
final String token;
}

Данные push-токена провайдера устройства.

ПолеТипОписание
providerStringИдентификатор провайдера.
tokenStringЗначение push-токена.

ResponseWithHttpCode

class ResponseWithHttpCode {
final int httpCode;
final Map<String, dynamic>? response;
}

Обёртка ответа API с HTTP-кодом. ResponseWithHttpCode.fromMap() понимает оба top-level ключа: http_code и httpCode, но вложенный response остаётся в том формате, в котором его вернул native bridge. В текущем bridge вложенные поля ответа приходят в snake_case.

Поле DartТипОписание
httpCodeintHTTP-код ответа. Если в map нет HTTP-кода, будет 0.
responseMap<String, dynamic>?Тело ответа или null.

Основные поля response:

КлючТипОписание
errorint?Внутренний код ошибки сервера (0 — нет ошибок).
error_textString?Текст ошибки.
profileMap<String, dynamic>?Данные профиля и подписки.

Вложенная структура profile:

КлючТипОписание
idString?Идентификатор профиля.
statusString?Статус профиля.
is_testbool?Флаг тестового режима.
subscriptionMap<String, dynamic>?Данные подписки.

Вложенная структура subscription:

КлючТипОписание
subscription_idString?Идентификатор подписки у провайдера.
hash_idString?Хэш подписки.
providerString?Провайдер подписки.
statusString?Статус подписки (subscribed, suspended, unsubscribed).
fieldsMap<String, dynamic>?Системные и пользовательские поля.
catsList<dynamic>?Категории подписки.

CategoryData

class CategoryData {
final String? name;
final String? title;
final bool? steady;
final bool? active;
}

Категория подписки. Для отправки в pushSubscribe, pushSuspend или pushUnSubscribe передавайте CategoryData(...).toMap() либо обычный Map с нужными полями.

ПолеТипОписание
nameString?Название категории.
titleString?Заголовок категории. Обычно заполняется в ответах SDK.
steadybool?Флаг стабильности. Обычно заполняется в ответах SDK.
activebool?Статус активности категории.

Subscription

class Subscription {
final String type;
final int resourceId;
final String? status;
final int? priority;
final String? email;
final String? phone;
final String? provider;
final String? subscriptionId;
final Map<String, dynamic>? customFields;
final List<dynamic>? cats;
final Map<String, dynamic>? ccData;
final String? ccChannel;
}

Модель подписки для mobileEvent(). toMap() добавляет оба ключа type и channel; native bridge читает channel как основной дискриминатор и type как fallback.

Factory-конструкторы:

Subscription.email({
required int resourceId,
required String email,
String? status,
int? priority,
Map<String, dynamic>? customFields,
List<dynamic>? cats,
})

Subscription.sms({
required int resourceId,
required String phone,
String? status,
int? priority,
Map<String, dynamic>? customFields,
List<dynamic>? cats,
})

Subscription.push({
required int resourceId,
required String provider,
required String subscriptionId,
String? status,
int? priority,
Map<String, dynamic>? customFields,
List<dynamic>? cats,
})

Subscription.ccData({
required int resourceId,
required String channel,
required Map<String, dynamic> ccData,
String? status,
int? priority,
Map<String, dynamic>? customFields,
List<dynamic>? cats,
})
подсказка

Для mobileEvent(subscription: ...) передавайте subscription.toMap(). Если обязательные поля подписки отсутствуют, native bridge не сможет собрать модель подписки и отправит событие без неё.


UTM

class UTM {
final String? source;
final String? medium;
final String? campaign;
final String? content;
final String? keyword;
final String? temp;
}

Контейнер UTM-параметров для мобильных событий. В mobileEvent() передаётся как UTM(...).toMap().

ActionFieldBuilder
class ActionFieldBuilder {
final String key;

Map<String, dynamic> set(dynamic value);
Map<String, dynamic> unset(dynamic value);
Map<String, dynamic> incr(dynamic value);
Map<String, dynamic> add(dynamic value);
Map<String, dynamic> delete(dynamic value);
Map<String, dynamic> upsert(dynamic value);
}

ActionFieldBuilder actionField(String key);

Builder для структурированного управления полями профиля. Производит карту, совместимую с нативным SDK.

МетодОписание
set(value)Установить поле в заданное значение.
unset(value)Удалить значение поля.
incr(value)Увеличить числовое поле на заданное значение.
add(value)Добавить значение в поле-множество/массив.
delete(value)Удалить значение из поля-множества/массива.
upsert(value)Установить, если поле отсутствует; обновить, если существует.
import 'package:altcraft_sdk/altcraft_sdk.dart';

final profileFields = <String, dynamic>{
...actionField('_fname').set('Ivan'),
...actionField('login_count').incr(1),
...actionField('visited_pages').add('/settings'),
};

await AltcraftSDK.updateProfileFields(profileFields: profileFields);
Exceptions

AltcraftException

class AltcraftException implements Exception {
final String code;
final String message;
final Object? details;
}

Исключение, выбрасываемое Dart-обёрткой при ошибках MethodChannel. Проверяйте code и message.

ПолеТипОписание
codeStringКод ошибки (ERR, SDK_ERROR, UNAVAILABLE_ON_IOS, ALTCRAFT_INIT_INVALID_CONFIG и др.).
messageStringСообщение об ошибке.
detailsObject?Дополнительные данные, если native bridge их передал.
try {
await AltcraftSDK.takePush(const {'_uid': 'push-message-uid-0001'});
} on AltcraftException catch (e) {
if (e.code == 'UNAVAILABLE_ON_IOS') {
print('This method is Android-only');
return;
}
print('SDK error (${e.code}): ${e.message}');
}

SdkNotInitializedException

class SdkNotInitializedException extends AltcraftException

Класс экспортируется пакетом и может использоваться кастомными/test-реализациями платформенного интерфейса. В стандартной MethodChannel-реализации ошибки нативной стороны конвертируются в обычный AltcraftException, поэтому в приложении надёжнее проверять e.code.

Constants

Провайдеры push-уведомлений:

ПровайдерЗначение
FCM (Android)android-firebase
HMS (Android)android-huawei
RuStore (Android)android-rustore
APNS (iOS)ios-apns
FCM (iOS)ios-firebase
HMS (iOS)ios-huawei

Статусы подписки:

СтатусЗначение
Подписанsubscribed
Отписанunsubscribed
Приостановленsuspended
Последнее обновление 10 июл. 2026 г.
Предыдущая страница
Функционал SDK
Следующая страница
Настройка провайдеров
  • Инициализация
  • Подписка на push
  • Статус подписки
  • События SDK
  • Мобильные события и профиль
  • Push-токены
  • Push-уведомления
  • Native storage
© 2015 - 2026 Altcraft. Все права защищены.