I think so. This seems to be a way to come in contact with firebase and GTM developers.
We have used Firebase and Google Tag Manager to get analytics events into Google Analytics.
Recently we wanted to start use Firebase crashlytics and thus we had to bump the versions of Firebase and indirectly Google Tag Manager (GTM). The latter to version 7.1.2.
Our app does not display advertising nor collects data for such a purpose. However, the latest version of GTM seems to require linking Apples AdSupport framework, although it seems it is suppose to be, or at least used to be, optional. If we would link AdSupport, we would have to answer "Yes" to the question
Does this app use the Advertising Identifier (IDFA)?
during the submit process to Apple. Though we cannot truthfully answer yes to any of the follow-up questions
This app uses the advertising identifier to
- Serve advertisements within the app
- Attribute this app installation to a previously served advertisement
- Attribute an action taken within this app to a previously served advertisement
Answering "no" to all three of these items has been known to get submissions rejected.
Our questions then are:
Is AdSupport framework now mandatory?
If no, how can we get a version of the latest GTM that does not have the dependency? Or is it a bug perhaps?
If yes, how would we go about sending events to Google analytics without involving IDFA?
Get hold of frameworks from cocoapods using
platform :ios, '11.0'
target 'GTM' do
use_frameworks!
pod 'Firebase'
pod 'Firebase/Analytics'
pod 'Firebase/Messaging'
pod 'GoogleTagManager'
pod 'Fabric'
pod 'Crashlytics'
end
Full cocoapods lock file:
PODS:
- Crashlytics (3.14.0):
- Fabric (~> 1.10.2)
- Fabric (1.10.2)
- Firebase (6.9.0):
- Firebase/Core (= 6.9.0)
- Firebase/Analytics (6.9.0):
- Firebase/Core
- Firebase/Core (6.9.0):
- Firebase/CoreOnly
- FirebaseAnalytics (= 6.1.2)
- Firebase/CoreOnly (6.9.0):
- FirebaseCore (= 6.3.0)
- Firebase/Messaging (6.9.0):
- Firebase/CoreOnly
- FirebaseMessaging (~> 4.1.4)
- FirebaseAnalytics (6.1.2):
- FirebaseCore (~> 6.3)
- FirebaseInstanceID (~> 4.2)
- GoogleAppMeasurement (= 6.1.2)
- GoogleUtilities/AppDelegateSwizzler (~> 6.0)
- GoogleUtilities/MethodSwizzler (~> 6.0)
- GoogleUtilities/Network (~> 6.0)
- "GoogleUtilities/NSData+zlib (~> 6.0)"
- nanopb (~> 0.3)
- FirebaseAnalyticsInterop (1.4.0)
- FirebaseCore (6.3.0):
- FirebaseCoreDiagnostics (~> 1.0)
- FirebaseCoreDiagnosticsInterop (~> 1.0)
- GoogleUtilities/Environment (~> 6.2)
- GoogleUtilities/Logger (~> 6.2)
- FirebaseCoreDiagnostics (1.1.0):
- FirebaseCoreDiagnosticsInterop (~> 1.0)
- GoogleDataTransportCCTSupport (~> 1.0)
- GoogleUtilities/Environment (~> 6.2)
- GoogleUtilities/Logger (~> 6.2)
- FirebaseCoreDiagnosticsInterop (1.0.0)
- FirebaseInstanceID (4.2.5):
- FirebaseCore (~> 6.0)
- GoogleUtilities/Environment (~> 6.0)
- GoogleUtilities/UserDefaults (~> 6.0)
- FirebaseMessaging (4.1.5):
- FirebaseAnalyticsInterop (~> 1.3)
- FirebaseCore (~> 6.2)
- FirebaseInstanceID (~> 4.1)
- GoogleUtilities/AppDelegateSwizzler (~> 6.2)
- GoogleUtilities/Environment (~> 6.2)
- GoogleUtilities/Reachability (~> 6.2)
- GoogleUtilities/UserDefaults (~> 6.2)
- Protobuf (~> 3.1)
- GoogleAnalytics (3.17.0)
- GoogleAppMeasurement (6.1.2):
- GoogleUtilities/AppDelegateSwizzler (~> 6.0)
- GoogleUtilities/MethodSwizzler (~> 6.0)
- GoogleUtilities/Network (~> 6.0)
- "GoogleUtilities/NSData+zlib (~> 6.0)"
- nanopb (~> 0.3)
- GoogleDataTransport (2.0.0)
- GoogleDataTransportCCTSupport (1.1.0):
- GoogleDataTransport (~> 2.0)
- nanopb
- GoogleSymbolUtilities (1.1.2)
- GoogleTagManager (7.1.2):
- FirebaseAnalytics (~> 6.0)
- GoogleAnalytics (~> 3.17)
- GoogleUtilitiesLegacy (~> 1.3)
- GoogleUtilities/AppDelegateSwizzler (6.3.1):
- GoogleUtilities/Environment
- GoogleUtilities/Logger
- GoogleUtilities/Network
- GoogleUtilities/Environment (6.3.1)
- GoogleUtilities/Logger (6.3.1):
- GoogleUtilities/Environment
- GoogleUtilities/MethodSwizzler (6.3.1):
- GoogleUtilities/Logger
- GoogleUtilities/Network (6.3.1):
- GoogleUtilities/Logger
- "GoogleUtilities/NSData+zlib"
- GoogleUtilities/Reachability
- "GoogleUtilities/NSData+zlib (6.3.1)"
- GoogleUtilities/Reachability (6.3.1):
- GoogleUtilities/Logger
- GoogleUtilities/UserDefaults (6.3.1):
- GoogleUtilities/Logger
- GoogleUtilitiesLegacy (1.3.2):
- GoogleSymbolUtilities (~> 1.1)
- nanopb (0.3.901):
- nanopb/decode (= 0.3.901)
- nanopb/encode (= 0.3.901)
- nanopb/decode (0.3.901)
- nanopb/encode (0.3.901)
- Protobuf (3.10.0)
DEPENDENCIES:
- Crashlytics
- Fabric
- Firebase
- Firebase/Analytics
- Firebase/Messaging
- GoogleTagManager
SPEC REPOS:
trunk:
- Crashlytics
- Fabric
- Firebase
- FirebaseAnalytics
- FirebaseAnalyticsInterop
- FirebaseCore
- FirebaseCoreDiagnostics
- FirebaseCoreDiagnosticsInterop
- FirebaseInstanceID
- FirebaseMessaging
- GoogleAnalytics
- GoogleAppMeasurement
- GoogleDataTransport
- GoogleDataTransportCCTSupport
- GoogleSymbolUtilities
- GoogleTagManager
- GoogleUtilities
- GoogleUtilitiesLegacy
- nanopb
- Protobuf
SPEC CHECKSUMS:
Crashlytics: 540b7e5f5da5a042647227a5e3ac51d85eed06df
Fabric: 706c8b8098fff96c33c0db69cbf81f9c551d0d74
Firebase: 2d750c54cda57d5a6ae31212cfe5cc813c6be7e4
FirebaseAnalytics: 5d9ccbf46ed25d3ec9304d263f85bddf1e93e2d2
FirebaseAnalyticsInterop: d48b6ab67bcf016a05e55b71fc39c61c0cb6b7f3
FirebaseCore: 8b2765c445d40db7137989b7146a3aa3f91b5529
FirebaseCoreDiagnostics: be4f7a09d02ab305f18de59a470412caddb64c2a
FirebaseCoreDiagnosticsInterop: 6829da2b8d1fc795ff1bd99df751d3788035d2cb
FirebaseInstanceID: 550df9be1f99f751d8fcde3ac342a1e21a0e6c42
FirebaseMessaging: b22b949cc45c14da01e60404dd7bffc78956380c
GoogleAnalytics: f42cc53a87a51fe94334821868d9c8481ff47a7b
GoogleAppMeasurement: 0ae90be1cc4dad40f4a27fc767ef59fa032ec87b
GoogleDataTransport: c8617c00e4f3eb9418e42ac0e8ac5241a9d555dd
GoogleDataTransportCCTSupport: 9f352523e8785a71f6754f51eeff09f49ec19268
GoogleSymbolUtilities: 631ee17048aa5e9ab133470d768ea997a5ef9b96
GoogleTagManager: 1821fef94a9648b63c6c3469077adcba4bff8dee
GoogleUtilities: f895fde57977df4e0233edda0dbeac490e3703b6
GoogleUtilitiesLegacy: 5501bedec1646bd284286eb5fc9453f7e23a12f4
nanopb: 2901f78ea1b7b4015c860c2fdd1ea2fee1a18d48
Protobuf: a4dc852ad69c027ca2166ed287b856697814375b
PODFILE CHECKSUM: 3694857152e06e93cf85389af8bd798ec6361303
COCOAPODS: 1.8.3
I couldn't figure out how to label this issue, so I've labeled it for a human to triage. Hang tight.
Hi @carbjo, according to the documentation:
Some Analytics features, such as audiences and campaign attribution, and some user properties, such as Age and Interests, require the AdSupport framework to be enabled.
It is also mentioned on AdSupport framework docs that if devices are not using limited ad tracking, you can use the advertising identifier for frequency capping, attribution, conversion events, estimating the number of unique users, advertising fraud detection, and debugging.
I think this is a bug on Google's end, and we need to clarify with the GTM team what the intended behavior is.
Any updates on this issue?
Can we get any update on this?
Sorry for the slow update everyone.
Looking through the TagManager code, nothing has changed in the linking of AdSupport around the time this issue was filed. What error do you get if you try to exclude AdSupport from your build?
Also, if you do include AdSupport, the answer to the app submission questionnaire will depend on how you use your tag containers; for example, if you're using tags to attribute in-app purchases to advertisements, you should choose the third option ("Attribute an action taken within this app to a previously served advertisement").
I get the following error:
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_ASIdentifierManager", referenced from:
objc-class-ref in GoogleTagManager(TAGJSExportedInstructions_df2f1de1ff32c51590a7008198849295.o)
That's what I expected, but that should be the case even for old TagManager releases. TagManager has always had a hard dependency on ASIdentifierManager in the AdSupport framework. I can't speak authoritatively to TagManager's future plans, but it's unlikely the AdSupport dependency changes in the future. If you don't want TagManager linking AdSupport into your app, you should remove TagManager; if you need further guidance on answering the App Store questionnaire please comment here with your specifics and I'll try to help.
@morganchen12 I want to confirm that GTM does not send any data until the app emits Firebase events if you could. ASIdentifierManager usage in GTM affects iOS14 app transparency actually, so I am worried about it too.
Tracking data will only be automatically sent if your app has set the dispatchInterval property to a positive non-zero value. Even then, the dispatch result will be kTAGDispatchNoData unless your app has logged an event through Firebase Analytics or one of the other event logging frameworks that TAGManager is compatible with.
TagManager does regularly fetch tag container information, refreshing every 12 hours by default.
@morganchen12 In my case, I have a kids app that is getting rejected because of this reference. And I can't just say I'm using IDFA because it is no longer allowed by Apple for this category. Will it mean I have to stop using TagManager? Any advice? Thank you.
Yes, unfortunately you'll have to remove TagManager.
Most helpful comment
I think this is a bug on Google's end, and we need to clarify with the GTM team what the intended behavior is.