Функционал SDK
Предварительно вам необходимо настроить SDK для работы с вашим приложением. Подробная инструкция находится здесь.
Работа со статусами подписки
Изменение статуса подписки
AltcraftSDK (Flutter)
└─ Push subscription functions
// Подписка: status = subscribed
├─ static Future<void> pushSubscribe({
│ bool? sync,
│ Map<String, dynamic>? profileFields,
│ Map<String, dynamic>? customFields,
│ List<dynamic>? cats,
│ bool? replace,
│ bool? skipTriggers,
│ })
// Приостановка: status = suspended
├─ static Future<void> pushSuspend({
│ bool? sync,
│ Map<String, dynamic>? profileFields,
│ Map<String, dynamic>? customFields,
│ List<dynamic>? cats,
│ bool? replace,
│ bool? skipTriggers,
│ })
// Отписка: status = unsubscribed
└─ static Future<void> pushUnSubscribe({
bool? sync,
Map<String, dynamic>? profileFields,
Map<String, dynamic>? customFields,
List<dynamic>? cats,
bool? replace,
bool? skipTriggers,
})
pushSubscribe()— выполняет подписку на push-уведомления;pushSuspend()— приостанавливает подписку на push-уведомления (уведомления не приходят, но при этом не создаётся событие отписки в профиле пользователя);pushUnSubscribe()— отменяет подписку на push-уведомления;unSuspendPushSubscription()— используется для созданияLogIn-,LogOut-переходов.
Функции pushSubscribe(), pushSuspend() и pushUnSubscribe() имеют одинаковую сигнатуру.
sync: bool?
По умолчанию: true на нативной стороне, если из Dart передан null
Обязательный: Нет
Описание: Флаг, устанавливающий синхронность выполнения запроса.
Успешное выполнение запроса:
В случае успешного выполнения запроса данной группы функций будет создано событие SDK с кодом 230, 231 или 232, содержащее значение event.value, определяемое в зависимости от флага синхронизации:
Если sync == true
ResponseWithHttpCode
├─ http_code: 200
└─ response
├─ error: 0
├─ error_text: ""
└─ profile
├─ id: "000000000000000000000000"
├─ status: "subscribed"
├─ is_test: false
└─ subscription
├─ subscription_id: "provider-subscription-id"
├─ hash_id: "7f31a9c4"
├─ provider: "android-firebase"
├─ status: "subscribed"
├─ fields
│ ├─ _os: "Android"
│ ├─ _os_ver: "14"
│ ├─ _device_type: "mob"
│ ├─ _device_model: "Pixel 7"
│ └─ _app_ver: "1.0.0"
└─ cats
└─ [ { name: "developer_news", active: true } ]
При синхронном запросе в значении события event.value по ключу response_with_http_code доступны:
http_code— транспортный код ответа;response— данные ответа, содержащие:error— внутренний код ошибки сервера (0, если ошибок нет);error_text— текст ошибки (пустая строка, если ошибок нет);profile— данные профиля и подписки, если запрос успешный. Если запрос завершился с ошибкой, вернётся толькоprofile = null.
Если sync == false
ResponseWithHttpCode
├─ http_code: int?
└─ response: Map<String, dynamic>?
├─ error: int?
├─ error_text: String?
└─ profile: null // обычно null для асинхронного запроса
При асинхронном запросе в значении события event.value по ключу response_with_http_code доступны:
http_code— транспортный код ответа;response— данные ответа, содержащие:error— внутренний код ошибки сервера (0, если ошибок нет);error_text— текст ошибки (пустая строка, если ошибок нет);profile— для асинхронного запроса всегда равенnull.
Выполнение запроса с ошибкой:
Если запрос данной группы функций завершился ошибкой, будет создано событие со следующими кодами:
Операции без автоматического повтора попытки на стороне SDK:
- 430 — подписка на уведомления;
- 431 — приостановка подписки;
- 432 — отписка.
Операции с автоматическим повтором попытки на стороне SDK:
- 530 — подписка на уведомления;
- 531 — приостановка подписки;
- 532 — отписка.
Содержимое события:
- только
http_code, если сервер Altcraft был недоступен; errorиerror_text, если сервер вернул ошибку.
Получение значений событий
import 'package:altcraft_sdk/altcraft_sdk.dart';
final responseCodes = {230, 231, 232, 430, 431, 432, 530, 531, 532};
AltcraftSDK.subscribeToEvents().listen((SdkEvent event) {
if (event.code == null) return;
if (!responseCodes.contains(event.code)) return;
final raw = event.value?['response_with_http_code'];
if (raw == null) return;
final map = Map<String, dynamic>.from(raw as Map);
final httpCode = map['http_code'] ?? map['httpCode'];
final response = map['response'] as Map<dynamic, dynamic>?;
final error = response?['error'];
final errorText = response?['error_text'] ?? response?['errorText'];
final profile = response?['profile'] as Map<dynamic, dynamic>?;
final subscription = profile?['subscription'] as Map<dynamic, dynamic>?;
print('httpCode=$httpCode error=$error errorText=$errorText profileId=${profile?['id']}');
print('subscriptionId=${subscription?['subscription_id']}');
});
profileFields: Map<String, dynamic>?
По умолчанию: null
Обязательный: Нет
Описание: Объект, содержащий поля профиля.
Параметр может принимать как системные поля (например, _fname — имя или _lname — фамилия), так и опциональные (заранее создаются вручную в интерфейсе платформы). Допустимые структуры (JSON-совместимые):
- Скалярные значения:
String,bool,num(int / double),null - Объекты:
Map<String, dynamic> - Списки:
List<dynamic>
Если передано невалидное опциональное поле, запрос завершится с ошибкой:
SDK error: 430
http code: 400
error: 400
error_text: Platform profile processing error: with field "название_поля": Incorrect field
AltcraftSDK.pushSubscribe(
sync: true,
profileFields: const {
'_fname': 'Ivan',
'_lname': 'Petrov',
'_email': 'ivan.petrov@example.com',
},
);
customFields: Map<String, dynamic>?
По умолчанию: null
Обязательный: Нет
Описание: Объект, содержащий поля подписки.
Параметр может принимать как системные поля (например, _device_model — модель устройства или _os — операционная система), так и опциональные (заранее создаются вручную в интерфейсе платформы). Допустимые типы значений (JSON-совместимые, только скаляры):
Stringboolnum(int / double)null
Если передано невалидное опциональное поле, запрос завершится с ошибкой:
SDK error: 430
http code: 400
error: 400
error_text: Platform profile processing error: field "