Настройка 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