Настройка 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
}
Замыкание сработает после завершения функции.