Конфигурация SDK
Предваритель ные условия
- SDK провайдеров push-уведомлений интегрированы в проект приложения (см. инструкции по интеграции push-провайдеров).
- Выполнена загрузка пакета Altcraft с помощью Swift Package Manager или CocoaPods.
Подготовка приложения
Настройка таргета
Настройте следующие параметры таргета приложения:
- General
При использовании Swift Package Manager проверьте, что библиотека Altcraft добавлена в Frameworks, Libraries, and Embedded Content таргета приложения.
- Signing & Capabilities
Добавьте следующие Capabilities:
- PushNotifications;
- AppGroups;
- Background Modes (Background fetch, Background processing).
- Info
Добавьте key Permitted background task scheduler identifiers и value "lib.Altcraft.bgTask.systemControl". Это необходимо для регистрации bgTask-задачи, которая будет выполнять повтор неудачных запросов к серверу в background-режиме.
- Опционально:
При использовании Firebase Cloud Messaging добавьте ключ FirebaseAppDelegateProxyEnabled (Boolean) с значением NO. Это отключит автоматическую подмену (method swizzling) методов AppDelegate, которую Firebase Messaging выполняет по умолчанию.
Настройка AppDelegate
Далее необходимо выполнить в AppDelegate.application(_:didFinishLaunchingWithOptions:) следующие действия:
- передать идентификатор
AppGroupв SDK - зарегистрировать
BGTask(фоновые задачи SDK) - (опционально) инициализировать функции
UNUserNotificationCenterна стороне SDK
Установка идентификатора AppGroup
Добавление идентификатора AppGroup необходимо для обмена информацией с Notification Service Extension и требуется для корректной работы SDK. Выполняется с помощью функции setAppGroup():
AltcraftSDK.shared.setAppGroup(groupName: String)
Регистрация BGTask
Регистрация фоновых задач SDK необходима для повторной отправки неуспешных запросов в фоновом режиме. Выполняется с помощью функции registerBackgroundTask():
AltcraftSDK.shared.backgroundTasks.registerBackgroundTask()
Инициализация функций UNUserNotificationCenter (опционально)
SDK содержит класс NotificationManager который выполняет следующие задачи:
- настраивает
UNUserNotificationCenterи запрашивает разрешение на уведомление (alert/sound/badge); - обеспечивает вызов
UIApplication.registerForRemoteNotifications()и гарантирует корректную регистрацию в APNs; - отображает уведомления в foreground;
- обрабатывает клики по уведомлениям и кнопкам — выполняет переход на указанный URL или открывает приложение;
- регистрирует push-событие открытия ("open").
Для использования класса SDK NotificationManager вызовите функцию в AppDelegate.application(_:didFinishLaunchingWithOptions:):
func registerForPushNotifications(for application: UIApplication, completion: ((_ granted: Bool, _ error: Error?) -> Void)? = nil): Void
Данная функция назначает делегата, запрашивает разрешение у пользователя и регистрирует приложение для получения push-уведомлений на стороне SDK.
Пример корректного заполнения AppDelegate.application
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let appGroup = "group.your.id"
//ID App Group Setup
AltcraftSDK.shared.setAppGroup(groupName: appGroup)
//Background SDK task registration
AltcraftSDK.shared.backgroundTasks.registerBackgroundTask()
//SDK UNUserNotificationCenter functions initialization
AltcraftSDK.shared.notificationManager.registerForPushNotifications(for: application)
//Other functions
return true
}
//Other functions AppDelegate
}
Использование этого класса опционально, вы можете заменить его своей реализацией. Для этого:
- назначьте делегата центра уведомлений:
UNUserNotificationCenter.current().delegate = self; - запросите разрешения на уведомления и вызовите
UIApplication.shared.registerForRemoteNotifications()строго на главном потоке; - реализуйте метод
userNotificationCenter(_:willPresent:withCompletionHandler:)для отображения уведомлений в foreground (banner/alert/sound/badge); - вызовите
AltcraftSDK.shared.pushEventFunctions.openEvent(from:)вuserNotificationCenter(_:didReceive:withCompletionHandler:)при обработке нажатия на уведомление (регистрация события "open"); - реализуйте собственную логику обработки кликов по уведомлению (URL/Deep Link/кнопки), не забудьте при этом продумать fallback-сценарий (навигацию по умолчанию при отсутствии валидной ссылки).
Настройка JWT-протокола (опционально)
JWTInterface — прото кол запроса JWT-токена. Предоставляет актуальный JWT-токен из приложения по запросу SDK. Реализация данного протокола требуется, если используется JWT-аутентификация API-запросов. JWT подтверждает, что пользовательские идентификаторы аутентифицированы приложением.
Реализация JWT-аутентификации обязательна, если используется тип матчинга отличный от push-данных из подписки (например, идентификатор пользователя — email или телефон).
Протокол SDK:
public protocol JWTInterface {
func getToken() -> String?
}
Реализация на стороне приложения
import Altcraft
class JWTProvider: JWTInterface {
func getToken() -> String? {
//ваш код, который возвращает JWT
}
}
Регистрация провайдера в application(_:didFinishLaunchingWithOptions:)
В AppDelegate укажите:
class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate, UNUserNotificationCenterDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
//Другой код
AltcraftSDK.setJWTProvider(provider: JWTProvider())
}
//Другие функции
}
getJWT() — синхронная функция. Поток выполнения SDK будет приостановлен до получения JWT. Рекомендуется, чтобы getJWT() возвращал значение немедленно — из кэша (in-memory, UserDefaults или Keychain) — это ускорит выполнение запросов. Желательно подготовить актуальный JWT как можно раньше (на старте приложения) и сохранить его в кэш, чтобы при обращении SDK токен был доступен без задержек. При отсутствии значения допустимо вернуть nil.