Обработка событий онбординга в Android SDK
Перед началом убедитесь, что:
- Вы установили Adapty Android SDK версии 3.8.0 или выше.
- Вы создали онбординг.
- Вы добавили онбординг в плейсмент.
Онбординги, настроенные с помощью билдера, генерируют события, на которые может реагировать ваше приложение. Ниже описано, как с ними работать.
Чтобы управлять процессами на экране онбординга и отслеживать их в Android-приложении, реализуйте интерфейс AdaptyOnboardingEventListener.
Пользовательские действия
В билдере можно добавить к кнопке действие custom и назначить ему ID. Затем этот ID можно использовать в коде и обрабатывать как пользовательское действие.
Например, если пользователь нажимает на кнопку с пользовательским действием — например, Login или Allow notifications — будет вызван метод делегата onCustomAction с ID действия из билдера. Вы можете задавать собственные ID, например “allowNotifications”.
class YourActivity : AppCompatActivity() {
private val eventListener = object : AdaptyOnboardingEventListener {
override fun onCustomAction(action: AdaptyOnboardingCustomAction, context: Context) {
when (action.actionId) {
"allowNotifications" -> {
// Request notification permissions
}
}
}
override fun onError(error: AdaptyOnboardingError, context: Context) {
// Handle errors
}
// ... other required delegate methods
}
}
Пример события (нажмите, чтобы раскрыть)
{
"actionId": "allowNotifications",
"meta": {
"onboardingId": "onboarding_123",
"screenClientId": "profile_screen",
"screenIndex": 0,
"screensTotal": 3
}
}Закрытие онбординга
Онбординг считается закрытым, когда пользователь нажимает кнопку с назначенным действием Close. Вам нужно определить, что происходит при закрытии онбординга. Например:
Вам нужно управлять тем, что происходит при закрытии онбординга. В частности, необходимо прекратить отображение самого онбординга.
Например:
override fun onCloseAction(action: AdaptyOnboardingCloseAction, context: Context) {
// Dismiss the onboarding screen
(context as? Activity)?.onBackPressed()
}
Пример события (нажмите, чтобы раскрыть)
{
"action_id": "close_button",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "final_screen",
"screen_index": 3,
"total_screens": 4
}
}Открытие пейвола
Обрабатывайте это событие, если хотите открыть пейвол внутри онбординга. Если вы хотите открыть пейвол после закрытия онбординга, есть более простой способ — обработайте AdaptyOnboardingCloseAction и откройте пейвол без использования данных события.
Если пользователь нажимает кнопку, открывающую пейвол, вы получите ID действия кнопки, который вы настроили вручную. Самый удобный способ работы с пейволами в онбордингах — сделать ID действия равным ID плейсмента пейвола. Тогда после события AdaptyOnboardingOpenPaywallAction вы сможете использовать ID плейсмента, чтобы сразу получить и открыть пейвол:
override fun onOpenPaywallAction(action: AdaptyOnboardingOpenPaywallAction, context: Context) {
// Get the paywall using the placement ID from the action
Adapty.getPaywall(placementId = action.actionId) { result ->
when (result) {
is AdaptyResult.Success -> {
val paywall = result.value
// Get the paywall configuration
AdaptyUI.getViewConfiguration(paywall) { result ->
when(result) {
is AdaptyResult.Success -> {
val paywallConfig = result.value
// Create and present the paywall
val paywallView = AdaptyUI.getPaywallView(
activity = this,
viewConfig = paywallConfig,
products,
eventListener = paywallEventListener
)
// Add the paywall view to your layout
binding.container.addView(paywallView)
}
is AdaptyResult.Error -> {
val error = result.error
// handle the error
}
}
}
is AdaptyResult.Error -> {
val error = result.error
// handle the error
}
}
}
}
Пример события (нажмите, чтобы раскрыть)
{
"action_id": "premium_offer_1",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "pricing_screen",
"screen_index": 2,
"total_screens": 4
}
}Завершение загрузки онбординга
Когда онбординг завершает загрузку, вызывается этот метод:
override fun onFinishLoading(action: AdaptyOnboardingLoadedAction, context: Context) {
// Handle loading completion
}
Пример события (нажмите, чтобы раскрыть)
{
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "welcome_screen",
"screen_index": 0,
"total_screens": 4
}
}События навигации
Метод onAnalyticsEvent вызывается при возникновении различных аналитических событий в процессе онбординга.
Объект event может быть одного из следующих типов:
| Тип | Описание |
|---|---|
OnboardingStarted | Онбординг загружен |
ScreenPresented | Отображён любой экран |
ScreenCompleted | Экран завершён. Включает необязательный elementId (идентификатор завершённого элемента) и необязательный reply (ответ пользователя). Срабатывает, когда пользователь выполняет любое действие для выхода с экрана. |
SecondScreenPresented | Отображён второй экран |
UserEmailCollected | Срабатывает, когда email пользователя получен через поле ввода |
OnboardingCompleted | Срабатывает, когда пользователь достигает экрана с ID final. Если вам нужно это событие, назначьте ID final последнему экрану. |
Unknown | Для любого нераспознанного типа события. Включает name (название неизвестного события) и meta (дополнительные метаданные) |
Каждое событие содержит информацию meta:
| Поле | Описание |
|---|---|
onboardingId | Уникальный идентификатор онбординга |
screenClientId | Идентификатор текущего экрана |
screenIndex | Позиция текущего экрана в потоке |
totalScreens | Общее количество экранов |
Пример использования аналитических событий для отслеживания:
override fun onAnalyticsEvent(event: AdaptyOnboardingAnalyticsEvent, context: Context) {
when (event) {
is AdaptyOnboardingAnalyticsEvent.OnboardingStarted -> {
// Track onboarding start
trackEvent("onboarding_started", event.meta)
}
is AdaptyOnboardingAnalyticsEvent.ScreenPresented -> {
// Track screen presentation
trackEvent("screen_presented", event.meta)
}
is AdaptyOnboardingAnalyticsEvent.ScreenCompleted -> {
// Track screen completion with user response
trackEvent("screen_completed", event.meta, event.elementId, event.reply)
}
is AdaptyOnboardingAnalyticsEvent.OnboardingCompleted -> {
// Track successful onboarding completion
trackEvent("onboarding_completed", event.meta)
}
is AdaptyOnboardingAnalyticsEvent.Unknown -> {
// Handle unknown events
trackEvent(event.name, event.meta)
}
// Handle other cases as needed
}
}
Примеры событий (нажмите, чтобы раскрыть)
// OnboardingStarted
{
"name": "onboarding_started",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "welcome_screen",
"screen_index": 0,
"total_screens": 4
}
}
// ScreenPresented
{
"name": "screen_presented",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "interests_screen",
"screen_index": 2,
"total_screens": 4
}
}
// ScreenCompleted
{
"name": "screen_completed",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "profile_screen",
"screen_index": 1,
"total_screens": 4
},
"params": {
"element_id": "profile_form",
"reply": "success"
}
}
// SecondScreenPresented
{
"name": "second_screen_presented",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "profile_screen",
"screen_index": 1,
"total_screens": 4
}
}
// UserEmailCollected
{
"name": "user_email_collected",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "profile_screen",
"screen_index": 1,
"total_screens": 4
}
}
// OnboardingCompleted
{
"name": "onboarding_completed",
"meta": {
"onboarding_id": "onboarding_123",
"screen_cid": "final_screen",
"screen_index": 3,
"total_screens": 4
}
}