Публичный 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-операций.
| Параметр | Тип | Описание |
|---|---|---|
config | AltcraftConfig | Объект конфигурации 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() | subscribed | 230 | 430 | 530 |
pushSuspend() | suspended | 231 | 431 | 531 |
pushUnSubscribe() | unsubscribed | 232 | 432 | 532 |
Все три метода имеют одинаковую сигнатуру.
| Параметр | Тип | Описание |
|---|---|---|
sync | bool? | true — синхронный запрос на стороне SDK; false — асинхронный. Если передан null, нативный SDK использует true. |
profileFields | Map<String, dynamic>? | Поля профиля. Значения должны быть JSON-совместимыми. |
customFields | Map<String, dynamic>? | Поль зовательские поля подписки. Рекомендуются скалярные JSON-значения. |
cats | List<dynamic>? | Категории подписки. Передавайте список Map, например CategoryData(...).toMap(). |
replace | bool? | При true SDK может заменить существующие подписки с тем же push-токеном согласно логике нативного SDK. |
skipTriggers | bool? | При 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, используется провайдер текущего токена.
| Параметр | Тип | Описание |
|---|---|---|
provider | String? | Идентификатор прова йдера, например 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.
| Параметр | Тип | Описание |
|---|---|---|
sid | String | Идентификатор пикселя. Не должен быть пустым. |
eventName | String | Имя события. Не должно быть пустым. |
sendMessageId | String? | SMID отправленного сообщения. |
payload | Map<String, dynamic>? | Данные события. Используйте JSON-совместимые значения. |
matching | Map<String, dynamic>? | Данные матчинга, например {'email': 'ivan.petrov@example.com'}. |
matchingType | String? | Тип матчинга. |
profileFields | Map<String, dynamic>? | Поля профиля. |
subscription | Map<String, dynamic>? | Подписка для канала. Передавайте Subscription.toMap(). |
utm | Map<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,
})
Обновляет поля профиля на сервере.
| Параметр | Тип | Описание |
|---|---|---|
profileFields | Map<String, dynamic>? | Карта полей профиля для обновления. |
skipTriggers | bool? | При 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, токен очищается.
| Параметр | Тип | Описание |
|---|---|---|
provider | String | Идентификатор провайдера, например android-firebase, android-huawei, android-rustore, ios-apns, ios-firebase, ios-huawei. |
token | String? | Значение токена. null — очистка токена. |
forcedTokenUpdate()
static Future<void> forcedTokenUpdate()
Запускает принудительное обновление push-токена через нативный SDK.
deleteDeviceToken(provider)
static Future<void> deleteDeviceToken(String provider)
Удаляет токен устройства для указанного провайдера.
| Параметр | Тип | Описание |
|---|---|---|
provider | String | Идентификатор провайдера. |
changePushProviderPriorityList(priorityList)
static Future<void> changePushProviderPriorityList(List<String> priorityList)
Изменяет список приоритетов push-провайдеров. Индекс 0 — самый при оритетный провайдер.
| Параметр | Тип | Описание |
|---|---|---|
priorityList | List<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.
| Параметр | Тип | Описание |
|---|---|---|
message | Map<String, String> | Data payload push-уведомления. |
isAltcraftPush(message)
static Future<bool> isAltcraftPush(Map<String, String> message)
Проверяет, относится ли push-сообщение к Altcraft.
| Параметр | Тип | Описание |
|---|---|---|
message | Map<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.
| Параметр | Тип | Описание |
|---|---|---|
message | Map<String, String>? | Data payload уведомления. |
messageUID | String? | Идентификатор сообщения. |
Можно передать только 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.
| Параметр | Тип | Описание |
|---|---|---|
groupName | String? | Идентификатор 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, ключ удаляется.
| Параметр | Тип | Описание |
|---|---|---|
suiteName | String? | Имя App Group / suite для iOS. На Android игнорируется. |
key | String | Ключ хранилища. Не должен быть null. |
value | String? | Значение для сохранения. 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.
| Поле | Тип | Обязательный | Описание |
|---|---|---|---|
apiUrl | String | Да | URL Altcraft API. |
rToken | String? | Нет | Ролевой токен для сценариев без JWT. |
appInfo | AppInfo? | Нет | Метаданные приложения. |
providerPriorityList | List<String>? | Нет | Приоритет push-провайдеров. Индекс 0 — самый приоритетный. |
enableLogging | bool? | Нет | Включает/отключает логи нативного SDK. |
icon | int? | Нет | ID ресурса иконки уведомлений. Используется только на Android. |
pushReceiverModules | List<String>? | Нет | Пакеты модулей с переопределённым PushReceiver. Используется только на Android. |
pushChannelName | String? | Нет | Имя канала push-уведомлений. Используется только на Android. |
pushChannelDescription | String? | Нет | Описание канала push-уведомлений. Используется только на Android. |
AppInfo:
class AppInfo {
final String appID;
final String appIID;
final String appVer;
}
| Поле | Тип | Описание |
|---|---|---|
appID | String | Идентификатор приложения. |
appIID | String | Идентификатор установки приложения. |
appVer | String | Версия приложения. |
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>.
| Поле | Тип | Описание |
|---|---|---|
function | String | Имя функции SDK, вызвавшей событие. |
code | int? | Код события. |
message | String | Сообщение события. |
type | String | event, error, retryError. |
value | Map<String, dynamic>? | Дополнительные данные, например response_with_http_code. |
timestamp | String? | Временная метка в формате yyyy-MM-dd HH:mm:ss.SSS. |
TokenData
class TokenData {
final String provider;
final String token;
}
Данные push-токена провайдера устройства.
| Пол е | Тип | Описание |
|---|---|---|
provider | String | Идентификатор провайдера. |
token | String | Значение 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 | Тип | Описание |
|---|---|---|
httpCode | int | HTTP-код ответа. Если в map нет HTTP-кода, будет 0. |
response | Map<String, dynamic>? | Тело ответа или null. |
Основные поля response:
| Ключ | Тип | Описание |
|---|---|---|
error | int? | Внутренний код ошибки сервера (0 — нет ошибок). |
error_text | String? | Текст ошибки. |
profile | Map<String, dynamic>? | Данные профиля и подписки. |
Вложенная структура profile:
| Ключ | Тип | Описание |
|---|---|---|
id | String? | Идентификатор профиля. |
status | String? | Статус профиля. |
is_test | bool? | Флаг тестового режима. |
subscription | Map<String, dynamic>? | Данные подписки. |
Вложенная структура subscription:
| Ключ | Тип | Описание |
|---|---|---|
subscription_id | String? | Идентификатор подписки у провайдера. |
hash_id | String? | Хэш подписки. |
provider | String? | Провайдер подписки. |
status | String? | Статус подписки (subscribed, suspended, unsubscribed). |
fields | Map<String, dynamic>? | Системные и пользовательские поля. |
cats | List<dynamic>? | Категории подписки. |
CategoryData
class CategoryData {
final String? name;
final String? title;
final bool? steady;
final bool? active;
}
Категория подписки. Для отправки в pushSubscribe, pushSuspend или pushUnSubscribe передавайте CategoryData(...).toMap() либо обычный Map с нужными полями.
| Поле | Тип | Описание |
|---|---|---|
name | String? | Название категории. |
title | String? | Заголовок категории. Обычно заполняется в ответах SDK. |
steady | bool? | Флаг стабильности. Обычно з аполняется в ответах SDK. |
active | bool? | Статус активности категории. |
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.
| Поле | Тип | Описание |
|---|---|---|
code | String | Код ошибки (ERR, SDK_ERROR, UNAVAILABLE_ON_IOS, ALTCRAFT_INIT_INVALID_CONFIG и др.). |
message | String | Сообщение об ошибке. |
details | Object? | Дополнительные данные, если 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 |