Перейти к содержанию

iOS SDK

Использование Devino iOS SDK

Важно

Для получения доступа к iOS SDK необходимо обратиться к менеджеру компании.

Для отправки push-уведомлений с использованием Devino iOS SDK необходимо настроить APNs сертификат в Apple Developer Account.

Для этого требуется:

  1. Создать App ID.
  2. Сгенерировать APNs сертификат.
  3. Настроить профили для разработки и публикации приложения.
  4. Создать App Group ID для обмена данными через контейнеры. Он понадобится на следующих этапах интеграции.

Примечание

Для работы Devino iOS SDK также необходимы версии библиотек:

  • Xcode 11+
  • Swift 5+
  • iOS 11.0+

Добавление фреймворка DevinoSDK

Для добавления фреймворка DevinoSDK к проекту в Xcode необходимо:

  1. Переместить DevinoSDK.framework в папку фреймворков проекта.

  2. Задать необходимые настройки копирования.

  3. Теперь проект в Xcode должен содержать DevinoSDK.framework.

  4. Перейти в раздел Build Phases и добавить DevinoSDK.framework в Embed Frameworks.

Добавление Devino Notification Service Extension

Для добавления Devino Notification Service Extension к проекту в Xcode необходимо:

  1. Подключить Notification Service Extension. Он необходим для прикрепления медиафайлов к уведомлению (например, изображений). Для этого нужно перейти по пути: File > New > Target > Notification Service Extension.

  2. Настроить версии версии таргетов iOS в основном проекте и в Project Deployment Target - все версии должны быть одинаковыми.

  3. Настроить подключение к 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
        }
    }
    
  4. Заполните раздел Signing & Capabilities для всех таргетов проекта и расширения NotificationService.

Настройка DevinoSDK

Для настройки DevinoSDK в AppDelegate необходимо:

  1. Импортировать DevinoSDK в свой проект:

    import DevinoSDK
    
  2. Объявить константу devinoUNUserNotificationCenter:

    let devinoUNUserNotificationCenter = DevinoUNUserNotificationCenter()
    
  3. Объявить константу AppGroupID, предварительно созданный в Apple Developer Account:

    let appGroupId = "group.com.fruktorum.DevinoPush" //example
    
  4. Настроить метод 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
    }
    
  5. В методе didFinishLaunchingWithOptions присвоить объект delegate к объекту UNUserNotificationCenter:

    UNUserNotificationCenter.current().delegate = devinoUNUserNotificationCenter
    
  6. Настроить параметры кнопок в уведомлениях:

    devinoUNUserNotificationCenter.setActionForUrl { url in
        // url action
    }
    devinoUNUserNotificationCenter.setActionForDefault {
        // default action
    }
    devinoUNUserNotificationCenter.setActionForDismiss {
        // dismiss action
    }
    devinoUNUserNotificationCenter.setActionForCustomDefault {  action in
        // tap action on push
    }
    
  7. Указать функцию для аутентификации через deviceToken:

    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        Devino.shared.registerForNotification(deviceToken)
    }
    
  8. Указать функцию отслеживания действий по запуску и окончанию работы приложения:

    func applicationWillEnterForeground(_ application: UIApplication) {
        Devino.shared.trackAppLaunch()
    }
    
    func applicationWillTerminate(_ application: UIApplication) {
        Devino.shared.trackAppTerminated()
    }
    
  9. Настроить получение удаленных уведомлений (Remote Notifications):

    public func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        Devino.shared.trackReceiveRemoteNotification(userInfo)
        completionHandler(.newData)
    }
    
  10. Настроить отслеживание локальных уведомлений (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
email string Email пользователя. XXXX@XX.XX

Пример настройки и использования функции обновления данных пользователя (setUserData):

public func setUserData(phone: String?, email: String?)

Devino.shared.setUserData(phone: "+79123456789", email: "test@gmail.com")

Отправка геолокации

Получать данные о геолокации пользователя можно в зависимости от настроек приватности:

  1. Геолокация доступна в любое время, в том числе и во время использования приложения.
  2. Геолокация доступна только во время использования приложения.

Отслеживать геолокацию можно с заданной периодичностью в минутах. Интервал в минутах указывается в параметре 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

Параметр настройки бейджа приложения - значка с цифрой в верхнем углу иконки приложения.

Доступно два значения:
.one (1) - для отображения бейджа.
.zero (0) - для удаления бейджа.

.zero
validity
(optional)
integer Срок жизни уведомления в секундах.
Максимальное значение: 2419200, 28 дней
2419200
priority string

Приоритет отправки сообщения.

LOW и MEDIUM - низкий и средний приоритеты, используются для рекламных сообщений.
HIGH - высокий приоритет, используется для сервисного трафика.
REALTIME - максимально возможный приоритет, используется для транзакционного трафика.
При использовании любого другого значения сообщение будет отклонено.

.realtime
silentPush
(optional)
boolean Если true, уведомление не будет отображаться на устройстве получателя. По умолчанию false. false
options
(optional)
string

Дополнительные параметры для передачи на устройство.

Любой массив вида "key":
[ "key1": "value1", "key2": "value2" ]

["key": "value"]
sound
(optional)
string

Звук push-уведомления на iOS.

Поддерживает значение default или имя файла. Звуковой файл должен входить в основной пакет приложения.

"push_sound.wav"
buttons
(optional)
array[ActionButtons] Включает в себя максимум 3 объекта кнопок. [ActionButton(caption: "Title", action: "https://...")]
linkToMedia
(optional)
string

URL на файл, прикрепляемый к уведомлению.

Поддерживаемые форматы:
Аудио: AIFF, WAV, MP3, MPEG-4. 5 MB
Видео: MPEG, MPEG-2, AVI. 50 MB
Изображение: JPEG. PNG, GIF. Разрешение: 1024x1024 или соотношение сторон 1:1, 10 МБ

"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
)