Skip to main content
The starter includes React Native Firebase app, auth, analytics, and Crashlytics dependencies. Firebase is native code, so use a development or EAS build rather than Expo Go.

Register every build variant

First set the base identifier in apps/mobile/app.config.js. Dynamic Expo config produces three native identifiers: Register each variant you intend to build as separate iOS and Android apps in the Firebase Console. Use your own base identifier, not the example above.

Add native configuration files

app.config.js selects these exact paths relative to apps/mobile: Download each file from its matching Firebase app and place it in apps/mobile. The unsuffixed google-services.json and GoogleService-Info.plist paths in app.json are overridden by app.config.js. Firebase client config files identify a Firebase project and are commonly shipped in client apps. Treat access control as a Firebase Security Rules, App Check, and API-key restriction concern. Follow your organization’s repository policy when deciding whether to commit them. Verify selection before building:

Enable services

In Firebase Console:
  1. Enable Authentication and the sign-in providers your app uses.
  2. Enable Google Analytics if you want the included analytics adapter.
  3. Open Crashlytics and complete project activation.
  4. Add Android signing-certificate SHA-1 and SHA-256 fingerprints for Google sign-in and other credential-based services.
The Firebase auth adapter supports email/password, custom tokens, Google ID tokens, and Apple ID tokens. Configure each provider separately in Firebase. Apple sign-in also requires Apple Developer configuration.

Select Firebase auth

Set the runtime adapter in amisi.config.json:
amisi.config.json
Analytics is not selected there. apps/mobile/app/_layout.tsx initializes Firebase Analytics and Crashlytics when their feature flags are enabled. All current environment flag sets enable both.

Configure client environment values

Native builds normally initialize Firebase from the selected plist or JSON file. The root layout can also pass Firebase app options when these four public values are all present:
EXPO_PUBLIC_FIREBASE_AUTH_DOMAIN and EXPO_PUBLIC_FIREBASE_STORAGE_BUCKET are optional additions. These are public client configuration, not server credentials. For email-verification deep links, configure:
The continue URL must be authorized in Firebase Authentication and route into the app through the associated domain or Android intent filter in app.json. The app reads mode=verifyEmail and oobCode from the incoming URL. Google sign-in additionally requires:
The web client ID is required by the implemented sign-in flow. The iOS client ID is optional in code but may be required by your Firebase/Google project setup.

Rebuild and verify

Verify that:
  • Email/password and configured social providers create users in Authentication.
  • Analytics events appear in AnalyticsDebugView.
  • A controlled non-development test reaches Crashlytics.
  • Each environment connects to the intended Firebase project.

Troubleshooting

Default Firebase app is missing

Confirm the evaluated googleServicesFile, file name casing, and registered identifier. Then create a new native build.

Google sign-in fails

Confirm the web client ID, enabled Google provider, Android SHA fingerprints, iOS URL configuration generated by Firebase, and exact variant identifier.

Email verification does not return to the app

Confirm the authorized continue URL, associated domain or intent-filter host, and Firebase link domain. Test both cold-start and already-running app flows.

Official documentation

Next steps