Prompts
Every moment the app asks the user for something — permissions (notifications, HealthKit, camera, photos) and the App Store review prompt. Onboarding prompts emit telemetry today and show live grant / deny counts. Post-onboarding prompts are catalogued with file pointers so the missing telemetry can be wired in a follow-up.
In onboarding
Counts from onboarding.permission_prompted , onboarding.permission_result , onboarding.review_prompted — last 90 days, dedup by distinct_id.
| Prompt | Where | Asked | Outcome | Grant rate |
|---|---|---|---|---|
| Notifications Notifications Permission
step_id=notifications_permission | About to startAlready on GLP-1 | 563 | 545 granted
37 denied
158 skipped/other
| 93.6% |
| HealthKit HealthKit Benefits
step_id=healthkit_benefits | About to startAlready on GLP-1 | 690 | 676 granted
12 denied
2 skipped/other
| 98.3% |
| App Store review App Store Review
step_id=app_store_review | About to startAlready on GLP-1 | 618 | Not observable — Apple does not return the user's choice. | — |
Outside onboarding
Permission prompts the app fires after onboarding. Most do not emit telemetry today — the chip on the right names what's missing so a follow-up can wire each one.
| Prompt | Trigger | Source | Telemetry |
|---|---|---|---|
| App Store review App Store review prompt Fires onboarding.review_prompted. iOS rate-limits SKStoreReviewController to ~3 prompts per user per 365 days and does not return the user's response — only that we asked. | Tapping 'Looks great' on the onboarding plan-preview screen. | OnboardingPlanView.swift:239 | NOT OBSERVABLE |
| Notifications Notifications permission (Treatment settings) | Saving Treatment settings with reminders enabled, when authorization is still .notDetermined. | TreatmentSettingsView+State.swift:205 | NOT WIRED |
| Notifications Notifications permission (Reminders settings) | Enabling any engagement reminder toggle in Settings → Reminders. | RemindersSettingsView.swift:54 | NOT WIRED |
| HealthKit HealthKit re-authorization | Tapping 'Connect Health' on the Activity detail error state (post-onboarding fallback). | ActivityDetailView.swift:216 | NOT WIRED |
| Camera Camera (food scanner) | Opening the food-scan camera for the first time. | CameraPreview.swift:209 | NOT WIRED |
| Camera Camera (progress photos) | Opening the progress-photo camera for the first time. | ProgressPhotoCameraManager.swift:56 | NOT WIRED |
| Photos library Photos library (add-only) | Tapping 'Save to Photos' on the streak / progress-photo share sheet. | StreakShareView+Actions.swift:125 | NOT WIRED |
Notes
- Grant rate is computed over
granted + denied. "Skipped / other" (user dismissed the screen without answering, or iOS returnedprovisional/ephemeral) is shown in the bar for context but doesn't move the rate. - App Store review uses
SKStoreReviewController.requestReviewunder the hood. Apple does not surface the user's response to the app and rate-limits the dialog to roughly three prompts per user per 365 days — so "Asked" is a count of intent, not a count of modals actually shown. - Cohort split is intentionally absent. Permission grant rates are a user-behaviour signal, not a cohort signal — splitting at this volume only adds noise. If a cohort hypothesis emerges, build a one-off PostHog insight rather than baking the split here.
- No telemetry rows are the
action items. Each one is one ~5-line edit to wire
OnboardingTelemetry.permissionPrompted/permissionResult(or an equivalent helper for non-onboarding surfaces) at the file:line listed.