Справочник Android SDK 1.0.4
Сигнатуры сверены с публичным исходным кодом. Примеры настройки — в Конфигурации, бизнес-сценарии — в Контексте и событиях.
Инициализация и настройки
fun initialize(
context: Context,
apiKey: String,
section: String,
gravityEventCallback: GravityEventCallback,
productViewBuilder: ProductViewBuilder? = null,
productFilter: ProductFilter? = null,
uiSettings: UISettings? = null,
logLevel: LogLevel = LogLevel.NONE,
)
fun setOptions(
options: Options?,
contentSettings: ContentSettings?,
proxyUrl: String?,
)
fun setNotificationPermissionStatus(status: NotificationPermissionStatus)
Типы callback
typealias ProductFilter = (Slot) -> Boolean
typealias GravityEventCallback = (TrackingEvent) -> Unit
Доступ к экземпляру: GravitySDK.instance: GravitySDK. До initialize он выбрасывает исключение.
Идентификация
fun setUser(userId: String, sessionId: String)
setUser задаёт custom/ses для просмотров и событий. Его ограничение для /choose описано в Идентификации.
Просмотры и события
fun trackView(
pageContext: PageContext,
activityContext: Context,
)
fun triggerEvent(
events: List<TriggerEvent>,
pageContext: PageContext,
activityContext: Context,
)
Загрузка контента
suspend fun getContentBySelector(
selector: String,
pageContext: PageContext,
): ContentResponse?
suspend fun getContentByGroupSelector(
groupSelector: String,
pageContext: PageContext,
): ContentResponse?
suspend fun getContentByCampaignId(
campaignId: String,
pageContext: PageContext,
): ContentResponse?
Ошибка возвращает null; успешный ответ может содержать пустой data. Значения selector/group/строкового ID кодируйте по правилу Android 1.0.4. Эти методы не показывают UI, но отправляют content load tracking.
Engagement
fun sendContentEngagement(engagement: ContentEngagement)
fun sendProductEngagement(engagement: ProductEngagement)
Presentation lock
fun lockPresentation()
fun unlockPresentation()
fun setPresentationLockListener(listener: ((Boolean) -> Unit)?)
Кэш и завершение работы
fun resetInlineViewCache(selector: String, pageContext: PageContext)
fun resetInlineListViewCache(groupSelector: String, pageContext: PageContext)
fun dispose()
Настройки запросов
data class Options(
val isReturnCounter: Boolean = false,
val isReturnUserInfo: Boolean = false,
val isReturnAnalyticsMetadata: Boolean = false,
val isImplicitPageview: Boolean = false,
val isImplicitImpression: Boolean = true,
) {
val isBuildEngagementUrl: Boolean = true
}
data class ContentSettings(
val skusOnly: Boolean = false,
val fields: List<String>? = null
)
ContentSettings: skusOnly по умолчанию false, fields — null. Оба объекта заменяются целиком через setOptions.
PageContext
data class PageContext(
val type: ContextType,
val data: List<String>,
val location: String,
val lng: String? = null,
val pageNumber: Int? = null,
val referrer: String? = null,
val utm: Map<String, String>? = null,
val attributes: Map<String, String> = emptyMap(),
)
Ответ и модели
Native SDK не предоставляет аналоги Flutter rawVariables, WithDetails, trackViewNoShow или triggerEventNoShow. Используйте свой UI и Custom JSON с доступными native-методами.
События TriggerEvent
Для LoginEvent и SignUpEvent рекомендуется передавать cuid и cuidType, даже если на уровне класса эти поля не обязательны.
Engagement-типы
Передавайте исходные content, campaign и slot из ответа SDK. Публичного ContentClickEngagement нет; ручная отправка engagement не вызывает tracking callback. Условия учёта показов.
UI-компоненты
@Composable
fun GravityInlineCompose(
modifier: Modifier,
selector: String,
pageContext: PageContext,
loader: (@Composable () -> Unit)?,
)
// GravityInlineView и GravityInlineListView
fun init(pageContext: PageContext)
interface ProductViewBuilder {
@Composable
fun Build(slot: Slot, content: CampaignContent, campaign: Campaign)
}
interface LegacyProductViewBuilder : ProductViewBuilder {
@Composable
override fun Build(slot: Slot, content: CampaignContent, campaign: Campaign)
fun createView(
context: Context,
slot: Slot,
content: CampaignContent,
campaign: Campaign,
): View
}