PLAY PERMISSIONS

Use cases

Three complete release stories. Each names who, the task, the steps, and the result — including what failure looked like.

1. Invite-only social app (remove READ_CONTACTS)

Who: A two-person indie team shipping a photo sharing app on Play. Task: Let users invite friends by phone or email without keeping the whole address book. Failure symptom: After raising targetSdk toward 37, Console pre-review flagged READ_CONTACTS on an invite screen that only needed three recipients. Steps: They ran the checklist, chose “invite / share / pick”, removed READ_CONTACTS, wired Contact Picker with email+phone MIME types, and persisted Session results into their invite draft. Result: Pre-review contacts flag cleared; invite flow still worked; January 2027 debt dropped to zero for contacts.

2. “Find nearby stores” button (location button path)

Who: A retail PWA-wrapper Android app with one map button. Task: Get a precise pin once to sort stores by distance. Failure symptom: The app requested persistent fine location on splash, users denied, and Play insights warned about minimum-scope location. Steps: Checklist answer “one-shot precise” → integrate location button, add USE_LOCATION_BUTTON, set onlyForLocationButton on fine permission, keep coarse for city fallback. Result: One-tap nearby worked on Android 17 test devices; no persistent fine declaration required for that feature.

3. Lightweight CRM that must keep READ_CONTACTS

Who: A field-sales CRM whose core pitch is offline sync of the device address book into deal records. Task: Stay on Play while targeting Android 17+. Failure symptom: A first draft declaration said only “better UX than the picker,” which would not survive review. Steps: Checklist “broad contacts” path → rewrite declaration around continuous sync, conflict merge, and why one-shot picker Session URIs cannot replace the product; align listing screenshots with CRM sync; keep location out of scope. Result: Team submitted a technical declaration and scheduled Jan 27 calendar review instead of pretending to be an invite-only app.