# Проверка интеграции Android SDK

## Чеклист перед выпуском

1. SDK инициализирован до первого обращения; API key и section относятся к нужному проекту.
2. Просмотр отправляется при открытии экрана, событие — после фактического действия.
3. SKU, категории и lng совпадают с товарным фидом, включая регистр.
4. LoginEvent связывает профиль по согласованному CUID; ограничения setUser учтены.
5. In-app кампания опубликована, UI доступен, presentation lock снята.
6. Inline selector совпадает с кампанией; блок получает место в вёрстке и ProductViewBuilder для товаров.
7. Навигация по URL/deeplink обработана, tracking встроенного UI не дублируется.
8. Проверены ошибка сети, пустой ответ и возврат на экран; UI приложения сохраняет работоспособность.

## Проверка запросов

На время диагностики включите `LogLevel.DEBUG`. Проверьте sec, user, ctx, selector и содержимое ответа. Полный debug-лог содержит Authorization и данные запросов; используйте его только для отладки. [Настройка логирования](./configuration.md#логирование-sdk).

Особенность сериализации `/choose` проверяйте по [правилу Android 1.0.4](./custom_ui.md#формат-selector-в-android-104).

## Почему `GravityInlineView` не отображается?
Проверьте два условия: в XML задан `app:selector`, а после инфлейта вызван `init(pageContext)`. Без `init(...)` SDK не получит контекст для загрузки кампании.

## Почему `GravityInlineCompose` не показывает контент?
Проверьте `selector`, `pageContext` и то, что composable действительно получает место на экране. Для отладки удобно временно передать `loader`, чтобы различать состояние загрузки и отсутствие кампании.

## Почему кампания не показывается после `trackView(...)` или `triggerEvent(...)`?
Проверьте `PageContext`, актуальность `section`, наличие подходящей кампании и то, что в `activityContext` передается контекст текущего экрана. Если SDK не сможет определить `Activity`, in-app-показ не произойдет.

## Почему `getContentBySelector(...)` возвращает `null` ещё до HTTP-запроса?
Проверьте JSON-кодирование selector: в 1.0.4 строка с пробелами может вызвать ошибку разбора, а строка без JSON-кавычек — уйти в HTTP-тело как нестроковое значение. Используйте [обход сериализации](./custom_ui.md#формат-selector-в-android-104) и включите `LogLevel.DEBUG` для диагностики.

## Почему приложение не падает, даже если сеть недоступна?
Android SDK обрабатывает сетевые ошибки внутри себя. В этом случае контент просто не будет показан или не будет загружен.

## Нужно ли передавать `lng`, `utm` и `attributes` всегда?
Нет. `lng` нужен только если проект использует мультирегиональность и региональные варианты данных в фиде. `utm` и `attributes` нужны только если на них завязаны правила таргетинга или аналитика.

## Нужно ли отдельно передавать `decisionId` в engagement?
Нет. В публичных Android-методах engagement он не передается отдельным параметром. Используйте объекты `slot`, `content` и `campaign`, полученные из ответа SDK.

## После обновления SDK

Сопоставьте установленную версию со [справочником API](./api_reference.md), повторно проверьте события, выбор контента, navigation callbacks и показ рекомендаций. Полная интеграционная проверка требует реальной кампании и устройства/эмулятора.
