Быстрый старт
В статье приведен пример быстрой интеграции Altcraft mSDK с Apple Push Notification System (APNS) и Firebase Cloud Messaging (FCM). После выполнения указанных шагов ваше приложение сможет получать push-уведомления Altcraft.
Для использования Huawei Mobile Services необходимо добавить соответствующие SDK в проект и реализовать их интерфейсы, используя тот же подход, что показан для APNS и FCM.
Шаг 0. Предварительные условия
- Получен доступ к APNS получен на сайте;
- Приложение настроено в проекте Firebase,
GoogleServiceInfo.plistзагружен.
Шаг 1. Подключение Altcraft mSDK к приложению
Добавьте пакеты из репозиториев с помощью Swift Package Manager:
- Репозиторий Altcraft SDK;
- Репозиторий Firebase.
Шаг 2. Добавление GoogleServiceInfo в приложение
Добавьте GoogleServiceInfo.plist в папку вашего приложения:
Шаг 3. Подготовка приложения
Настройте следующие параметры таргета приложения:
- General:
- Проверьте, что библиотека Altcraft добавлена в Frameworks, Libraries, and Embedded Content таргета приложения:
- Проверьте, что библиотека FirebaseMessaging добавлена в Frameworks, Libraries, and Embedded Content таргета приложения:
-
Signing & Capabilities:
- PushNotifications;
- AppGroups — укажите идентификатор для группы (добавление идентификатора App Group необходимо обмена информацией с Notification Service Extension);
Background Modes— выберите Background fetch, Remoute notification, Background processing.
-
Info:
- Добавьте ключи и значения:
| Ключ | Тип | Значение |
|---|---|---|
| Permitted background task scheduler identifiers | Array | "lib.Altcraft.bgTask.systemControl" |
| FirebaseAppDelegateProxyEnabled | Boolean | NO |
Первый ключ необходим для регистрации bgTask-задачи, которая будет выполнять повтор неудачных запросов к серверу в background-режиме. Второй ключ — для отключения автоматической подмены (method swizzling) методов AppDelegate, которую Firebase Messaging выполняет по умолчанию.
Шаг 4. Реализация JWTInterface
Выполните реализацию протокола SDK, предназна ченного для предоставления JWT-токена. Для этого создайте класс, реализующий JWTInterface, и переопределите getJWT():
import Altcraft
class JWTProvider: JWTInterface {
func getToken() -> String? {
//ваш код, возвращающий JWT
}
}
getJWT() — синхронная функция. Поток выполнения SDK будет приостановлен до получения JWT. Рекомендуется, чтобы getJWT() возвращал значение немедленно — из кэша (in-memory, SharedPreferences или EncryptedSharedPreferences) — это ускорит выполнение запросов. Желательно подготовить актуальный JWT как можно раньше (на старте приложения) и сохранить его в кэш, чтобы при обращении SDK токен был доступен без задержек. При отсутствии значения допустимо вернуть nil.
Шаг 5. Реализация FCMInterface
Выполните реализацию протокола SDK, предназначенного для предоставления и удаления FCM-токена. Для этого создайте класс, реализующий FCMInterface, и переопределите getToken(), deleteToken().
import FirebaseMessaging
import Altcraft
class FCMProvider: FCMInterface {
/// Возвращает текущий FCM-токен
func getToken(completion: @escaping (String?) -> Void) {
///токен apns, полученный из userDefault
let apnsToken = getAPNsTokenDataFromUserDefaults()
///установить токен apns для fcm перед запросом токена fcm
Messaging.messaging().apnsToken = apnsToken
///функция запроса токена fcm
Messaging.messaging().token { token, error in
if error != nil {
completion(nil)
} else {
completion(token)
}
}
}
/// Удаляет текущий токен FCM
func deleteToken(completion: @escaping (Bool) -> Void) {
Messaging.messaging().deleteToken { error in
if error != nil {
completion(false)
} else {
completion(true)
}
}
}
}
Шаг 6. Реализация APNSInterface
Выполните реализацию протокола SDK, предназначенного для предоставления APNS-токена. Для этого создайте класс, реализующий APNSInterface, и переопределите getToken():
import Altcraft
class APNSProvider: APNSInterface {
/// Извлекает текущий токен APNs из локального хранилища
func getToken(completion: @escaping (String?) -> Void) {
let token = getAPNsTokenFromUserDefault() - передайте токен apns
completion(token)
}
}
Шаг 7. Настройка Altcraft SDK и Firebase SDK в AppDelegate
Altcraft SDK:
- выполните передачу идентификатора
AppGroupsв Altcraft SDK; - выполните регистрацию
backgroundTasksAltcraft SDK; - установите JWT-, APNS-, FCM-провайдеров;
- выполните регистрацию в центре уведомлений.
FirebaseSDK:
- выполните установку конфигурации;
Пример правильной настройки Altcraft SDK и Firebase SDK в AppDelegate
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
//установка конфигурации FirebaseSDK
FirebaseApp.configure()
//AltcraftSDK
///установка идентификатора AppGroup
AltcraftSDK.shared.setAppGroup(groupName: "group.your_company.name")
///регистрации BGTAsk
AltcraftSDK.shared.backgroundTasks.registerBackgroundTask()
///установка JWTProvider
AltcraftSDK.shared.setJWTProvider(provider: JWTProvider())
///установка APNSProvider
AltcraftSDK.shared.pushTokenFunction.setAPNSTokenProvider(APNSProvider())
///установка FCMProvider
AltcraftSDK.shared.pushTokenFunction.setFCMTokenProvider(FCMProvider())
///регистрация в центре уведомлений
AltcraftSDK.shared.notificationManager.registerForPushNotifications(for: application)
return true
}
func application(
_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken apnsToken: Data
) {
//сохраните apns токен в userDefault
setAPNsTokenInUserDefault(apnsToken)
}
}
- выполните установку
delegate; - передайте APNS-токен в Firebase в функции
AppDelegate.application(_:didFinishLaunchingWithOptions:). Это гарантирует правильную инициализацию Firebase и доступность FCM-токена в background-режиме, например, во время выполненияBGTask. Так как APNS-токен не доступен вAppDelegate.application(_:didFinishLaunchingWithOptions:), используете сохраненное значение, например, вUserDefaults.