Перейти к основному содержимому

Настройка mSDK для iOS через Firebase

Подключение проекта к Firebase Cloud Messaging

1. Выполните регистрацию приложения на сайте проекта Firebase Cloud Messaging. Для регистрации вам понадобится bundleID:

2. Выполните загрузку json-файла "GoogleService-Info":

3. На настройках проекта на сайте Firebase укажите keyId, teamId, а также загрузите ключ-файл в формате .p8:

Подготовка приложения

1. Выполните загрузку пакета Firebase в проект. Для этого выберите File — Add Package Dependencies, затем введите в строке поиска URL-пакета — https://github.com/firebase/firebase-ios-sdk

2. После загрузки пакета установите фреймворк FirebaseMessaging для таргета приложения:

3. Разместите файл Altcraft.xcodeproj на одном уровне с папкой приложения в проекте:

4. Выполните настройки таргета приложения:

  • Раздел General:

    • Добавьте фреймворк Altcraft в разделе "Frameworks, Libraries and Embedded Content";
    • Проверьте, подключен ли фреймворк FirebaseMessaging в разделе "Frameworks, Libraries and Embedded Content".

  • В разделе Signing & Capabilities добавьте следующие Capability:

    • PushNotifications;
    • AppGroups — в этом параметре укажите название для группы, которое будет использоваться в дальнейшем. Добавление AppGroups необходимо для передачи информации в Notification Service Extension;
    • Background Modes — выберите пункты Background fetch, Remoute notification, Background processing.

  • Раздел Info:

    • Добавьте ключ "Permitted background task scheduler identifiers" и значение "lib.Altcraft.bgTask.systemControl" для него. Это необходимо для регистрации задачи bgTask, которая будет выполнять повтор неудачных запросов к серверу в Background режиме;
    • Добавьте ключ "FirebaseAppDelegateProxyEnabled" и укажите значение NO.

5. Добавьте загруженный раннее файл GoogleService-Info в папку приложения в проекте XCODE. В появившемся после переноса окне выберите Create group и таргет, в который необходимо добавить файл:

Подготовка AppDelegate

1. Импортируйте следующие зависимости в Swift-файл содержащий AppDelegate класс:

   import Altcraft
import Firebase

2. Добавьте необходимые функции в класс AppDelegate. Он должен содержать следующие функции, переменные и расширения:

class AppDelegate: UIResponder, UIApplicationDelegate, MessagingDelegate {

/// groupsName: This is the identifier that is used in App Groups
var appGroupsName = "group.you_name"
/// apiUrl: The URL to the Altcraft API endpoint.
let apiUrl = ""
/// resToken: The unique identifier of the Altcraft resource.
let resToken = ""

private var isAPNSTokenSet = false
private var isFCMTokenProcessed = false

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {

FirebaseApp.configure()
Messaging.messaging().delegate = self

/// - important! The call to setGroupsName() must be made before initializing all other sdk objects in the didFinishLaunchingWithOptions method.
StoredVariablesManager.shared.setGroupsName(value: appGroupsName)

let config = AltcraftConfiguration.Builder()
.setProvider(Constants.ProviderName.firebase)
.setApiUrl(apiUrl)
.setResToken(resToken)
.build()

AltcraftSDK.shared.initialization(configuration: config)
AltcraftSDK.shared.periodicBackgroundTasks.registerBgTaskForSystemFunctionControl()
AltcraftSDK.shared.notificationServiceFunction.registerForPushNotificationsWichSubscription(for: application)

return true
}

func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken apnsToken: Data) {
Messaging.messaging().apnsToken = apnsToken
AltcraftSDK.shared.storedVariablesManager.setAPNsTokenForNotificationServiceExtension(
deviceToken: apnsToken,
suiteName: appGroupsName)
isAPNSTokenSet = true
getFcmToken()
}

func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
guard isAPNSTokenSet, fcmToken != nil, !isFCMTokenProcessed else { return }
isFCMTokenProcessed = true
}

private func getFcmToken() {
guard isAPNSTokenSet && !isFCMTokenProcessed else { return }
Messaging.messaging().token { [weak self] token, error in
guard let self = self else { return }
if let error = error {
print("Error receiving FCM token: \(error.localizedDescription)")
} else if let token = token {
self.isFCMTokenProcessed = true
AltcraftSDK.shared.pushModule.pushModuleControl(deviceToken: token)
}
}
}
}

Для подключения AppDelegate в SwiftUI используйте адаптер:

@UIApplicationDelegateAdaptor(AppDelegate.self) var delegate

Ключевые свойства AppDelegate

1. Обязательно укажите собственное название AppGroupsName:

private var appGroupsName = "group.you_name", где "group.you_name" — имя созданной вами группы. Оно должно соответствовать имени, указанному в Signing & Capabilities:

2. Выполните сохранение appGroupsName перед инициализацией любых других объектов Altcraft:

StoredVariablesManager.shared.setGroupsName(value: appGroupsName)

3. Создайте переменную конфигурации:

    let config = AltcraftConfiguration.Builder()
.setProvider(Constants.ProviderName.firebase)
.setApiUrl(apiUrl)
.setResToken(resToken)
.build()
  • Constants.ProviderName.firebase — константа, содержащая имя сервиса для отправки сообщений ios-firebase

  • apiUrl — URL-адрес конечной точки Altcraft API

  • resToken — ресурс-токен Altcraft.

4. Выполните функцию инициализации класса AltcraftSDK:

AltcraftSDK.shared.initialization(configuration: config), где configuration — переменная конфигурации.

5. Зарегистрируйте задачу класса BGTask — задачу, выполняемую в background:

AltcraftSDK.shared.periodicBackgroundTasks.registerBgTaskForSystemFunctionControl()

6. Выполните запрос на разрешение показа уведомлений у пользователя. В случае положительного ответа будет выполнена автоматическая подписка на push-уведомления Altcraft:

AltcraftSDK.shared.notificationServiceFunction.registerForPushNotificationsWichSubscription(for: application)

Если вы хотите вызвать запрос разрешения на показ без подписки на push-уведомления Altcraft, воспользуйтесь функцией registerForPushNotifications(for: application):

AltcraftSDK.shared.notificationServiceFunction.registerForPushNotifications(for: application)

7. Для отдельного вызова функции, которая добавляет подписку на push-уведомления Altcraft, воспользуйтесь следующим кодом:

AltcraftSDK.shared.pushModule.subscribeToAltcraftPush()

Данная функция выполнит подписку если:

  • разрешение на показ push-уведомлений предоставлено
  • SDK инициализирован
  • токен устройства доступен и получен

Подготовка Notification Service Extension

1. Создайте новый таргет Notification Service Extension:

  • Нажмите File — New — Target — Notification Service Extension
  • Выберите название (Product Name) для таргета
  • Активируйте его

2. Настройте таргет приложения Notification Service Extension:

  • В разделе General:

    • Укажите Minimum Deployments;

    • Добавьте фреймворки Altcraft и FirebaseMessaging в разделе "Frameworks, Libraries and Embedded Content".

  • В разделе Signing & Capabilities:

    • В Capabilities добавьте AppGroups. Название для него укажите такое же, как и в таргете приложения.

3. Замените весь автоматически созданный код на следующий:

import Altcraft
import Firebase
import UserNotifications

class NotificationService: UNNotificationServiceExtension {

/// - important! Set app groups name.
var appGroupsName = "group.you_name"

lazy var service = AltcraftNotificationService()

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

if isAltcraftPush(request) {
StoredVariablesManager.shared.setGroupsName(value: appGroupsName)
_ = AltcraftSDK.shared.coreDataManager
self.service.didReceive(request, withContentHandler: contentHandler)
} else {
contentHandler(request.content)
}

if FirebaseApp.app() == nil {
FirebaseApp.configure()
}

if let apnsToken = UserDefaults(suiteName: appGroupsName)?.data(forKey: Constants.apnsTokenKey) {
Messaging.messaging().apnsToken = apnsToken
Messaging.messaging().token {token, _ in}
}
}
}

Обязательно укажите свое название AppGroupsName:

private var appGroupsName = "group.you_name", где вместо "group.you_name" необходимо указать название AppGroups из Signing & Capabilities.

4. Добавьте загруженный раннее файл GoogleService-Info в папку Notification Service Extension в проекте XCODE. В появившемся после переноса окне выберите Create group и таргет, в который необходимо добавить файл:

Получение событий SDK в приложении

События SDK представляют собой string-объекты содержащие код события. Расшифровка кодов представлена в отдельном файле. Для доступа к списку событий в приложении используйте следующий код:

 AltcraftSDK.shared.eventShared.subscribe { eventCode, message in
//eventCode - String code of the event that occurred in the SDK
//message - detailed information about the sdk event
}

Каждый раз при генерации нового события будет срабатывать замыкание, содержащее код события (eventCode) и сообщение (message), если оно имеется.

Очистка кэша SDK

Очистка данных SDK включает в себя:

  • Очистку объектов базы данных SDK;
  • Очистку данных UserDefaults SDK.

Для очистки кэша SDK выполните функцию:

clearCache{
//the code in this closure will be executed after the SDK data is completely deleted
}

Замыкание сработает после завершения функции.