# Firebase Options Usage By Product Summarize which Firebase Options fields (and GoogleService-Info.plist attributes) are used by which Firebase products. | | An | ApC | ApD | Aut | Cor | Crs | DB | DL | Fst | Fn | IAM | Ins | Msg | MLM | Prf | RC | Str | | :--- | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | :---: | | **apiKey** | | ✅ | ✅ | ✅ | | | | ✅ | | | ✅ | ✅ | | | ✅ | ✅ | | | **bundleID** | | | | | ✅ | | | | | | | | | | ✅ | | | | **clientID** | | | | ✅ | | | | | | | | | | | | | | | **gcmSenderID** | | | | | | | | | | | ✅ | ✅ | ✅ | | | ✅ | | | **projectID** | | ✅ | | | | | ✅ | | ✅ | ✅ | | ✅ | | ✅ | ✅ | ✅ | | | **googleAppID** | ✅ | ✅ | | ✅ | | ✅ | ✅ | | | | ✅ | ✅ | ✅ | | ✅ | ✅ | ✅ | | **databaseURL** | | | | | | | ✅ | | | | | | | | | | | | **deepLinkURLScheme** | | | | | | | | ✅ | | | | | | | | | | | **storageBucket** | | | | | | | | | | | | | | | | | ✅ | ## Rows (FirebaseOptions) See [FIROptions.m](https://github.com/firebase/firebase-ios-sdk/blob/master/FirebaseCore/Sources/FIROptions.m) to see how the variables map to GoogleService-Info.plist attributes. * *apiKey*: An API key used for authenticating requests from your Apple app * *bundleID*: The bundle ID for the application (Not used by the SDK) * *clientID*: The OAuth2 client ID for Apple applications used to authenticate Google users * *gcmSenderID*: The Project Number from the Google Developer's console used to configure Google Cloud Messaging * *projectID*: The Project ID from the Firebase console * *googleAppID*: The Google App ID that is used to uniquely identify an instance of an app * *databaseURL*: The realtime database root URL * *deepLinkURLScheme*: The URL scheme used to set up Durable Deep Link service * *storageBucket*: The Google Cloud Storage bucket name ## Questions * *apiKey*, *projectID*, *gcmSenderID*, *projectID*, and *googleAppID* seem to have overlapping functionality. Can they be consolidated? * *gcmSenderID* is the second subfield of *googleAppID*. Can it be eliminated? * *bundleID* seems to have three purposes: Performance SDK uses it. Messaging back end uses it. Core will generate an error message if it doesn't match the actual bundleID. Anything else? * Why isn't *deepLinkURLScheme* set from the GoogleService-Info.plist field `REVERSED_CLIENT_ID` like other Firebase Options? The client code is required to explicitly set it. * Is there a better way to manage the fields that are only used by one product? *clientID*, *databaseURL*, *deepLinkURLScheme*, and *storageBucket*. ## Unused FirebaseOptions Proposal: Deprecate these in the SDK and stop generating them for GoogleService-Info.plist. * *androidClientID* * *trackingID* ## Unread GoogleService-Info.plist fields Proposal: Stop generating these for GoogleService-Info.plist. * PLIST_VERSION * IS_ADS_ENABLED * IS_ANALYTICS_ENABLED * IS_APPINVITE_ENABLED * IS_GCM_ENABLED * IS_SIGNIN_ENABLED ## Columns (Firebase Products) * An - Analytics * ApC - App Check * ApD - App Distribution * Aut - Auth * Cor - Core * Crs - Crashlytics * DB - Real-time Database * DL - Dynamic Links * Fst - Firestore * Fn - Functions * IAM - In App Messaging * Ins - Installations * Msg - Messaging * MLM - MLModel Downloader * Prf - Performance * RC - Remote Config * Str - Storage