Permissions
Push, Face ID, and ATT. Each one shows up at the right moment, never all at once on Home.
The kit asks for three permissions, each one at the moment it makes sense. Never all at once on Home.
| Permission | Where it shows up | Our own soft prompt? | Platforms |
|---|---|---|---|
| Push | Onboarding or a button in the Notifications tab | Only in onboarding | iOS, Android |
| Face ID / biometrics | Switch in Settings | No | iOS, Android |
| ATT (tracking) | Onboarding + Home (for those who skip) | Yes | iOS only |
Push
- Whoever completes onboarding: sees the
OnboardingNotificationsStepscreen with an explanation. On continuing, the system's native dialog opens. - Whoever skips onboarding: no automatic prompt. The user taps the Notifications tab and, if the list is empty, sees an "Allow notifications" button → taps it → the native dialog opens. The tap itself is the confirmation of intent, so there's no soft prompt.
iOS and Android 13+ only let you show the native dialog once per install. If the user denies it, it can only be re-enabled from the system Settings.
When the user denies it and tries to re-enable it, the button changes to "Open settings" (gear icon) and calls openAppSettings().
Face ID / Touch ID / Biometrics
- Only requested when the user turns on the switch in Settings.
- Turning it on triggers native authentication right away.
- If authenticated,
BiometricGuardstarts requiring authentication to open the app. - No soft prompt: the switch itself is the confirmation.
The biometric_enabled preference is per account (cleared on logout). That way, the next user on the same device starts with the lock off.
ATT: App Tracking Transparency (iOS)
ATT is iOS's "Allow app to track your activity" prompt. Apple only allows showing the native dialog once per install. That's why we use our own soft prompt first.
- Whoever completes onboarding: sees
OnboardingAttSetupwith an explanation. On continuing → the iOS native dialog opens. - Whoever skips onboarding: on reaching Home (after 1.5s) → a
KasyDialogexplains tracking. If they accept ours → we call the native one. If they decline → we do NOT call the native one (preserving the one shot we get).
Retrying the soft prompt
Whoever declines the soft prompt gets asked again after 7 days, up to 3 attempts. After that, we stop. The flags live in SharedPreferences (att_soft_dismiss_count and att_soft_last_asked_at).
Android
ATT doesn't exist on Android.
What persists on logout
| Setting | Behavior on logout |
|---|---|
| Push permission (granted/denied) | Kept (the OS controls it) |
| ATT permission | Kept (the OS controls it) |
| Device biometrics | Kept (the OS controls it) |
biometric_enabled (app switch) | Cleared (it's per account) |
ATT counters (att_soft_*) | Kept (ATT is per device) |
Last updated on 08/02/2026

