IOS SDK
Установка через XCODE
Accelera SDK
Библиотека Accelera — это модульный SDK для интеграции динамического контента (баннеров, сторис и попапов) и push-уведомлений в ваше iOS-приложение.
📦 Установка через Swift Package Manager
-
Откройте Xcode
-
File → Add Packages... -
Введите URL:
https://github.com/cubesolutionsgit/accelera-ios-sdk-spm.git -
Выберите версию cамую свежую версию (пример
0.6.4) -
Важно: выберите только один продукт из списка:
| Продукт | Описание |
|---|---|
Accelera | Пуш уведомления + Accelera Stories |
AcceleraBanners | Только Accelera Stories |
AcceleraNotifications | Только пуш-уведомления (Firebase) |
* Accelera использует Firebase , а не APN. Таким образом, вы контролируете отправку из единого кабинета Firebase
⚙️ Конфигурация
Стандартная инициализация
import Accelera
Accelera.shared.configure(
config: AcceleraConfig(
url: "https://your-api-endpoint.com",
systemToken: "your-system-token"
)
)URL - это базовый url для отправки / получения данных с бекенда Accelera
systemToken - Секрет для обмена данными с бекендом
Ставится на каждую страницу, где используется API Accelera
:bearded_person: Идентификация пользователя
Для передачи основных идентифицирующих данных пользователя приложения, а так же для добавления дополнительных данных о пользователе используется метод
Accelera.shared.setUserInfo(
"{\"clientId\": \"123\", \"language\": \"KZ\", \"theme\": \"dark\"}"
)В примере, мы указываем 2 обязательных параметра : clientId и language. Мы добавили опциональный параметр theme , который мы так же можем использовать для сегментации и персонализации.
Добавление контента на страницы приложения
Контент добавляется в блоки SwiftUI. Блоки (placeholder’ы) наполняются контентом согласно настроенным правилам и бизнес логике на стороне Accelera. Вам необходимо выбрать места, где будут демонстрироваться блоки контента такие как баннеры и сторис.
Блоки контента сопоставляются со слотами внутри платформы. 1 блок = 1 слот.
Хорошей практикой является создание и добавление мест для показа контента офферов с добавлением слотов в платформе.
SwiftUI
В SwiftUI можно использовать AcceleraAutoHeightPlaceholderWrapper, чтобы высота UIView-placeholder автоматически синхронизировалась с высотой загруженного контента и уменьшалась до 0, когда контент исчезает.
import SwiftUI
import UIKit
import Accelera // Для продукта Accelera
// import AcceleraBanners // Для продукта AcceleraBanners
struct HomeView: View {
@State private var bannerPlaceholder: UIView?
@State private var isBannerVisible = false
var body: some View {
VStack(spacing: 0) {
AcceleraAutoHeightPlaceholderWrapper(
onVisibilityChanged: { isBannerVisible = $0 }
) { placeholder in
bannerPlaceholder = placeholder
Accelera.shared.attachContentPlaceholder(
to: placeholder,
with: ["type": "banner"].asData
)
}
.padding(.vertical, isBannerVisible ? 16 : 0)
MainContentView()
}
}
private func refreshBanner() {
guard let bannerPlaceholder else { return }
Accelera.shared.refreshContentPlaceholder(in: bannerPlaceholder)
}
private func detachBanner() {
guard let bannerPlaceholder else { return }
Accelera.shared.detachContentPlaceholder(from: bannerPlaceholder)
}
}refreshContentPlaceholder повторно загружает баннер с теми же параметрами, detachContentPlaceholder убирает его из контейнера.
Необязательный onVisibilityChanged позволяет добавлять внешние отступы только тогда, когда высота контента больше 0. Сам placeholder остаётся в иерархии и доступен для повторной загрузки.
ℹ️ Параметры метода **attachContentPlaceholder**
| Параметр | Тип | Описание |
|---|---|---|
to | UIView | View-контейнер для отображения контента |
with | Data | Конфигурация контента в формате JSON. Может содержать тип и параметры |
🔸 Типы контента:
"stories"— сторис (горизонтальная лента историй, при клике можно открыть на полный экран)"banner"— баннеры (статичный или карусель)
🔸 Данные из платформы (настраивается в интерфейсе):
"сhannel"— название канала"slot"— название слота
Данные по каналу и слоту можно получить от пользователя платформы с экрана “Каналы”

🔹 Пример
Accelera.shared.attachContentPlaceholder(
to: bannerPlaceholder,
with: [
"type": "banner",
"channel": "main_screen",
"slot":"main_page"
].asData
)Конкретный набор параметров зависит от вашей серверной конфигурации и бизнес-логики.
Попапы
Попапы отображают полноэкранный динамический контент поверх текущего экрана.
Попап показывается сразу после активации метода Accelera.shared.showPopup() ! Его можно использовать по внутренним событиям внутри приложения, таким как возращение экрана в активный режим или нажатию на элементы приложений!
Обязательные параметры для Попапов
🔸 Данные из платформы (настраивается в интерфейсе):
"сhannel"— название канала"slot"— название слота
Accelera.shared.showPopup(
from: self,
data: [
"type": "popup",
"slot": "main_popup",
"channel":"dev"
].asData
)Получение пуш-уведомлений
Для получения Пуш уведомлений, вам требуется
Обработка пуш-уведомлений
UNUserNotificationCenter.current().delegate = selfПодразумевается, что конфигурация уже выполнена
Передача событий о клике
Формат данных
{"deviceId":"416AC343-0EB2-40CC-8089-C6E63C697385","event":"clicked","context":{"message_id":"98f60cff-5d5e-4d1f-a5cd-0c076dc7bd53"}}
Реализовать UNUserNotificationCenterDelegate — извлечь message_id из userInfo
Передать message_id в setUserInfo
- Настроить Firebase (
GoogleService-Info.plist,FirebaseApp.configure()) - Реализовать
UNUserNotificationCenterDelegate— извлечьmessage_idизuserInfo - Передать
message_idвsetUserInfo
Пример
// UNUserNotificationCenterDelegate
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
if let messageId = userInfo["message_id"] as? String {
let json = """
{"deviceId":"\(UIDevice.current.identifierForVendor?.uuidString ?? "")","event":"clicked","context":{"message_id":"\(messageId)"}}
"""
Accelera.shared.setUserInfo(json)
}
completionHandler()
}Более подробно сложные случаи описаны на <https://github.com/cubesolutionsgit/accelera-ios-sdk-spm>