Skip to main content
Documentation for version v73

Быстрый старт

В статье приведен пример быстрой интеграции Altcraft mSDKv2 с Apple Push Notification System (APNS) и Firebase Cloud Messaging (FCM). После выполнения указанных шагов ваше приложение сможет получать push-уведомления Altcraft.

Для использования Huawei Mobile Services необходимо добавить соответствующие SDK в проект и реализовать их интерфейсы, используя тот же подход, что показан для APNS и FCM.

Шаг 0. Предварительные условия

  • Получен доступ к APNS получен на сайте;
  • Приложение настроено в проекте Firebase, GoogleServiceInfo.plist загружен.

Шаг 1. Добавление пакетов (Swift Package Manager)

Добавьте пакеты из репозиториев с помощью Swift Package Manager:

Шаг 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:

    • Добавьте ключи и значения:
      1. key: "Permitted background task scheduler identifiers" | type: Array | value:"lib.Altcraft.bgTask.systemControl"
      2. key: "FirebaseAppDelegateProxyEnabled" | type: Boolean | value: NO

    Первый ключ необходим для регистрации bgTask-задачи, которая будет выполнять повтор неудачных запросов к серверу в background-режиме. Второй ключ — для отключения автоматической подмены (method swizzling) методов AppDelegate, которую Firebase Messaging выполняет по умолчанию.



Шаг 3. Реализация протоколов

JWT

Выполните реализацию протокола SDK, предназначенного для предоставления JWT-токена. Для этого создайте класс, реализующий JWTInterface, и переопределите getJWT():

import Altcraft

class JWTProvider: JWTInterface {
func getToken() -> String? {
//ваш код возвращающий JWT
}
}
К сведению

getJWT() — синхронная функция. Поток выполнения SDK будет приостановлен до получения JWT. Рекомендуется, чтобы getJWT() возвращал значение немедленно — из кэша (in-memory, SharedPreferences или EncryptedSharedPreferences) — это ускорит выполнение запросов. Желательно подготовить актуальный JWT как можно раньше (на старте приложения) и сохранить его в кэш, чтобы при обращении SDK токен был доступен без задержек. При отсутствии значения допустимо вернуть nil.

FCM

Выполните реализацию протокола SDK, предназначенного для предоставления и удаления FCM-токена. Для этого создайте класс, реализующий FCMInterface, и переопределите getToken(), deleteToken().

import FirebaseMessaging
import Altcraft

class FCMProvider: FCMInterface {

/// Retrieves the current FCM token.
func getToken(completion: @escaping (String?) -> Void) {

///apns token retrieved from userDefault
let apnsToken = getAPNsTokenDataFromUserDefaults()

///set the apns token for fcm before requesting the fcm token
Messaging.messaging().apnsToken = apnsToken

///fcm token request function
Messaging.messaging().token { token, error in
if error != nil {
completion(nil)
} else {
completion(token)
}
}
}

/// Deletes the current FCM token.
func deleteToken(completion: @escaping (Bool) -> Void) {
Messaging.messaging().deleteToken { error in
if error != nil {
completion(false)
} else {
completion(true)
}
}
}
}

APNS

Выполните реализацию протокола SDK, предназначенного для предоставления APNS-токена. Для этого создайте класс, реализующий APNSInterface, и переопределите getToken():

import Altcraft

class APNSProvider: APNSInterface {
/// Retrieves the current APNs token from local storage.
func getToken(completion: @escaping (String?) -> Void) {
let token = getAPNsTokenFromUserDefault() - передайте токен apns
completion(token)
}
}

Шаг 4. Настройка Altcraft SDK и Firebase SDK в AppDelegate

Altcraft SDK:

  • выполните передачу идентификатора AppGroups в Altcraft SDK;
  • выполните регистрацию backgroundTasks Altcraft 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.


Шаг 5. Создание Notification Service Extension

Создайте расширение приложения Notification Service Extension:

  • Выполните FileNewTargetNotification Service Extension;
  • Выберите название (Product Name) для таргета расширения;
  • Активируйте его.


Выполните в Notification Service Extension:

  • General:
    • Укажите Minimum Deployments — это параметр сборки в Xcode, который определяет минимальную версию операционной системы, на которой будет работать Notification Service Extension;
    • Добавьте библиотеку Altcraft в разделе Frameworks, Libraries and Embedded Content.


  • Signing & Capabilities:
    • AppGroups — укажите идентификатор AppGroup.

Затем настройте SDK в UNNotificationServiceExtension:

  • Импортируйте библиотеку Altcraft;
  • Создайте экземпляр AltcraftPushReceiver();
  • В функции didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void):
    • Передайте идентификатор appGroup в функцию AltcraftSDK.shared.setAppGroup(groupName: appGroupsName). Данный идентификатор должен соответствовать идентификатору переданному в SDK в таргете приложения;
    • Установите провайдер JWT (если используется JWT-аутентификация запросов): AltcraftSDK.shared.setJWTProvider(provider: jwtProvider);
    • Выполните проверку источника уведомления с помощью функции isAltcraftPush(request) класса AltcraftPushReceiver(): service.isAltcraftPush(request);
    • После проверки источника уведомления, передайте UNNotificationRequest и contentHandler в функцию didReceive класса AltcraftPushReceiver(): self.service.didReceive(request, withContentHandler: contentHandler), если источник уведомления — Altcraft.

Приведенный ниже пример реализации UNNotificationServiceExtension можно использовать как готовый класс. Замените весь автоматически сгенерированный код на эту реализацию, если вам не требуется дополнительная логика. Если вы уже используете UNNotificationServiceExtension, интегрируйте функции Altcraft в свою реализацию.

Пример реализации UNNotificationServiceExtension
import Altcraft
import UserNotifications

class NotificationService: UNNotificationServiceExtension {
var service = AltcraftPushReceiver()

/// - important! Set app groups name.
var appGroupsName = "your.app.group"
let jwtProvider = JWTProvider()

override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {

AltcraftSDK.shared.setAppGroup(groupName: appGroupsName)
AltcraftSDK.shared.setJWTProvider(provider: jwtProvider)

if service.isAltcraftPush(request) {
self.service.didReceive(request, withContentHandler: contentHandler)
} else {
contentHandler(request.content)
}
}
override func serviceExtensionTimeWillExpire() {service.serviceExtensionTimeWillExpire()}
}

Шаг 6. Инициализация SDK

Создайте переменную конфигурации и выполните инициализацию с помощью функции initialization(), где ios-firebase выбран приоритетным провайдером:

let config = AltcraftConfiguration.Builder()
.setApiUrl("your_api_url")
.setProviderPriorityList([Constants.ProviderName.firebase])
.build()

AltcraftSDK.shared.initialization(configuration: config)

В данном примере в качестве приоритетного провайдера установлен ios-firebase. Вы также можете установить APNS в качестве приоритетного провайдера:

let config = AltcraftConfiguration.Builder()
.setApiUrl("your_api_url")
.setProviderPriorityList([Constants.ProviderName.apns])
.build()

AltcraftSDK.shared.initialization(configuration: config)

Вы можете не устанавливать параметр setProviderPriorityList, тогда будет использоваться приоритет по умолчанию — ios-apns -> ios-firebase -> ios-huawei:

let config = AltcraftConfiguration.Builder()
.setApiUrl("your_api_url")
.build()

AltcraftSDK.shared.initialization(configuration: config)

Шаг 7. Выполнение подписки на push-уведомления

Выполните подписку на push-уведомления с помощью функции pushSubscribe(), передав необходимые параметры:

AltcraftSDK.shared.pushSubscriptionFunctions.pushSubscribe(
profileFields: ["_fname": "user_first_name", "_lname": "user_last_name"]
)