package com.example.gravitydemo import ai.gravityfield.gravity_sdk.GravitySDK import ai.gravityfield.gravity_sdk.models.AddToCartEvent import ai.gravityfield.gravity_sdk.models.CampaignContent import ai.gravityfield.gravity_sdk.models.ContextType import ai.gravityfield.gravity_sdk.models.FollowDeeplinkEvent import ai.gravityfield.gravity_sdk.models.FollowUrlEvent import ai.gravityfield.gravity_sdk.models.PageContext import ai.gravityfield.gravity_sdk.models.ProductClickEngagement import ai.gravityfield.gravity_sdk.models.Slot import ai.gravityfield.gravity_sdk.network.Campaign import ai.gravityfield.gravity_sdk.ui.GravityInlineCompose import ai.gravityfield.gravity_sdk.ui.product_view_builder.ProductViewBuilder import ai.gravityfield.gravity_sdk.utils.LogLevel import android.app.Application import android.content.Intent import android.net.Uri import android.os.Bundle import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp import org.json.JSONObject class GravityDemoApplication : Application() { override fun onCreate() { super.onCreate() GravitySDK.initialize( context = this, apiKey = "YOUR_API_KEY", section = "YOUR_SECTION_ID", gravityEventCallback = { event -> when (event) { is FollowUrlEvent -> startActivity( Intent(Intent.ACTION_VIEW, Uri.parse(event.url)) .addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) ) is FollowDeeplinkEvent -> { // Передайте event.deeplink в роутер приложения. Log.d("GravityDemo", "Deeplink: ${event.deeplink}") } else -> Unit } }, productViewBuilder = DemoProductBuilder(), logLevel = LogLevel.ERROR, ) } } class MainActivity : ComponentActivity() { private val pageContext = PageContext( type = ContextType.PRODUCT, data = listOf("sku-123"), location = "app://product/sku-123", ) // Обход ограничения SDK 1.1.0: selector разбирается как JSON-значение. private val selector = JSONObject.quote("product_recommendations") override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { MaterialTheme { LaunchedEffect(pageContext) { GravitySDK.instance.trackView(pageContext, this@MainActivity) } Column(Modifier.padding(16.dp)) { Text("Товар sku-123") Button(onClick = { // В приложении отправляйте событие после изменения корзины. GravitySDK.instance.triggerEvent( events = listOf(AddToCartEvent( value = 1990.0, productId = "sku-123", quantity = 1, currency = "RUB", )), pageContext = pageContext, activityContext = this@MainActivity, ) }) { Text("Добавить в корзину") } GravityInlineCompose( modifier = Modifier.fillMaxWidth().height(250.dp), selector = selector, pageContext = pageContext, loader = { CircularProgressIndicator() }, ) } } } } override fun onDestroy() { if (isFinishing) { GravitySDK.instance.resetInlineViewCache(selector, pageContext) } super.onDestroy() } } private class DemoProductBuilder : ProductViewBuilder { @Composable override fun Build(slot: Slot, content: CampaignContent, campaign: Campaign) { Button(onClick = { GravitySDK.instance.sendProductEngagement( ProductClickEngagement(slot, content, campaign) ) // Откройте товар через роутер приложения. Log.d("GravityDemo", "Product: ${slot.item["sku"]}") }) { Text(slot.item["name"]?.toString() ?: "Товар") } } }