Настройка mSDK для iOS через APNs
Подключение проекта к APNs
Перейдите на сайт Apple Developer в раздел "Account" — "Certificates, Identifiers & Profiles" — "Identifiers". Создайте новый идентификатор. Выберите опцию App IDs, затем App. Введите в поле Description название, укажите Bundle ID приложения в соответствующем поле, выберите опцию Explicit, затем в списке ниже выберите пункт Push Notifications и зарегистрируйте ID:
Откройте на устройстве приложение "Связка ключей". Перейдите в раздел "Связки ключей по умолчанию" — "Вход", в ме ню выберите "Ассистент сертификации" — "Запросить сертификат у бюро сертификации":
В открывшемся окне заполните необходимые поля и выберите пункт "Сохранен на диске". Сохраните сертификат на устройстве:
Вернитесь в раздел "Certificates, Identifiers & Profiles" — "Certificates" на сайте. Создайте новый сертификат. В списке Services выберите Apple Push Notification service SSL (Sandbox & Production). В следующем пункте найдите ваше приложение в выпадающем списке AppID. Загрузите созданный раннее сертификат в соответствующее поле. Получившийся сертификат Apple сохраните на устройстве:
Дважды нажмите на него, чтобы он появился в приложении "Связка ключей". Откройте его и выберите в параметрах использования сертификата опцию "Всегда доверять":
Дальнейшие действия зависят от того, какой тип аутентификации вы будете использовать: аутентификация с помощью токена или с помощью сертификата.
- Аутентификация с токеном
- Аутентификация с сертификатом
На сайте Apple Developer перейдите в раздел "Certificates, Identifiers & Profiles" — "Keys". Создайте новый ключ. Укажите название ключа и его тип — APNs, нажмите "Continue", затем "Register". Запишите Key ID, он будет необходим для конфигурации ресурса на платформе:
Скачайте ключ к себе на устройство. Его необходимо открыть с помощью любого текстового редактора. Внутри содержится ключ подписи. Его нужно будет указать в соответствующем поле при настройке ресурса.
Ключ можно скачать лишь один раз. Если вы не можете его скачать сейчас, нажмите "Done" и вернитесь, когда такая возможность появится.
На платформе Altcraft создайте ресурс для push-канала, выберите платформу iOS и включите переключатель Apple Push Notification service:
Активируйте переключатель "Использовать APNs токен" в настройках ниже. Заполните следующие поля:
- apns-topic — Bundle ID приложения.
- kid — значение keyID ключа.
- iss — Team ID, обычно указан в аккаунте разработчика на сайте Apple Developer.
- Ключ подписи — содержимое файла-ключа, скачанного раннее.
Сохраните настроенный ресурс с помощью кнопок в верхней части страницы. Платформа готова к отправке уведомлений с помощью APNs.
В приложении "Связка ключей" нажмите правой кнопкой мыши на созданный сертификат и экспортируйте его. Выберите формат .p12. При необходимости установите для сертификата пароль:
Используя терминал перейдите в папку, в которую вы экспортировали сертификат. Создайте pem-ключ с помощью команды openssl pkcs12 -in filename.p12 -out filename.key.pem -nocerts -nodes
, где filename.p12
— имя экспортированного файла, а filename.key.pem
— название создаваемого pem-файла с ключом.
Не закрывая терминал и не переходя в другие папки, создайте pem-сертификат с помощью команды openssl pkcs12 -in filename.p12 -out filename.crt.pem -clcerts -nokeys
по аналогии с командой выше (filename.p12
— исходный файл, filename.crt.pem
— конечный файл).
Откройте данные файлы с помощью редактора nano и скопируйте значение ключа и сертификата:
На платформе Altcraft создайте ресурс для push-канала, выберите платформу iOS и включите переключатель Apple Push Notification service:
Активируйте переключатель "Использовать APNs сертификат" в настройках ниже. Заполните следующие поля:
- Сертификат — значение созданного вами pem-сертификата.
- Приватный ключ — значение созданного вами pem-ключа.
Сохраните настроенный ресурс с помощью кнопок в верхней части страницы. Платформа готова к отправке уведомлений с помощью APNs.
Подготовка приложения
1. Разместите файл Altcraft.xcodeproj на одном уровне с папкой приложения в проекте:
2. Выполните настройки таргета приложения:
-
Раздел General:
Добавьте фреймворк Altcraft в разделе "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 режиме;
Подготовка AppDelegate
- Импортируйте зависимость Altcraft SDK в Swift-файл содержащий AppDelegate класс:
import Altcraft
- Добавьте необходимые функции в класс AppDelegate. Он должен содержать следующие функции и переменные:
class AppDelegate: NSObject, UIApplicationDelegate {
/// groupName: This is the identifier that is used in App Groups
private let groupsName = "group.you_name"
/// apiUrl: The URL to the Altcraft API endpoint.
private let apiUrl = "apiUrl"
/// resToken: The unique identifier of the Altcraft resource.
private let resToken = "resToken"
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
/// - important! The call to setGroupsName() must be made before initializing all other sdk objects in the didFinishLaunchingWithOptions method.
StoredVariablesManager.shared.setGroupsName(value:groupsName)
let config = AltcraftConfiguration.Builder()
.setProvider(Constants.ProviderName.apns)
.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 deviceToken: Data) {
AltcraftSDK.shared.pushModule.pushModuleControl(deviceToken: deviceToken)
}
}
Для подключения 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.apns)
.setApiUrl(apiUrl)
.setResToken(resToken)
.build()
-
Constants.ProviderName.apns — константа, содержащая имя сервиса для отправки сообщений
ios-apns
-
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 в разделе "Frameworks, Libraries and Embedded Content".
-
-
В разделе Signing & Capabilities:
- В Capabilities добавьте AppGroups. Название для него укажите такое же, как и в таргете приложения.
3. Замените весь автоматически созданный код класса на следующий:
import Altcraft
import UserNotifications
class NotificationService: UNNotificationServiceExtension {
/// - important! Set app groups name.
var appGroupsName = "group.you_name"
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)
}
}
override func serviceExtensionTimeWillExpire() {
service.serviceExtensionTimeWillExpire()
}
}
Обязательно укажите свое название AppGroupsName:
private var appGroupsName = "group.you_name"
, где вместо "group.you_name" необходимо указать название AppGroups из Signing & Capabilities.