Справочник iOS SDK 1.0.6

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

Инициализация и настройки

public static var isInitialized: Bool { get }
public static var instance: GravitySDK { get }

public static func initialize(
    apiKey: String,
    section: String,
    gravityEventCallback: GravityEventCallback? = nil,
    productViewBuilder: ProductViewBuilder? = nil,
    productFilter: ProductFilter? = nil,
    uiSettings: UISettings? = nil,
    logLevel: LogLevel = .error
    )

public func setOptions(
    options: Options?,
    contentSettings: ContentSettings?,
    proxyUrl: String?
    )

public func setNotificationPermissionStatus(
    status: NotificationPermissionStatus
    )

public func setLogListener(_ listener: GravityLogListener?)

Типы callback

public typealias ProductFilter = (Slot) -> Bool
public typealias GravityEventCallback = (TrackingEvent) -> Void
public typealias GravityLogListener = @Sendable (LogLevel, String) -> Void

Идентификация

public func setUser(userId: String, sessionId: String)

setUser задаёт custom/ses для просмотров и событий. Его ограничение для /choose описано в Идентификации.

Просмотры и события

public func trackView(
    pageContext: PageContext,
    viewController: UIViewController? = nil
    )

public func triggerEvent(
    events: [TriggerEvent],
    pageContext: PageContext,
    viewController: UIViewController? = nil
    )

Загрузка контента

public func getContentBySelector(
    selector: String,
    pageContext: PageContext
    ) async -> ContentResponse?

public func getContentByGroupSelector(
    groupSelector: String,
    pageContext: PageContext
    ) async -> ContentResponse?

public func getContentByCampaignId(
    _ campaignId: String,
    _ pageContext: PageContext
    ) async -> ContentResponse?

Ошибка возвращает nil; успешный ответ может содержать пустой data. Эти методы не показывают UI, но отправляют content load tracking.

Engagement

public func sendContentEngagement(engagement: ContentEngagement)

public func sendProductEngagement(engagement: ProductEngagement)

Presentation lock

public func lockPresentation()

public func unlockPresentation()

public func setPresentationLockListener(_ listener: ((Bool) -> Void)?)

Настройки запросов

// Options
public init(
        isReturnCounter: Bool = false,
        isReturnUserInfo: Bool = false,
        isReturnAnalyticsMetadata: Bool = false,
        isImplicitPageview: Bool = false,
        isImplicitImpression: Bool = true
    )

// ContentSettings
public init(
        skusOnly: Bool = false,
        fields: [String]? = nil
    )

// UISettings
public init(fontName: String? = nil)
Поле Options По умолчанию
isReturnCounter false
isReturnUserInfo false
isReturnAnalyticsMetadata false
isImplicitPageview false
isImplicitImpression true
isBuildEngagementUrl true, без публичного параметра для изменения

ContentSettings: skusOnly по умолчанию false, fields — nil. Оба объекта заменяются целиком через setOptions.

PageContext

// PageContext: Codable, Equatable
public init(
        type: ContextType,
        data: [String],
        location: String,
        lng: String? = nil,
        pageNumber: Int? = nil,
        referrer: String? = nil,
        utm: [String: String]? = nil,
        attributes: [String: String] = [:]
    )

Ответ и модели

Тип/поле Содержание
ContentResponse Опциональный user и список data с кампаниями
Campaign.payload Список вариантов CampaignVariation
CampaignVariation Идентификаторы решения и список contents
CampaignContent contentId, deliveryMethod, step, variables, products, items, custom, events
content.variables Типизированные frameUI, elements и действия жизненного цикла; может отсутствовать
content.custom?.json Строка пользовательского JSON, разбирается приложением
Slot item, strId, опциональный slotId, fallback и tracking-события

Native SDK не предоставляет аналоги Flutter rawVariables, WithDetails, trackViewNoShow или triggerEventNoShow. Используйте свой UI и Custom JSON с доступными native-методами.

События TriggerEvent

Событие Основные параметры
AddToCartEvent value, productId, quantity, currency?, cart?
PurchaseEvent uniqueTransactionId, value, cart, currency?
RemoveFromCartEvent value, productId, quantity, currency?, cart?
SyncCartEvent value, currency?, cart?
AddToWishlistEvent value, productId
SignUpEvent hashedEmail?, cuid?, cuidType?
LoginEvent hashedEmail?, cuid?, cuidType?
CustomEvent type, name, customProps?

Engagement-типы

Содержимое Публичные типы
Контент ContentImpressionEngagement, ContentVisibleImpressionEngagement, ContentCloseEngagement
Товары ProductClickEngagement, ProductVisibleImpressionEngagement

Передавайте исходные content, campaign и slot из ответа SDK. Публичного ContentClickEngagement нет; ручная отправка engagement не вызывает tracking callback. Условия учёта показов.

UI-компоненты

Компонент Параметры
GravityInlineSwiftUIView selector, pageContext; перегрузка с @ViewBuilder loader
GravityInlineView init(selector:), затем initialize(pageContext:); перегрузка с loader
GravityInlineListView init(groupSelector:), затем initialize(pageContext:); перегрузка с loader
UISettings fontName: String?
// GravityInlineSwiftUIView
public init(selector: String, pageContext: PageContext)

public init<Loader: View>(
        selector: String,
        pageContext: PageContext,
        @ViewBuilder loader: () -> Loader
    )

// GravityInlineView
public convenience init(selector: String)
public func initialize(pageContext: PageContext)

public func initialize<Loader: View>(
        pageContext: PageContext,
        @ViewBuilder loader: () -> Loader
    )

// GravityInlineListView
public convenience init(groupSelector: String)
public func initialize(pageContext: PageContext)

public func initialize<Loader: View>(
        pageContext: PageContext,
        @ViewBuilder loader: () -> Loader
    )
public protocol ProductViewBuilder {
    @ViewBuilder
    func build(
        slot: Slot,
        content: CampaignContent,
        campaign: Campaign
    ) -> AnyView
}

public protocol LegacyProductViewBuilder: ProductViewBuilder {
    func createView(
        slot: Slot,
        content: CampaignContent,
        campaign: Campaign
    ) -> UIView
}

Примеры карточек.