Skip to content

On-Device Conversion logs are inconsistent and misleading: "Disabled" status hard to verify after the very first app launch #15613

@cantopm

Description

@cantopm

Description

We are trying to update the Firebase version from 11.6.0 to the latest 12.7.0, but from our understanding now there is a new feature enabled by default called On-Device Conversion, which can be disabled in plist (if we want to preserve our existing features).

But it's hard to verify whether this feature is truly disabled, because the SDK's logging behavior for the "On-Device Conversion" feature is inconsistent and it's not clear whether the feature is really disabled via Info.plist.

When GOOGLE_ADS_ON_DEVICE_CONVERSION_EVENT_DATA_ENABLED is set to NO (or false):

  • The log confirming the service is disabled ([I-ACS023295] Conversion service disabled from Info.plist) only appears on the very first launch after a fresh install. On all subsequent launches (warm starts) or app updates, this log is never seen and is replaced by a generic will not attempt a fetch message. This makes it difficult to verify and confirm that the feature doesn't work.
  • The SDK continues to log an error ([I-ACS023308] Ads account not linked) on every launch, even though the feature is disabled.

Expected behaviour (as for me):

  • The SDK should consistently log the "Disabled from Info.plist" status on every initialization (both cold and warm starts) so developers can verify the state at any time.
  • The SDK should suppress the "Ads account not linked" error when the feature is explicitly disabled locally.

Reproducing the issue

  1. In Info.plist, add the key GOOGLE_ADS_ON_DEVICE_CONVERSION_EVENT_DATA_ENABLED with a Boolean value of NO.
  2. Enable debug logging by adding -FIRAnalyticsDebugEnabled to scheme's launch arguments.
  3. Perform a Fresh Install: Delete the app from the Simulator/Device and run it.
  4. Observation: Note the log [FirebaseAnalytics][I-ACS023295] Conversion service disabled from Info.plist. (Correct behavior).
  5. Perform a Warm Start: Stop the app and run it again (or build the app when the old Firebase version app e.g. 11.6.0 is installed on the simulator).
  6. Observation: The "Disabled from Info.plist" log is not present, although there are logs such as [FirebaseAnalytics][I-ACS023280] Conversion service will not attempt a fetch.
  7. Observation: The error [FirebaseAnalytics][I-ACS023308] ... Ads account not linked to Google Analytics appears, falsely suggesting a configuration problem.

Firebase SDK Version

12.7.0

Xcode Version

26.1.1

Installation Method

Swift Package Manager

Firebase Product(s)

Analytics, Crashlytics, Installations, Remote Config, Performance

Targeted Platforms

iOS

Relevant Log Output

- First ever app launch with on-device conversion DISABLED in plist:
12.7.0 - [FirebaseAnalytics][I-ACS023253] On-device conversion measurement is ready to initiate
12.7.0 - [FirebaseAnalytics][I-ACS023278] Conversion service GoogleAdsOnDeviceConversion framework is linked
12.7.0 - [FirebaseAnalytics][I-ACS023295] Conversion service disabled from Info.plist.
12.7.0 - [FirebaseAnalytics][I-ACS023281] Conversion service returned empty value
12.7.0 - [FirebaseAnalytics][I-ACS023308] Failed to initiate on-device conversion measurement for retrieving aggregate first-party data. Ads account not linked to Google Analytics.

- Next app launch with on-device conversion DISABLED in plist:
12.7.0 - [FirebaseAnalytics][I-ACS023253] On-device conversion measurement is ready to initiate
12.7.0 - [FirebaseAnalytics][I-ACS023278] Conversion service GoogleAdsOnDeviceConversion framework is linked
12.7.0 - [FirebaseAnalytics][I-ACS023280] Conversion service will not attempt a fetch
12.7.0 - [FirebaseAnalytics][I-ACS023308] Failed to initiate on-device conversion measurement for retrieving aggregate first-party data. Ads account not linked to Google Analytics.

- First ever app launch with on-device conversion ENABLED in plist:
12.7.0 - [FirebaseAnalytics][I-ACS023253] On-device conversion measurement is ready to initiate
12.7.0 - [FirebaseAnalytics][I-ACS023278] Conversion service GoogleAdsOnDeviceConversion framework is linked
12.7.0 - [FirebaseAnalytics][I-ACS023275] Conversion service disabled. Remote config disabled. Check ads account linked to Google Analytics.
12.7.0 - [FirebaseAnalytics][I-ACS023281] Conversion service returned empty value
12.7.0 - [FirebaseAnalytics][I-ACS023308] Failed to initiate on-device conversion measurement for retrieving aggregate first-party data. Ads account not linked to Google Analytics.

- Next app launch with on-device conversion ENABLED in plist:
12.7.0 - [FirebaseAnalytics][I-ACS023253] On-device conversion measurement is ready to initiate
12.7.0 - [FirebaseAnalytics][I-ACS023278] Conversion service GoogleAdsOnDeviceConversion framework is linked
12.7.0 - [FirebaseAnalytics][I-ACS023280] Conversion service will not attempt a fetch
12.7.0 - [FirebaseAnalytics][I-ACS023308] Failed to initiate on-device conversion measurement for retrieving aggregate first-party data. Ads account not linked to Google Analytics.

If using Swift Package Manager, the project's Package.resolved

Expand Package.resolved snippet
{
  "originHash" : "95ace3435a2f33ebb16306af1700691f11eb4ad41d4c4bee6c404e9b66ae237f",
  "pins" : [
    {
      "identity" : "abseil-cpp-binary",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/abseil-cpp-binary.git",
      "state" : {
        "revision" : "bbe8b69694d7873315fd3a4ad41efe043e1c07c5",
        "version" : "1.2024072200.0"
      }
    },
    {
      "identity" : "app-check",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/app-check.git",
      "state" : {
        "revision" : "61b85103a1aeed8218f17c794687781505fbbef5",
        "version" : "11.2.0"
      }
    },
    {
      "identity" : "firebase-ios-sdk",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/firebase/firebase-ios-sdk.git",
      "state" : {
        "revision" : "45210bd1ea695779e6de016ab00fea8c0b7eb2ef",
        "version" : "12.7.0"
      }
    },
    {
      "identity" : "google-ads-on-device-conversion-ios-sdk",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/googleads/google-ads-on-device-conversion-ios-sdk",
      "state" : {
        "revision" : "35b601a60fbbea2de3ea461f604deaaa4d8bbd0c",
        "version" : "3.2.0"
      }
    },
    {
      "identity" : "googleappmeasurement",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/GoogleAppMeasurement.git",
      "state" : {
        "revision" : "c2d59acf17a8ba7ed80a763593c67c9c7c006ad1",
        "version" : "12.5.0"
      }
    },
    {
      "identity" : "googledatatransport",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/GoogleDataTransport.git",
      "state" : {
        "revision" : "617af071af9aa1d6a091d59a202910ac482128f9",
        "version" : "10.1.0"
      }
    },
    {
      "identity" : "googleutilities",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/GoogleUtilities.git",
      "state" : {
        "revision" : "60da361632d0de02786f709bdc0c4df340f7613e",
        "version" : "8.1.0"
      }
    },
    {
      "identity" : "grpc-binary",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/grpc-binary.git",
      "state" : {
        "revision" : "75b31c842f664a0f46a2e590a570e370249fd8f6",
        "version" : "1.69.1"
      }
    },
    {
      "identity" : "gtm-session-fetcher",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/gtm-session-fetcher.git",
      "state" : {
        "revision" : "c756a29784521063b6a1202907e2cc47f41b667c",
        "version" : "4.5.0"
      }
    },
    {
      "identity" : "interop-ios-for-google-sdks",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/interop-ios-for-google-sdks.git",
      "state" : {
        "revision" : "040d087ac2267d2ddd4cca36c757d1c6a05fdbfe",
        "version" : "101.0.0"
      }
    },
    {
      "identity" : "leveldb",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/firebase/leveldb.git",
      "state" : {
        "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1",
        "version" : "1.22.5"
      }
    },
    {
      "identity" : "nanopb",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/firebase/nanopb.git",
      "state" : {
        "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1",
        "version" : "2.30910.0"
      }
    },
    {
      "identity" : "promises",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/google/promises.git",
      "state" : {
        "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac",
        "version" : "2.4.0"
      }
    },
    {
      "identity" : "swift-protobuf",
      "kind" : "remoteSourceControl",
      "location" : "https://github.com/apple/swift-protobuf.git",
      "state" : {
        "revision" : "2547102afd04fe49f1b286090f13ebce07284980",
        "version" : "1.31.1"
      }
    }
  ],
  "version" : 3
}

If using CocoaPods, the project's Podfile.lock

Expand Podfile.lock snippet
Replace this line with the contents of your Podfile.lock!

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions