Интеграция Varioqub UI SDK
Varioqub UI SDK позволяет добавлять интерактивные виджеты и управлять ими через эксперименты Varioqub.
Основные функциональные характеристики
- Отображение динамических UI-компонентов, созданных с помощью DivKit
- Управление содержимым виджетов удаленно через интерфейс Varioqub
- A/B тестирование UI-элементов
- Отображение виджетов как через флаги конфигурации, так и по прямым URL
Требования к системе
- iOS версия 13 и выше.
- Xcode 14.1 и выше.
Шаг 1. Подключение библиотеки в проект
Varioqub UI SDK можно подключить несколькими способами. Выберите удобный способ подключения — через CocoaPods или Swift Package Manager.
Откройте файл Podfile
в вашем проекте и добавьте туда зависимость:
pod 'VarioqubUI', '~> 0.8'
Затем выполните команду для установки:
pod install
Для подключения библиотеки, добавьте следующие зависимости в файл Package.swift
вашего проекта:
targets: [
.target(
name: "MyTarget",
dependencies: [
.product(name: "VarioqubUI", package: "varioqub-sdk-ui-ios"),
]
)
]
dependencies: [
.package(url: "https://github.com/appmetrica/varioqub-sdk-ui-ios", "0.8"..<"2.0.0"),
]
Шаг 2. Инициализация Varioqub
Прежде чем использовать UI-компоненты, необходимо инициализировать сам Varioqub SDK.
Следуйте инструкциям из статьи Интеграция SDK.
Шаг 3. Использование Varioqub UI с SwiftUI
SwiftUI — фреймворк для создания пользовательских интерфейсов. Varioqub UI SDK интегрируется с SwiftUI с помощью компонента VarioqubSwiftUIView.ViewModel
.
Создаем кастомный виджет
import Varioqub
import VarioqubUI
import DivKit
struct CustomContentView: View {
// VarioqubSwiftUIView.ViewModel управляет состоянием виджета
@ObservableObject var varioqubUIVM: VarioqubSwiftUIView.ViewModel
init(varioqubUIVM: VarioqubSwiftUIView.ViewModel) {
self.varioqubUIVM = varioqubUIVM
}
var body: some View {
VarioqubSwiftUIView(viewModel: varioqubUIVM)
}
}
Настраиваем VarioqubSwiftUIView.ViewModel
и показываем виджет
import DivKit
import VarioqubUI
// Создаем флаг для виджета
let widgetFlag = VarioqubFlag(rawValue: "widget_flag")
// Настраиваем DivKit компоненты
let divComponent = DivKitComponents()
// Создаем VarioqubSwiftUIView.ViewModel для управления виджетом
let varioqubUIVM = VarioqubSwiftUIView.ViewModel(
divComponents: divComponents,
cardId: DivCardID(rawValue: "div_id") // Уникальный ID карточки
)
// Показываем виджет пользователю
VarioqubUI.shared.applyWidget(
widgetName: widgetFlag, // Имя флага из конфигурации
widgetApplier: varioqubUIVM, // Созданная VarioqubSwiftUIView.ViewModel
extraParams: nil // Дополнительные параметры (опционально)
)
Показываем виджет по URL с дополнительными параметрами
Иногда виджет нужно показать не через флаг конфигурации, а по прямой ссылке. Это удобно для deep linking или показа контента по внешним ссылкам:
// Функция для показа виджета по URL
func openWidgetFromUrl(url: URL, isEncrypted: Bool) {
varioqubUIVM.applyWidget(
widgetName: widgetFlag,
widgetApplier: varioqubUIVM,
url: url,
paramName: "url_query_parameter", // Имя параметра в URL для данных виджета
isEncrypted: isEncrypted // Зашифрованы ли данные в URL
)
}
// Пример 1: Передаем зашифрованные данные через URL
// JSON с дополнительными параметрами
let urlQueryParameter = "{ \"extra1\": \"value1\" }"
// Кодируем в Base64
let urlQueryParameterBase64 = urlQueryParameter.data(using: .utf8)?.base64EncodedString() ?? ""
// Формируем URL и открываем виджет
openWidgetFromUrl(
url: URL(string: "https://example.com/widget?url_query_parameter=\(urlQueryParameterBase64)")!,
isEncrypted: true
)
// Пример 2: Передаем открытые данные через URLComponents
// Создаем URL с помощью URLComponents
let urlComponents = URLComponents(string: "https://example.com/widget")
urlComponents.queryItems = [ URLQueryItem(name: "url_query_parameter", value: urlQueryParameter) ]
// Открываем без шифрования
openWidgetFromUrl(url: urlComponents.url, isEncrypted: false)
Шаг 4. Использование Varioqub UI с UIKit
UIKit — фреймворк для разработки графического интерфейса пользователя в приложениях для iOS.
Если вы используете UIKit, Varioqub UI SDK также предоставляет удобные инструменты для интеграции.
import Varioqub
import VarioqubUI
// Создаем флаг для виджета
let widgetFlag = VarioqubFlag(rawValue: "widget_flag")
class CustomViewController: UIViewController {
let varioqubUIVM = VarioqubSwiftUIView.ViewModel(
divComponents: divComponent,
cardId: DivCardID(rawValue: "div_id")
)
@IBOutlet private var parentView: UIView!
// Создаем специальный адаптер для UIKit
private lazy var varioqubUIKitApplier = VarioqubUIKitViewApplier(
parentView: parentView, // Родительский контейнер для виджета
divComponents: DivKitComponents(), // Компоненты для рендеринга
cardId: DivCardID(rawValue: "div_id") // ID карточки
)
override func viewDidLoad() {
super.viewDidLoad()
variqubUIKitApplier.applyWidget(
widgetName: widgetFlag,
widgetApplier: varioqubUIKitApplier,
extraParams: nil
)
}
// Функция для показа виджета по URL
func openWidgetFromUrl(url: URL, isEncrypted: Bool) {
VarioqubUI.shared.applyWidget(
widgetName: widgetFlag,
widgetApplier: varioqubUIKitApplier,
url: url,
paramName: "url_query_parameter",
isEncrypted: isEncrypted
)
}
}
Показываем виджет по URL с дополнительными параметрами
// Зашифрованные параметры
let urlQueryParameter = "{ \"extra1\": \"value1\" }"
let urlQueryParameterBase64 = urlQueryParameter.data(using: .utf8)?.base64EncodedString() ?? ""
viewController.openWidgetFromUrl(url: URL(string: "https://example.com/widget?url_query_parameter=\(urlQueryParameterBase64)")!, isEncrypted: true)
// Незашифрованные параметры
let urlComponents = URLComponents(string: "https://example.com/widget")
urlComponents.queryItems = [ URLQueryItem(name: "url_query_parameter", value: urlQueryParameter) ]
viewController.openWidgetFromUrl(url: urlComponents.url, isEncrypted: false)