Конфигурация SDK
Предварительные условия
- В Flutter-проект добавлен пакет
altcraft_sdk. - SDK провайдеров push-уведомлений интегрированы в проект приложения.
- Для Android настроен один или несколько провайдеров: FCM, HMS, RuStore.
- Для iOS настроен один или несколько провайдеров: APNS, FCM, HMS.
- Если API-запросы должны авторизоваться через JWT, JWT-провайдер зарегистрирован на нативной стороне приложения.
flutter pub add altcraft_sdk
flutter pub get
Подготовка приложения
Передача JWT-токена в SDK (опционально)
Реализация JWT требуется, если используется JWT-аутентификация API-запросов. JWT подтверждает, что пользовательские идентификаторы аутентифицированы приложением.
Реализация JWT-аутентификации обязательна, если используется тип матчинга, отличный от push-данных из подписки, например email, телефон или внутренний идентификатор пользователя.
В Flutter SDK JWT-провайдер не регистрируется через Dart API. Его необходимо настроить нативно:
- Android: в
Application.onCreate; - iOS: в
AppDelegate.
Настройка выполняется аналогично нативным SDK платформ: Android и iOS.
Подготовка к работе с push-провайдерами
Настройка push-провайдеров выполняется на нативной стороне приложения.
Android:
iOS:
Flutter-пакет предоставляет Dart API и платформенный bridge. Регистрация JWT, push-провайдеров, обработка APNS/FCM/HMS/RuStore и настройка Notification Service Extension выполняются в нативных частях проекта.
Инициализация SDK
Параметры инициализации
Для передачи параметров конфигурации используется объект AltcraftConfig:
const AltcraftConfig(
apiUrl: 'https://pxl-example.altcraft.com',
rToken: 'your-role-token',
appInfo: AppInfo(
appID: '1:000000000000:android:0000000000000000',
appIID: '00000000-0000-4000-8000-000000000000',
appVer: '1.0.0',
),
providerPriorityList: ['android-firebase'],
enableLogging: true,
)
Описание параметров:
apiUrl String
Обязательный: Да
Описание: URL конечной точки Altcraft API.
rToken String?
По умолчанию: null
Обязательный: Нет
Описание: Ролевой токен для идентификации ресурса, базы данных или аккаунта.
appInfo AppInfo?
По умолчанию: null
Обязательный: Нет
Описание: Базовые метаданные приложения.
Поля AppInfo:
| Поле | Тип | Описание |
|---|---|---|
appID | String | Идентификатор приложения. |
appIID | String | Идентификатор установки приложения. |
appVer | String | Версия приложения. |
providerPriorityList List<String>?
По умолчанию: null
Обязательный: Нет
Описание: Список приоритетов push-провайдеров. Индекс 0 — самый приоритетный провайдер.
Пример для Android:
providerPriorityList: ['android-firebase', 'android-huawei', 'android-rustore']
Пример для iOS:
providerPriorityList: ['ios-apns', 'ios-firebase', 'ios-huawei']
enableLogging bool?
По умолчанию: null
Обязательный: Нет
Описание: Включает или отключает ведение логов SDK.
Android-only поля
Следующие поля AltcraftConfig применяются только на Android:
| Поле | Тип | Описание |
|---|---|---|
icon | int? | ID ресурса иконки уведомлений. |
pushReceiverModules | List<String>? | Пакеты модулей с переопределённым PushReceiver. |
pushChannelName | String? | Имя канала push-уведомлений. |
pushChannelDescription | String? | Описание канала push-уведомлений. |
Выполнение инициализации
Для инициализации SDK используйте функцию initialize(config):
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-example.altcraft.com',
appInfo: AppInfo(
appID: '1:000000000000:ios:0000000000000000',
appIID: '00000000-0000-4000-8000-000000000001',
appVer: '1.0.0',
),
providerPriorityList: ['ios-apns'],
),
);
runApp(const AppRoot());
}
class AppRoot extends StatelessWidget {
const AppRoot({super.key});
@override
Widget build(BuildContext context) {
return const Directionality(
textDirection: TextDirection.ltr,
child: SizedBox.shrink(),
);
}
}
Работа с App Group и UserDefaults на iOS
Для iOS SDK предоставляет методы дл я установки App Group и записи строковых значений в UserDefaults. Метод setAppGroup() используется только на iOS; на Android вызов успешно завершается без действия.
import 'dart:io';
import 'package:altcraft_sdk/altcraft_sdk.dart';
Future<void> configureIosAppGroup() async {
if (!Platform.isIOS) return;
const String appGroup = 'group.altcraft.flutter.example';
await AltcraftSDK.setAppGroup(appGroup);
await AltcraftSDK.setUserDefaultsValue(
appGroup,
'altcraft_jwt',
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJtYXRjaGluZyI6ImVtYWlsIn0.signature',
);
}
Метод setUserDefaultsValue(suiteName, key, value) также доступен на Android, где suiteName игнорируется, а значение сохраняется в SharedPreferences SDK. Параметр value имеет тип String?: строка записывает значение, null удаляет ключ. На iOS suiteName должен указывать на доступный UserDefaults suite; если suite не найден, метод завершится AltcraftException с кодом ERR.
Запрос разрешения на уведомления
Для Android используйте requestNotificationPermission():
import 'package:altcraft_sdk/altcraft_sdk.dart';
Future<bool> requestAndroidNotificationPermission() {
return AltcraftSDK.requestNotificationPermission();
}
Метод возвращает true, если разрешение предоставлено. На Android ниже 13 версии разрешение не требуется, поэтому метод возвращает true. Если пользователь отказал, нет активной Activity или произошла ошибка запроса, возвращается false. На iOS этот Dart-метод не запрашивает разрешение и возвращает false; разрешения на iOS настраиваются в нативной части приложения.