Appearance
Publishing to Google Play
Getting your apps onto Android phones. The first app takes a day of work plus review time. The driver app takes longer — plan for that.
Google changes this process regularly. Where these steps differ from what you see, trust the Play Console.
The three apps are not equally hard
This is the most useful thing on this page. Do not assume the driver app will sail through because the parent app did.
| App | Difficulty | Why |
|---|---|---|
| Staff app | Easy | Internet, location and fingerprint login only |
| Parent app | Moderate | Camera, microphone and location need explaining |
| Driver app | Hard | Tracks location in the background — Google's most scrutinised permission |
Start the driver app first, not last
The driver app requests ACCESS_BACKGROUND_LOCATION. Google requires a written justification and a video showing the feature in use, and reviews it by hand. Rejections are common and each round trip costs days.
It also asks to ignore battery optimisation and to schedule exact alarms — both need their own justification.
If a school is waiting on bus tracking, submit this app first and let the easy ones follow.
Before you start
- A Google Play Developer account — $25, paid once, covers all your apps
- The
.aabfile from building - Your signing key, backed up
- A privacy policy on a public web address — Play will not publish without one
- Screenshots, an icon, and a feature graphic
New personal accounts must run a 14-day test first
If your developer account is a personal account created recently, Google requires a closed test with 12 testers for 14 continuous days before you may publish to production. Company (organisation) accounts are exempt.
This catches people out badly — you finish the app and discover you cannot release for two weeks. Check which type your account is before you promise a launch date.
Step 1: Create the app entry
In the Play Console, create an app. You supply the name, default language, whether it is an app or a game, and free or paid.
The name here is what appears in the store — it does not have to match the name under the icon, but it should.
Step 2: Fill in the store listing
| Item | Requirement |
|---|---|
| Short description | 80 characters |
| Full description | Up to 4000 characters |
| App icon | 512×512 PNG |
| Feature graphic | 1024×500 |
| Phone screenshots | At least 2 — use real screens |
| Privacy policy | A public URL |
Write the description for parents, not for schools buying software. The person reading it is trying to check their child's attendance.
Step 3: Declare what data the app collects
The Data safety form is compulsory and Google checks it against what the app actually does. Declaring less than the app requests gets you removed later.
Based on what each app asks for:
| App | Declare |
|---|---|
| Parent app | Location · Camera (photos) · Microphone (audio) · Personal info · App activity |
| Staff app | Location · Personal info · App activity |
| Driver app | Location, including in the background · Personal info |
For each item Google asks whether data is collected, whether it is shared with third parties, and whether it is encrypted in transit. Answer honestly — the app talks to your server over https, and you do not sell the data.
Also state that users can request deletion, and how.
Step 4: The permission declarations
Driver app — background location. You will be asked:
- What the feature does — describe it plainly: "School bus drivers start a trip in the app. While the trip is running, the app sends the bus location so parents can see where the bus is and when it will arrive. Location is only sent during an active trip."
- Why foreground location is not enough — because the driver is driving, with the phone in a cradle and the screen off; tracking must continue while the app is not on screen.
- A video showing a driver starting a trip, the app going to the background, and the location still updating.
Driver app — ignore battery optimisation. Justify it: Android suspends background apps to save battery, which stops the trip updating halfway through a route.
Driver app — exact alarms. Justify it by the scheduled trip times.
Record the video before you submit
It must show the real app on a real device, demonstrating the feature. Recording it takes ten minutes; discovering you need it after a rejection costs three days.
Step 5: Upload and release
- Upload the
.aabunder a release - Choose countries
- Set content rating by completing the questionnaire — a school app rates as Everyone
- Submit for review
Reviews usually take a few hours to a couple of days. The driver app takes longer because a human watches the video.
Use a closed test track first
Release to a closed track with a handful of real school staff before production. If API_ORIGIN is wrong, or push does not arrive, you find out from five people instead of five hundred parents.
Step 6: Later updates
For every update:
- Raise the build number in
pubspec.yaml— see building - Rebuild the
.aab - Upload as a new release with a short "what's new"
Updates are reviewed too, but usually faster.
Why apps get rejected
| Reason | Fix |
|---|---|
| Background location not justified | Give the written reason and the video |
| Data safety form does not match the app's permissions | Declare everything the app asks for |
| No privacy policy, or the link does not work | Publish one at a permanent address |
| Screenshots show placeholder or demo data | Use real screens from a real install |
| Login required with no way for Google to test | Provide working test credentials in the review notes |
| Battery optimisation exemption not justified | Explain that trips break without it |
Give the reviewer a login
Every one of these apps needs an account to see anything. If the reviewer cannot get past the login screen, the app is rejected — and this is the most common reason of all.
Put a working test username and password in the review notes, on an account with sample data.
If you would rather not use the store at all
You do not have to publish. Your panel can host the APK directly — schools download and install it from your own site, with a QR code for phones. Useful for pilots, for a single client, or while store review is pending.
That is covered in distributing the apps.