Onboarding
System onboardingu z krokami i personalizacj膮
馃摉 Przegl膮d
Modu艂 Onboarding umo偶liwia tworzenie flow onboardingowych z r贸偶nymi
typami krok贸w: informacyjne, uprawnienia, wybory, GDPR i custom views.
Szybki przyk艂ad
// Definiowanie flow
ADict.Onboarding.create("main") {
step("welcome") {
title = "Witaj!"
description = "Zapraszamy do naszej aplikacji"
layout = R.layout.onboarding_welcome
}
step("permissions") {
type = StepType.PERMISSIONS
title = "Powiadomienia"
permissions = listOf(Manifest.permission.POST_NOTIFICATIONS)
}
}
// Pokazanie
ADict.Onboarding.showIfNotCompleted("main", activity)
馃摝 Typy krok贸w
| Typ | Opis |
|---|---|
INFO | Krok informacyjny z tekstem/obrazem |
PERMISSIONS | Pro艣ba o uprawnienia |
CHOICE | Wyb贸r preferencji (quiz/personalizacja) |
GDPR | Automatyczne wy艣wietlenie formularza GDPR |
CUSTOM | W艂asny view z viewFactory |
馃摑 Tworzenie flow
create(id: String, config: FlowBuilder.() -> Unit)
Utw贸rz nowy flow onboardingowy.
Kompletny przyk艂ad
ADict.Onboarding.create("main_onboarding") {
// Ustawienia flow
showProgressIndicator(true)
allowBack(true)
// Krok 1: Powitanie
step("welcome") {
type = StepType.INFO
title = "Witaj w MyApp!"
subtitle = "Najlepsza aplikacja do..."
description = "Przeprowadzimy Ci臋 przez podstawowe funkcje"
imageRes = R.drawable.onboarding_welcome
buttonText = "Zaczynamy"
canSkip = false
}
// Krok 2: Uprawnienia
step("notifications") {
type = StepType.PERMISSIONS
title = "B膮d藕 na bie偶膮co"
description = "W艂膮cz powiadomienia, by nie przegapi膰 wa偶nych informacji"
permissions = listOf(Manifest.permission.POST_NOTIFICATIONS)
permissionRationale = "Powiadomienia pozwol膮 Ci..."
canSkip = true
skipButtonText = "P贸藕niej"
}
// Krok 3: Preferencje
step("interests") {
type = StepType.CHOICE
title = "Co Ci臋 interesuje?"
description = "Wybierz tematy, kt贸re chcesz 艣ledzi膰"
choices = listOf("Sport", "Technologia", "Muzyka", "Film", "Podr贸偶e")
multiSelect = true
minSelections = 1
onChoiceSelected = { selected ->
saveUserInterests(selected)
}
}
// Krok 4: GDPR (tylko je艣li wymagane)
step("gdpr") {
type = StepType.GDPR
showOnlyIfRequired = true
}
// Krok 5: Custom
step("custom_step") {
type = StepType.CUSTOM
title = "Personalizacja"
viewFactory = { context ->
MyCustomOnboardingView(context)
}
customValidator = {
// Zwr贸膰 true je艣li mo偶na przej艣膰 dalej
isCustomStepValid()
}
}
// Callback na zako艅czenie
onComplete { result ->
when (result) {
is OnboardingResult.Completed -> {
ADict.Analytics.log("onboarding_completed")
navigateToHome()
}
is OnboardingResult.Skipped -> {
ADict.Analytics.log("onboarding_skipped", "step" to result.atStep)
}
is OnboardingResult.Cancelled -> {
ADict.Analytics.log("onboarding_cancelled")
}
}
}
}
鈻讹笍 Pokazywanie
show(flowId: String, activity: Activity, onResult?)
Poka偶 onboarding.
showIfNotCompleted(flowId: String, activity: Activity, onResult?): Boolean
Poka偶 tylko je艣li nie by艂 jeszcze uko艅czony. Zwraca true je艣li pokazano.
isCompleted(flowId: String): Boolean
Sprawd藕 czy flow zosta艂 uko艅czony.
markCompleted(flowId: String)
R臋cznie oznacz jako uko艅czony.
reset(flowId: String)
Zresetuj status uko艅czenia.
馃敡 StepBuilder properties
| Property | Typ | Opis |
|---|---|---|
type | StepType | Typ kroku |
title | String | Tytu艂 |
subtitle | String | Podtytu艂 |
description | String | Opis |
layout | Int? | @LayoutRes custom layout |
imageRes | Int? | @DrawableRes obrazek |
animationRes | Int? | Lottie animation |
canSkip | Boolean | Czy mo偶na pomin膮膰 |
buttonText | String | Tekst przycisku g艂贸wnego |
skipButtonText | String | Tekst przycisku pomi艅 |
permissions | List<String> | Lista uprawnie艅 |
choices | List<String> | Opcje wyboru |
multiSelect | Boolean | Multi-select dla CHOICE |
minSelections | Int | Min. wybor贸w |
viewFactory | ((Context) -> View)? | Factory dla CUSTOM |
onStepShown | ((View) -> Unit)? | Callback po pokazaniu |
onStepCompleted | (() -> Unit)? | Callback po uko艅czeniu |
customValidator | (() -> Boolean)? | Walidator custom step |
馃摝 OnboardingResult
sealed class OnboardingResult
- Completed(flowId, data)Uko艅czony z zebranymi danymi
- Skipped(flowId, atStep)Pomini臋ty na konkretnym kroku
- Cancelled(flowId)Anulowany