Skip to content

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.

AppDifficultyWhy
Staff appEasyInternet, location and fingerprint login only
Parent appModerateCamera, microphone and location need explaining
Driver appHardTracks 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 .aab file 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

ItemRequirement
Short description80 characters
Full descriptionUp to 4000 characters
App icon512×512 PNG
Feature graphic1024×500
Phone screenshotsAt least 2 — use real screens
Privacy policyA 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:

AppDeclare
Parent appLocation · Camera (photos) · Microphone (audio) · Personal info · App activity
Staff appLocation · Personal info · App activity
Driver appLocation, 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:

  1. 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."
  2. 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.
  3. 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

  1. Upload the .aab under a release
  2. Choose countries
  3. Set content rating by completing the questionnaire — a school app rates as Everyone
  4. 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:

  1. Raise the build number in pubspec.yaml — see building
  2. Rebuild the .aab
  3. Upload as a new release with a short "what's new"

Updates are reviewed too, but usually faster.

Why apps get rejected

ReasonFix
Background location not justifiedGive the written reason and the video
Data safety form does not match the app's permissionsDeclare everything the app asks for
No privacy policy, or the link does not workPublish one at a permanent address
Screenshots show placeholder or demo dataUse real screens from a real install
Login required with no way for Google to testProvide working test credentials in the review notes
Battery optimisation exemption not justifiedExplain 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.