Skip to main content

Google Play Deployment (Android)

Guide for deploying TrickBook to the Google Play Store via EAS Build and EAS Submit.

Current Status

ItemStatus
Package Namecom.thetrickbook.trickbook
Latest Version2.1.0 (versionCode 15)
Google PlaySubmitted -- Closed Alpha (internal track, draft)
Build Profileplaystore (AAB, store distribution)
Service Accounttrickbook-couch@trickbook.iam.gserviceaccount.com
Version SourceRemote (appVersionSource: "remote" in eas.json)

Build and Submit Pipeline

Quick Deploy (standard flow)

cd ~/Documents/TrickBook/repos/TrickList

# Build AAB for Play Store (versionCode auto-increments)
eas build --profile playstore --platform android

# Wait for build to finish (~15-30 min on free tier)

# Submit the latest build to Google Play
eas submit --platform android --profile playstore --latest

EAS Submit Configuration

The eas.json submit profile handles Play Store authentication and track selection:

{
"submit": {
"playstore": {
"android": {
"serviceAccountKeyPath": "../../secrets/trickbook-0fd5cf54c409.json",
"track": "internal",
"releaseStatus": "draft"
}
}
}
}
FieldValueNotes
serviceAccountKeyPath../../secrets/trickbook-0fd5cf54c409.jsonRelative to TrickList root
trackinternalClosed Alpha testing track
releaseStatusdraftRequires manual promotion in Play Console
warning

The service account key JSON must never be committed to git. It is stored in /Documents/TrickBook/secrets/ which is outside the repo and gitignored in TrickList.

Build Profile

The playstore build profile in eas.json:

{
"playstore": {
"distribution": "store",
"node": "20.18.0",
"android": {
"buildType": "app-bundle",
"image": "latest",
"autoIncrement": true
},
"env": {
"EXPO_NO_DOTENV": "1",
"NODE_ENV": "production"
}
}
}

Key settings:

  • buildType: "app-bundle" -- produces .aab (required by Play Store)
  • autoIncrement: true -- versionCode increments automatically on each build
  • EXPO_NO_DOTENV: "1" -- prevents loading local .env in CI builds
  • NODE_ENV: "production" -- npm installs production deps only

Signing and OAuth

Android Signing Keys

EAS manages the upload keystore remotely. Google Play App Signing re-signs the APK with Google's own key before distribution.

This means two SHA-1 fingerprints matter for Google OAuth:

KeySHA-1 PrefixUsed By
Upload key60:74:90:D9:...Dev builds, EAS preview builds
App signing keyA2:9D:C9:0E:...Play Store distributed installs

Both are registered as separate Android OAuth clients in Google Cloud Console. See ADR-001: Native Google Sign-In for the full decision record.

Finding SHA-1 Fingerprints

In Google Play Console: Release > Setup > App Integrity

  • Upload key certificate -- your EAS keystore fingerprint
  • App signing key certificate -- Google's re-signing key fingerprint

After Submission: Play Console Steps

Once eas submit completes, the AAB lands as a draft on the internal track. To publish:

  1. Play Console > Closed testing - Alpha > Edit release
  2. Review the release, click Next > Save
  3. Publishing overview > Send for review
  4. Google reviews (1-7 days for closed test)
  5. After approval, click Publish in Publishing overview (managed publishing is enabled)
tip

Existing opted-in testers auto-upgrade when a new version is published. They do not need to re-opt-in, and the tester count is preserved.

Play Store Requirements Checklist

Before First Production Release

  • Create developer account
  • Complete identity verification
  • Accept Developer Distribution Agreement
  • App name and package configured
  • Build and submit AAB
  • Service account key configured
  • Store listing (title, description, screenshots, feature graphic)
  • Content rating (IARC questionnaire)
  • Data safety form
  • Privacy policy URL (page exists at thetrickbook.com/privacy-policy)
  • Target age group

Graphics Assets

AssetDimensionsRequired
App icon512 x 512Yes
Feature graphic1024 x 500Yes
Phone screenshots1080 x 1920 (portrait)2-8 required
Tablet screenshotsVariableOptional

Data Safety Declaration

Data TypeCollectedSharedPurpose
EmailYesNoAccount creation
NameYesNoProfile
LocationYesNoSpot discovery (nearby)
Photos/VideosYesNoProfile picture, feed posts
App activityYesNoAnalytics

Version Management

Versions are managed remotely by EAS (appVersionSource: "remote" in eas.json). The versionCode in app.config.js is ignored for builds.

# Check current remote version
eas build:version:get --platform android

# Manually set version (if needed)
eas build:version:set --platform android --version-code 16

Troubleshooting

"Build is expired"

EAS builds expire after 30 days. If a build has expired, create a new one:

eas build --profile playstore --platform android

Version Code Conflicts

If Play Store rejects a versionCode that's already been used:

eas build:version:set --platform android --version-code <next-number>
eas build --profile playstore --platform android

Google Sign-In Error 400

If users see "Access blocked: invalid_request" when signing in with Google, the SHA-1 fingerprint is likely wrong. Verify the app signing key SHA-1 is registered in Google Cloud Console. See ADR-001.

Build History

DateVersionversionCodeBuild IDNotes
May 13, 20262.1.015d085fbe6Native Google Sign-In, map pin fix
May 1, 20262.1.014fc614c87First successful Play Store submission
Feb 8, 20262.0.012ff2d405dInitial playstore build (expired)