Skip to content

[🐛] RNFirebaseAnalyticsGoogleAppMeasurementOnDeviceConversion - Setup after turning on #9023

@fansilva1991

Description

@fansilva1991

Issue

I have enabled RNFirebaseAnalyticsGoogleAppMeasurementOnDeviceConversion in my project by setting the variable in my pods, and I can confirm that GoogleAdsOnDeviceConversion exists after pod install.

Is there any additional step that needs to be taken to ensure GoogleAdsOnDeviceConversion is being tracked properly for Google Ads integration?

I still getting the following warning on my Google Ads

Your iOS app conversion actions are active and receiving GCLID, but not gBraid conversions. Lack of accurate gBraid conversion measurement severely underestimates the true impact of web-to-app journeys for iOS, and prevents Smart Bidding from fully optimizing campaign performance. Complete the suggested changes to fix this issue.

And was expected to get solved after enabling GoogleAdsOnDeviceConversion. Is there any extra step necessary that is not documented? ( Or documented on the Firebase iOS native repository? )


Project Files

Javascript

Click To Expand

package.json:

# N/A

firebase.json for react-native-firebase v6:

  "dependencies": {
    "@apollo/client": "^4.1.6",
    "@expo/vector-icons": "^15.0.2",
    "@fingerprintjs/fingerprintjs-pro-react-native": "^3.12.0",
    "@intercom/intercom-react-native": "^9.6.3",
    "@onfido/react-native-sdk": "^16.1.0",
    "@react-native-async-storage/async-storage": "2.2.0",
    "@react-native-firebase/analytics": "^24.0.0",
    "@react-native-firebase/app": "^24.0.0",
    "@react-native-google-signin/google-signin": "^16.0.0",
    "@react-native-picker/picker": "2.11.4",
    "@react-navigation/bottom-tabs": "^7.2.0",
    "@react-navigation/native": "^7.0.14",
    "@sentry/react-native": "~7.11.0",
    "@supabase/supabase-js": "^2.76.1",
    "clsx": "^2.1.1",
    "cuid": "^3.0.0",
    "date-fns": "^4.1.0",
    "expo": "55.0.9",
    "expo-apple-authentication": "~55.0.11",
    "expo-blur": "~55.0.12",
    "expo-build-properties": "~55.0.11",
    "expo-calendar": "~55.0.12",
    "expo-constants": "~55.0.11",
    "expo-dev-client": "~55.0.22",
    "expo-device": "~55.0.12",
    "expo-font": "~55.0.6",
    "expo-haptics": "~55.0.11",
    "expo-image": "~55.0.8",
    "expo-insights": "~55.0.14",
    "expo-linear-gradient": "~55.0.11",
    "expo-linking": "~55.0.11",
    "expo-localization": "~55.0.11",
    "expo-router": "~55.0.10",
    "expo-secure-store": "~55.0.11",
    "expo-splash-screen": "~55.0.15",
    "expo-status-bar": "~55.0.5",
    "expo-store-review": "~55.0.11",
    "expo-symbols": "~55.0.7",
    "expo-system-ui": "~55.0.13",
    "expo-tracking-transparency": "~55.0.11",
    "expo-updates": "~55.0.18",
    "expo-video": "~55.0.13",
    "expo-web-browser": "~55.0.12",
    "graphql": "^16.13.2",
    "i18next": "^25.5.2",
    "ky": "^1.7.4",
    "mixpanel-react-native": "^3.0.8",
    "nativewind": "^4.1.23",
    "onesignal-expo-plugin": "^2.0.3",
    "patch-package": "^8.0.0",
    "react": "19.2.0",
    "react-dom": "19.2.0",
    "react-error-boundary": "^5.0.0",
    "react-hook-form": "^7.54.2",
    "react-i18next": "^15.7.3",
    "react-native": "0.83.4",
    "react-native-appsflyer": "^6.17.9",
    "react-native-bouncy-checkbox": "^4.1.2",
    "react-native-confirmation-code-field": "^7.4.0",
    "react-native-date-picker": "5.0.10",
    "react-native-device-info": "^14.0.4",
    "react-native-gesture-handler": "~2.30.0",
    "react-native-keyboard-controller": "1.20.7",
    "react-native-modal": "14.0.0-rc.1",
    "react-native-onesignal": "^5.2.9",
    "react-native-picker-select": "^9.3.1",
    "react-native-reanimated": "4.2.1",
    "react-native-render-html": "^6.3.4",
    "react-native-safe-area-context": "~5.6.2",
    "react-native-screens": "~4.23.0",
    "react-native-star-rating-widget": "^1.9.2",
    "react-native-svg": "15.15.3",
    "react-native-svg-transformer": "^1.5.0",
    "react-native-toast-message": "^2.2.1",
    "react-native-walkthrough-tooltip": "^1.6.0",
    "react-native-web": "^0.21.0",
    "react-native-webview": "13.16.0",
    "react-native-worklets": "0.7.2",
    "rxjs": "^7.8.2",
    "sp-react-native-in-app-updates": "^1.5.0",
    "tailwind-merge": "^3.0.1",
    "tailwindcss": "3.4.4",
    "ts-node": "^10.9.2",
    "zod": "^3.24.1",
    "zustand": "^5.0.3"
  },
  "devDependencies": {
    "@eslint/compat": "^1.2.6",
    "@eslint/eslintrc": "^3.2.0",
    "@eslint/js": "^9.19.0",
    "@react-native-community/eslint-config": "^3.2.0",
    "@react-native/eslint-config": "0.76.5",
    "@testing-library/react-native": "13.3.3",
    "@types/jest": "^29.5.12",
    "@types/node": "^22.13.1",
    "@types/react": "~19.2.10",
    "@typescript-eslint/eslint-plugin": "^8.22.0",
    "@typescript-eslint/parser": "^8.22.0",
    "babel-plugin-module-resolver": "^5.0.2",
    "detox": "^20.33.0",
    "eslint": "^9.19.0",
    "eslint-config-prettier": "^10.0.1",
    "eslint-plugin-prettier": "^5.2.3",
    "eslint-plugin-react": "^7.37.4",
    "eslint-plugin-react-hooks": "^5.1.0",
    "eslint-plugin-react-native": "^5.0.0",
    "husky": "^9.1.7",
    "jest": "^29.2.1",
    "jest-expo": "~55.0.13",
    "lint-staged": "^15.4.3",
    "prettier": "^3.4.2",
    "react-test-renderer": "19.2.0",
    "reactotron-react-native": "^5.1.18",
    "ts-jest": "^29.2.5",
    "typescript": "^5.3.3"
  },

iOS

Click To Expand

ios/Podfile:

  • I'm not using Pods
  • I'm using Pods and my Podfile looks like:
# Set by expo-router. This enables Fabric-only features from react-native-screens
ENV['RNS_GAMMA_ENABLED'] ||= '1'
ENV['FIREBASE_SDK_VERSION'] ||= '12.13.0'
$RNFirebaseAnalyticsEnableAdSupport = true

$RNFirebaseAnalyticsGoogleAppMeasurementOnDeviceConversion = true

require File.join(File.dirname(`node --print "require.resolve('expo/package.json')"`), "scripts/autolinking")
require File.join(File.dirname(`node --print "require.resolve('react-native/package.json')"`), "scripts/react_native_pods")

require 'json'
podfile_properties = JSON.parse(File.read(File.join(__dir__, 'Podfile.properties.json'))) rescue {}

def ccache_enabled?(podfile_properties)
  # Environment variable takes precedence
  return ENV['USE_CCACHE'] == '1' if ENV['USE_CCACHE']

  # Fall back to Podfile properties
  podfile_properties['apple.ccacheEnabled'] == 'true'
end

ENV['EX_DEV_CLIENT_NETWORK_INSPECTOR'] ||= podfile_properties['EX_DEV_CLIENT_NETWORK_INSPECTOR']
ENV['RCT_USE_RN_DEP'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'
ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true'
ENV['RCT_HERMES_V1_ENABLED'] ||= '1' if podfile_properties['expo.useHermesV1'] == 'true'
platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'

prepare_react_native_project!

target 'Prograd' do
# @generated begin AppsFlyer Strict Mode - expo prebuild (DO NOT MODIFY) sync-b29372208dd0dbd1274e957795cd756926086c3a
$RNAppsFlyerStrictMode=false
# @generated end AppsFlyer Strict Mode
  use_expo_modules!
# @generated begin AppsFlyer Purchase Connector - expo prebuild (DO NOT MODIFY) sync-40d043aa4472dc51990344aee6329be6fe164eba
$AppsFlyerPurchaseConnector=false
# @generated end AppsFlyer Purchase Connector

  if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'
    config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"];
  else
    config_command = [
      'node',
      '--no-warnings',
      '--eval',
      'require(\'expo/bin/autolinking\')',
      'expo-modules-autolinking',
      'react-native-config',
      '--json',
      '--platform',
      'ios'
    ]
  end

  config = use_native_modules!(config_command)

  use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
  use_frameworks! :linkage => ENV['USE_FRAMEWORKS'].to_sym if ENV['USE_FRAMEWORKS']

  use_react_native!(
    :path => config[:reactNativePath],
    :hermes_enabled => podfile_properties['expo.jsEngine'] == nil || podfile_properties['expo.jsEngine'] == 'hermes',
    # An absolute path to your application root.
    :app_path => "#{Pod::Config.instance.installation_root}/..",
    :privacy_file_aggregation_enabled => podfile_properties['apple.privacyManifestAggregationEnabled'] != 'false',
  )

  post_install do |installer|
    react_native_post_install(
      installer,
      config[:reactNativePath],
      :mac_catalyst_enabled => false,
      :ccache_enabled => ccache_enabled?(podfile_properties),
    )

    # Fix RNFirebase framework imports for use_frameworks! :linkage => :static
    installer.pods_project.targets.each do |target|
      next unless target.name.start_with?('RNFB')

      target.build_configurations.each do |build_config|
        build_config.build_settings['CLANG_ALLOW_NON_MODULAR_INCLUDES_IN_FRAMEWORK_MODULES'] = 'YES'
        build_config.build_settings['CLANG_WARN_NON_MODULAR_HEADER_IN_FRAMEWORK_MODULE'] = 'NO'
      end
    end

    # Fix fmt 11.0.2 consteval compilation error with Xcode 26.4+
    fmt_base = File.join(installer.sandbox.pod_dir('fmt'), 'include', 'fmt', 'base.h')
    if File.exist?(fmt_base)
      content = File.read(fmt_base)
      patched = content.gsub(/^#\s*define FMT_USE_CONSTEVAL 1$/, '# define FMT_USE_CONSTEVAL 0')
      if patched != content
        File.chmod(0644, fmt_base)
        File.write(fmt_base, patched)
      end
    end

  end
end

target 'OneSignalNotificationServiceExtension' do
  pod 'OneSignalXCFramework', '>= 5.0', '< 6.0'
  use_frameworks! :linkage => podfile_properties['ios.useFrameworks'].to_sym if podfile_properties['ios.useFrameworks']
end

AppDelegate.m:

internal import Expo
// @generated begin Intercom header - expo prebuild (DO NOT MODIFY) sync-f6fd06e08d30c2c66260b72f45072d393b20a2dc
import intercom_react_native
// @generated end Intercom header
import FirebaseCore
import React
import ReactAppDependencyProvider

@main
class AppDelegate: ExpoAppDelegate {
  var window: UIWindow?

  var reactNativeDelegate: ExpoReactNativeFactoryDelegate?
  var reactNativeFactory: RCTReactNativeFactory?

  public override func application(
    _ application: UIApplication,
    didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
  ) -> Bool {
    let delegate = ReactNativeDelegate()
    let factory = ExpoReactNativeFactory(delegate: delegate)
    delegate.dependencyProvider = RCTAppDependencyProvider()

    reactNativeDelegate = delegate
    reactNativeFactory = factory

#if os(iOS) || os(tvOS)
    window = UIWindow(frame: UIScreen.main.bounds)
// @generated begin @react-native-firebase/app-didFinishLaunchingWithOptions - expo prebuild (DO NOT MODIFY) sync-10e8520570672fd76b2403b7e1e27f5198a6349a
FirebaseApp.configure()
// @generated end @react-native-firebase/app-didFinishLaunchingWithOptions
    factory.startReactNative(
      withModuleName: "main",
      in: window,
      launchOptions: launchOptions)
#endif

    IntercomModule.initialize("ios_sdk-6b3a2fdfd34d683785436e3dcda70c366615b75c", withAppId: "ce6gqacx")
  return super.application(application, didFinishLaunchingWithOptions: launchOptions)
  }

  // Linking API
  public override func application(
    _ app: UIApplication,
    open url: URL,
    options: [UIApplication.OpenURLOptionsKey: Any] = [:]
  ) -> Bool {
    AppsFlyerAttribution.shared().handleOpen(url, options: options)
    return super.application(app, open: url, options: options) || RCTLinkingManager.application(app, open: url, options: options)
  }

  // Universal Links
  public override func application(
    _ application: UIApplication,
    continue userActivity: NSUserActivity,
    restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void
  ) -> Bool {
    AppsFlyerAttribution.shared().continue(userActivity, restorationHandler: nil)
    let result = RCTLinkingManager.application(application, continue: userActivity, restorationHandler: restorationHandler)
    return super.application(application, continue: userActivity, restorationHandler: restorationHandler) || result
  }
}

class ReactNativeDelegate: ExpoReactNativeFactoryDelegate {
  // Extension point for config-plugins

  override func sourceURL(for bridge: RCTBridge) -> URL? {
    // needed to return the correct URL for expo-dev-client.
    bridge.bundleURL ?? bundleURL()
  }

  override func bundleURL() -> URL? {
#if DEBUG
    return RCTBundleURLProvider.sharedSettings().jsBundleURL(forBundleRoot: ".expo/.virtual-metro-entry")
#else
    return Bundle.main.url(forResource: "main", withExtension: "jsbundle")
#endif
  }
}

Environment

Click To Expand

react-native info output:

  expo-env-info 2.0.12 environment info:
    System:
      OS: macOS 26.4.1
      Shell: 5.9 - /bin/zsh
    Binaries:
      Node: 22.21.1 - ~/.nvm/versions/node/v22.21.1/bin/node
      Yarn: 1.22.22 - ~/.nvm/versions/node/v22.21.1/bin/yarn
      npm: 10.9.4 - ~/.nvm/versions/node/v22.21.1/bin/npm
      Watchman: 2026.05.04.00 - /opt/homebrew/bin/watchman
    Managers:
      CocoaPods: 1.16.2 - /opt/homebrew/bin/pod
    SDKs:
      iOS SDK:
        Platforms: DriverKit 25.4, iOS 26.4, macOS 26.4, tvOS 26.4, visionOS 26.4, watchOS 26.4
    IDEs:
      Xcode: 26.4.1/17E202 - /usr/bin/xcodebuild
    npmPackages:
      expo: 55.0.9 => 55.0.9
      expo-router: ~55.0.10 => 55.0.10
      expo-updates: ~55.0.18 => 55.0.18
      react: 19.2.0 => 19.2.0
      react-dom: 19.2.0 => 19.2.0
      react-native: 0.83.4 => 0.83.4
      react-native-web: ^0.21.0 => 0.21.2
    npmGlobalPackages:
      eas-cli: 18.7.0                                                                                               Expo Workflow: bare
  • Platform that you're experiencing the issue on:
    • iOS
    • Android
    • iOS but have not tested behavior on Android
    • Android but have not tested behavior on iOS
    • Both
  • react-native-firebase version you're using that has this issue:
    • "@react-native-firebase/app": "^24.0.0",
  • Firebase module(s) you're using that has the issue:
    • "@react-native-firebase/analytics": "^24.0.0",


Metadata

Metadata

Assignees

No one assigned

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions