iOS SDK¶
Использование Devino iOS SDK¶
Важно
Для получения доступа к iOS SDK необходимо обратиться к менеджеру компании.
Для отправки push-уведомлений с использованием Devino iOS SDK необходимо настроить APNs сертификат в Apple Developer Account.
Для этого требуется:
- Создать App ID.
- Сгенерировать APNs сертификат.
- Настроить профили для разработки и публикации приложения.
- Создать App Group ID для обмена данными через контейнеры. Он понадобится на следующих этапах интеграции.
Примечание
Для работы Devino iOS SDK также необходимы версии библиотек:
- Xcode 11+
- Swift 5+
- iOS 11.0+
Добавление фреймворка DevinoSDK¶
Для добавления фреймворка DevinoSDK к проекту в Xcode необходимо:
-
Переместить DevinoSDK.framework в папку фреймворков проекта.
-
Задать необходимые настройки копирования.
-
Теперь проект в Xcode должен содержать DevinoSDK.framework.
-
Перейти в раздел Build Phases и добавить DevinoSDK.framework в Embed Frameworks.
Добавление Devino Notification Service Extension¶
Для добавления Devino Notification Service Extension к проекту в Xcode необходимо:
-
Подключить Notification Service Extension. Он необходим для прикрепления медиафайлов к уведомлению (например, изображений). Для этого нужно перейти по пути:
File
>New
>Target
>Notification Service Extension
. -
Настроить версии версии таргетов iOS в основном проекте и в Project Deployment Target - все версии должны быть одинаковыми.
-
Настроить подключение к DevinoNotificationService:
import DevinoSDK import UserNotifications class NotificationService: DevinoNotificationService { override var appGroupsId: String? { return "group.com.fruktorum.DevinoPush" } override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) { super.didReceive(request, withContentHandler: contentHandler) // Your code } }
-
Заполните раздел
Signing & Capabilities
для всех таргетов проекта и расширения NotificationService.
Настройка DevinoSDK¶
Для настройки DevinoSDK в AppDelegate необходимо:
-
Импортировать
DevinoSDK
в свой проект:import DevinoSDK
-
Объявить константу
devinoUNUserNotificationCenter
:let devinoUNUserNotificationCenter = DevinoUNUserNotificationCenter()
-
Объявить константу
AppGroupID
, предварительно созданный в Apple Developer Account:let appGroupId = "group.com.fruktorum.DevinoPush" //example
-
Настроить метод didFinishLaunchingWithOptions. Для этого необходимо указать Devino API key (
key
) и ID приложения для push-уведомлений (applicationId
).Вы также можете указать интервал обновления геолокации в минутах (
geoDataSendindInterval
). По умолчанию значение параметра будет0
, что означает не передавать данные о геолокации.Также необходимо вызвать метод, который позволит получать push-уведомления через сервис Apple Push Notification (
registerForRemoteNotifications
).Пример метода
didFinishLaunchingWithOptions
:func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { //настройки Devino: let config = Devino.Configuration(key: "<key>", applicationId: <id>, appGroupId: <appGroupId>, geoDataSendindInterval: 1) Devino.shared.activate(with: config) Devino.shared.trackLaunchWithOptions(launchOptions) //получение push-уведомлений через сервис Apple Push Notification: application.registerForRemoteNotifications() return true }
-
В методе
didFinishLaunchingWithOptions
присвоить объектdelegate
к объектуUNUserNotificationCenter
:UNUserNotificationCenter.current().delegate = devinoUNUserNotificationCenter
-
Настроить параметры кнопок в уведомлениях:
devinoUNUserNotificationCenter.setActionForUrl { url in // url action } devinoUNUserNotificationCenter.setActionForDefault { // default action } devinoUNUserNotificationCenter.setActionForDismiss { // dismiss action } devinoUNUserNotificationCenter.setActionForCustomDefault { action in // tap action on push }
-
Указать функцию для аутентификации через
deviceToken
:func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { Devino.shared.registerForNotification(deviceToken) }
-
Указать функцию отслеживания действий по запуску и окончанию работы приложения:
func applicationWillEnterForeground(_ application: UIApplication) { Devino.shared.trackAppLaunch() } func applicationWillTerminate(_ application: UIApplication) { Devino.shared.trackAppTerminated() }
-
Настроить получение удаленных уведомлений (Remote Notifications):
public func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { Devino.shared.trackReceiveRemoteNotification(userInfo) completionHandler(.newData) }
-
Настроить отслеживание локальных уведомлений (Local Notifications):
func application(_ application: UIApplication, handleActionWithIdentifier identifier: String?, for notification: UILocalNotification, completionHandler: @escaping () -> Void) { Devino.shared.trackLocalNotification(notification, with: identifier) completionHandler() }
Функционал DevinoSDK¶
Отслеживание изменения статуса подписки¶
DevinoSDK автоматически отслеживает статус подписки пользователя на уведомления.
Статус подписки меняется, если:
- Пользователь согласился получать уведомления в приложении. Либо подтверждение подписки не требуется, и уведомления будут приходить независимо от согласия пользователя.
- Пользователь отключил уведомления в приложении.
Отправку актуального статуса подписки можно настроить через функцию sendCurrentSubscriptionStatus
:
public func sendCurrentSubscriptionStatus(isSubscribe: Bool)
Devino.shared.sendCurrentSubscriptionStatus(isSubscribe: true)
Получение изменения статуса подписки можно настроить через функцию getLastSubscriptionStatus
:
public func getLastSubscriptionStatus(_ completionHandler: @escaping (Bool) -> Void)
Devino.shared.getLastSubscriptionStatus { result in
//do smth with result
}
Обновление данных пользователя¶
Функция обновления данных пользователя может использоваться в двух случаях:
- Пользователь автоматически авторизовался в приложении.
- Пользователь изменил личные данные.
Для изменения данных пользователя нужно указать два обязательных параметра:
Параметр | Тип данных | Описание | Формат |
---|---|---|---|
phone | string | Номер телефона пользователя. | +79XXXXXXXXX |
string | Email пользователя. | XXXX@XX.XX |
Пример настройки и использования функции обновления данных пользователя (setUserData
):
public func setUserData(phone: String?, email: String?)
Devino.shared.setUserData(phone: "+79123456789", email: "test@gmail.com")
Отправка геолокации¶
Получать данные о геолокации пользователя можно в зависимости от настроек приватности:
- Геолокация доступна в любое время, в том числе и во время использования приложения.
- Геолокация доступна только во время использования приложения.
Отслеживать геолокацию можно с заданной периодичностью в минутах. Интервал в минутах указывается в параметре geoDataSendindInterval
, который используется для настройки DevinoSDK.
Настройка и использование метода получения геолокации (trackLocation
):
public func trackLocation()
Devino.shared.trackLocation()
Уведомление с координатами пользователя отправляется сразу после определения его геолокации. Например:
Получение логов¶
Пример настройки и использования функции получения логов:
public var logger: ((String) -> Void)?
Devino.shared.logger = { logStr in
//do something
}
Отправка push-уведомлений¶
Параметры метода отправки уведомлений¶
Параметр | Тип | Описание | Пример |
---|---|---|---|
title (optional) |
string | Заголовок уведомления. Максимальная длина - 50 символов. | "Заголовок" |
text (optional) |
string | Текст уведомления. Максимальная длина - 150 символов. | "Текст уведомления." |
badge (optional) |
integer | Параметр настройки бейджа приложения - значка с цифрой в верхнем углу иконки приложения. Доступно два значения: |
.zero |
validity (optional) |
integer | Срок жизни уведомления в секундах. Максимальное значение: 2419200, 28 дней |
2419200 |
priority | string | Приоритет отправки сообщения.
|
.realtime |
silentPush (optional) |
boolean | Если true , уведомление не будет отображаться на устройстве получателя. По умолчанию false . |
false |
options (optional) |
string | Дополнительные параметры для передачи на устройство. Любой массив вида |
["key": "value"] |
sound (optional) |
string | Звук push-уведомления на iOS. Поддерживает значение |
"push_sound.wav" |
buttons (optional) |
array[ActionButtons] | Включает в себя максимум 3 объекта кнопок. | [ActionButton(caption: "Title", action: "https://...")] |
linkToMedia (optional) |
string | URL на файл, прикрепляемый к уведомлению. Поддерживаемые форматы: |
"https://..." |
action (optional) |
string | URL/deep link для перехода при нажатии на уведомление. | "https://..." |
ActionButtons¶
Параметр | Тип данных | Описание | Пример |
---|---|---|---|
caption (optional) |
string | Название кнопки. | Button |
action (optional) |
string | URL/deep link для перехода при нажатии на кнопку в уведомлении. | "https://..." |
Параметры переменной Badge
:
public enum Badge: Int {
case zero = 0
case one = 1
}
Параметры переменной Priority
:
public enum Priority: String {
case medium = "MEDIUM"
case low = "LOW"
case high = "HIGH"
case realtime = "REALTIME"
}
Параметры класса ActionButton
:
public class ActionButton {
var caption: String //name button
var action: String //urls/deep link
}
Пример настройки метода отправки уведомлений¶
public func sendPushNotification(
title: String? = "Devino Telecom",
text: String? = "Text notification",
badge: DevinoSDK.Badge? = nil,
validity: Int? = 2419200,
priority: DevinoSDK.Priority = .realtime,
silentPush: Bool? = nil,
options: [String : Any]? = nil,
sound: String? = "default",
buttons: [DevinoSDK.ActionButton]? = nil,
linkToMedia: String? = nil,
action: String? = nil
)
Пример отправки уведомления:
Devino.shared.sendPushNotification(
sound: "push_sound.wav",
linkToMedia: https://i.gyazo.com/3dd58384ebf8c8b9bf39e7f445c8fb16.png
)