Справочник 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)
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] = [:]
)
Ответ и модели
Native SDK не предоставляет аналоги Flutter rawVariables, WithDetails, trackViewNoShow или triggerEventNoShow. Используйте свой UI и Custom JSON с доступными native-методами.
События TriggerEvent
Engagement-типы
Передавайте исходные content, campaign и slot из ответа SDK. Публичного ContentClickEngagement нет; ручная отправка engagement не вызывает tracking callback. Условия учёта показов.
UI-компоненты
// 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
}