Set up consent mode for apps

This page is for developers that use the Google Analytics for Firebase SDK in their app and want to integrate consent mode. For an introduction to consent mode, read Consent mode overview.

Google Analytics offers consent mode to adjust how your SDK behaves based on the consent status of your users. You can implement consent mode in a basic or advanced way. If you aren't sure whether to implement basic or advanced consent mode, learn more about basic versus advanced consent mode and check with your company's guidelines.

Before you begin

Before you can manage user consent, you need to implement:

  • Google Analytics for Firebase SDK
  • A consent settings banner to capture user consent

To set up consent mode, you need to:

  1. Before a user grants consent: Temporarily disable Analytics collection.
  2. Set the default consent state.
  3. Update the consent state based on the user interaction with your consent settings.
  4. Re-enable Analytics collection.

Temporarily disable Analytics collection

A basic implementation of consent mode means blocking the Google Analytics for Firebase SDK from loading until a user grants consent.

To temporarily disable Analytics collection, set the value of FIREBASE_ANALYTICS_COLLECTION_ENABLED to false (boolean) in your app's Info.plist file. For example, viewed in the source XML:

<key>FIREBASE_ANALYTICS_COLLECTION_ENABLED</key><false/>

By default, no consent mode values are set. To set the default consent state for your app:

  1. Open your app's info.plist file.
  2. Add the consent mode key-value pairs. The key describes the consent type and the value indicates consent state. Values can either be true, meaning consent was granted, or false, meaning consent was denied. Set the following:

    • GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE
    • GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE
    • GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA
    • GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS
  3. Save your changes. Next, implement the mechanism to update consent values.

For example, to set all grant consent for all parameters by default:

<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_ANALYTICS_STORAGE</key> <true/>
<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_STORAGE</key> <true/>
<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA</key> <true/>
<key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS</key> <true/>

Re-enable Analytics collection

After a user has given consent, enable Analytics collection again using the setAnalyticsCollectionEnabled() instance method.

The value set by the setAnalyticsCollectionEnabled method persists across app executions and overrides the value for firebase_analytics_collection_enabled in your app's Info.plist file. Once you set a value for setAnalyticsCollectionEnabled, Analytics collection remains in that state until setAnalyticsCollectionEnabled is called again, even if a user closes and re-opens your app.

To update Analytics collection:

Swift

swift Analytics.setAnalyticsCollectionEnabled(true)

Objective-C

obj-c [FIRAnalytics setAnalyticsCollectionEnabled:YES];

To update consent values after an app has launched, call the setConsent method.

The value set by the setConsent method overrides the default setting and persists across app executions. The value remains in that state until setConsent is called again, even if a user closes and reopens the app. setConsent only updates the parameters you specify.

If a user withdraws their previously given consent for Analytics or Ad storage, Google Analytics deletes all user properties, including consent for ad_personalization. To preserve the user's consent choice for ad personalization, restore the previous value for ad personalization using setConsent (Swift | Obj-C) .

The following example shows the setConsent method updating the different consent values to granted:

Swift

Analytics.setConsent([
  .analyticsStorage: .granted,
  .adStorage: .granted,
  .adUserData: .granted,
  .adPersonalization: .granted,
])

Objective-C

[FIRAnalytics setConsent:@{
FIRConsentTypeAnalyticsStorage : FIRConsentStatusGranted,
FIRConsentTypeAdStorage : FIRConsentStatusGranted,
FIRConsentTypeAdUserData : FIRConsentStatusGranted,
FIRConsentTypeAdPersonalization : FIRConsentStatusGranted,
}];

If a user decides to revoke their consent, make sure you update the consent states accordingly and disable Analytics collection again using setAnalyticsCollectionEnabled().

As a part of Google's ongoing commitment to a privacy-safe digital advertising ecosystem, we are strengthening the enforcement of our EU user consent policy.

Learn more about Google's Updates to consent mode for traffic in European Economic Area (EEA).

Consent mode users need to send two new parameters in addition to ad storage and analytics storage:

  1. Update your app's info.plist to include:

    <key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_USER_DATA</key> <true/>
    <key>GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS</key> <true/>
    
  2. Update your consent calls to include the parameters for ad user data and ad personalization:

    Swift

    Analytics.setConsent([
    .analyticsStorage: .granted,
    .adStorage: .granted,
    .adUserData: .granted,
    .adPersonalization: .granted,
    ])
    

    Objective-C

    [FIRAnalytics setConsent:@{
      FIRConsentTypeAnalyticsStorage : FIRConsentStatusGranted,
      FIRConsentTypeAdStorage : FIRConsentStatusGranted,
      FIRConsentTypeAdUserData : FIRConsentStatusGranted,
      FIRConsentTypeAdPersonalization : FIRConsentStatusGranted,
    }];
    

You can verify that your consent settings are working as intended by viewing the Xcode debug console for your app.

Follow these steps:

  1. Enable verbose logging on your device.
  2. In the Xcode debug console, look for:

    • ad_storage
    • analytics_storage
    • ad_user_data
    • ad_personalization

    For example, if Ad storage are enabled, you'll see the following message:

    ad_storage is granted.