[MOD-2652] AdMob: Support AppTrackingTransparency for iOS 14
| GitHub Issue | n/a |
|---|---|
| Type | New Feature |
| Priority | Critical |
| Status | Resolved |
| Resolution | Unresolved |
| Affected Version/s | n/a |
| Fix Version/s | n/a |
| Components | Admob |
| Labels | n/a |
| Reporter | Donovan Lewis |
| Assignee | Vikas Goyal |
| Created | 2020-06-23T14:29:26.000+0000 |
| Updated | 2020-11-06T17:46:15.000+0000 |
Description
Add support for AppTrackingTransparency for iOS 14: https://developer.apple.com/documentation/apptrackingtransparency
This seems to be required now for any apps that will have ads displayed in them. I'm sure we will need to update the Admob module to go along with this once they figure out how they are going to handle it.
PR: https://github.com/appcelerator-modules/ti.admob/pull/100
I'm going to try out this PR. Is there a way to invoke the AppTrackingTransparency alert to come up when you want to? So you could ask at first launch and then ask again at a later date if it was turned off?
The 'requestTrackingAuthorization' function is used to invoke the AppTrackingTransparency alert to come up when you want to. The system remembers the user’s choice and doesn’t prompt again unless a user uninstalls and then reinstalls the app on the device. so if user has selected any option it will not show the alert again. Note, when calling 'requestTrackingAuthorization', the NSUserTrackingUsageDescription key must be in '
We need to update this module again. Google has just published its official iOS 14 version of Admob version 7.64.0 that has support for AppTrackingTransparency included as well as support for SKAdNetwork which is extremely important also. https://developers.google.com/admob/ios/rel-notes
From Google: In preparation for the iOS 14 consumer launch, we recently announced updated GMA and IMA Software Developer KIts (SDKs) that include support for iOS 14 specific features. You’ve hopefully been seeing our recommendations, best practices and announcements around supporting recent app privacy and user consent changes. I wanted to highlight some steps you might want to take. HIGHEST PRIORITY STEPS Update to GMA SDK iOS v7.64 (AdMob, AdManager) or later and/or IMA SDK iOS v3.12.1 or later. Call the new AppTrackingTransparency (ATT) Framework permission . Add the listed SkAdNetworks for Google (AdMob, AdManager). RECOMMENDED STEPS Providing users with a message before calling the ATT Framework permission is advisable to convey the value of your app. You can elect to: Develop your own explainer message preceding the permission request. Use Funding Choices with the UMP SDK for the explainer message. We are committed to continue to develop this message solution, so utilizing this feature can save development time and effort. While an explainer via Funding Choices won’t be ready until September, you can get a head start by creating a Funding Choices account directly through the AdMob or Ad Manager front-end. After setting up Funding Choices and integrating the UMP SDK for iOS (AdMob, AdManager), you can create an IDFA message in Funding Choices and publish it. This will trigger the ATT alert. Once the explainer message functionality is available around September, the explainer message will automatically appear ahead of the iOS 14 ATT alert. You can find more guidance on preparing for iOS 14 changes in the AdMob Help Center and the AdManager Help Center. Please stay tuned for more announcements on how Google plans to help in the coming months.
With SDK 9.2.1.GA the below errors started for me when trying to build.
[ERROR] : 2020-10-08 09:18:13.157 xcodebuild[4669:120458] DTDeviceKit: deviceType from 00008027-001115183422002E was NULL [ERROR] : 2020-10-08 09:18:13.216 xcodebuild[4669:120466] DTDKRemoteDeviceConnection: Failed to start remote service "com.apple.mobile.notification_proxy" on device. Error: Error Domain=com.apple.dtdevicekit Code=811 "Failed to start remote service "com.apple.mobile.notification_proxy" on device." UserInfo={NSUnderlyingError=0x7fb0791e6680 {Error Domain=com.apple.dt.MobileDeviceErrorDomain Code=-402653158 "The device is passcode protected." UserInfo={MobileDeviceErrorCode=(0xE800001A), com.apple.dtdevicekit.stacktrace=( [ERROR] : 0 DTDeviceKitBase 0x000000011ef9993f DTDKCreateNSErrorFromAMDErrorCode + 220 [ERROR] : 1 DTDeviceKitBase 0x000000011efa9b04 __63-[DTDKRemoteDeviceConnection startFirstServiceOf:unlockKeybag:]_block_invoke + 613 [ERROR] : 2 DTDeviceKitBase 0x000000011efa91d0 __48-[DTDKRemoteDeviceConnection futureWithSession:]_block_invoke_3 + 22 [ERROR] : 3 DTDeviceKitBase 0x000000011ef9ba9f __DTDKExecuteInSession_block_invoke_2 + 35 [ERROR] : 4 DTDeviceKitBase 0x000000011ef9b179 __DTDKExecuteWithConnection_block_invoke_2 + 218 [ERROR] : 5 DTDeviceKitBase 0x000000011ef9b076 __DTDKExecuteWithConnection_block_invoke + 106 [ERROR] : 6 libdispatch.dylib 0x00007fff7068a658 _dispatch_client_callout + 8 [ERROR] : 7 libdispatch.dylib 0x00007fff70696a38 _dispatch_sync_invoke_and_complete_recurse + 65 [ERROR] : 8 libdispatch.dylib 0x00007fff706965ab _dispatch_sync_f_slow + 195 [ERROR] : 9 DVTFoundation 0x000000010cc21def DVTDispatchBarrierSync + 208 [ERROR] : 10 DVTFoundation 0x000000010cbf8f06 -[DVTDispatchLock performLockedBlock:] + 60 [ERROR] : 11 DTDeviceKitBase 0x000000011ef9af77 DTDKExecuteWithConnection + 226 [ERROR] : 12 DTDeviceKitBase 0x000000011ef9b943 DTDKExecuteInSession + 239 [ERROR] : 13 DTDeviceKitBase 0x000000011efa9022 __48-[DTDKRemoteDeviceConnection futureWithSession:]_block_invoke_2 + 131 [ERROR] : 14 DVTFoundation 0x000000010cc1f2aa __DVT_CALLING_CLIENT_BLOCK__ + 7 [ERROR] : 15 DVTFoundation 0x000000010cc20ecc __DVTDispatchAsync_block_invoke + 1191 [ERROR] : 16 libdispatch.dylib 0x00007fff706896c4 _dispatch_call_block_and_release + 12 [ERROR] : 17 libdispatch.dylib 0x00007fff7068a658 _dispatch_client_callout + 8 [ERROR] : 18 libdispatch.dylib 0x00007fff7068fc44 _dispatch_lane_serial_drain + 597 [ERROR] : 19 libdispatch.dylib 0x00007fff70690609 _dispatch_lane_invoke + 414 [ERROR] : 20 libdispatch.dylib 0x00007fff70699c09 _dispatch_workloop_worker_thread + 596 [ERROR] : 21 libsystem_pthread.dylib 0x00007fff708e4a3d _pthread_wqthread + 290 [ERROR] : 22 libsystem_pthread.dylib 0x00007fff708e3b77 start_wqthread + 15 [ERROR] : ), DVTRadarComponentKey=261622, NSLocalizedDescription=The device is passcode protected.}}, NSLocalizedRecoverySuggestion=Please check your connection to your device., DVTRadarComponentKey=261622, NSLocalizedDescription=Failed to start remote service "com.apple.mobile.notification_proxy" on device.} [ERROR] : 2020-10-08 09:18:14.297 xcodebuild[4669:120469] DTDKRemoteDeviceConnection: Failed to start remote service "com.apple.mobile.notification_proxy" on device. Error: Error Domain=com.apple.dtdevicekit Code=811 "Failed to start remote service "com.apple.mobile.notification_proxy" on device." UserInfo={NSUnderlyingError=0x7fb07d493c20 {Error Domain=com.apple.dt.MobileDeviceErrorDomain Code=-402653158 "The device is passcode protected." UserInfo={MobileDeviceErrorCode=(0xE800001A), com.apple.dtdevicekit.stacktrace=( [ERROR] : 0 DTDeviceKitBase 0x000000011ef9993f DTDKCreateNSErrorFromAMDErrorCode + 220 [ERROR] : 1 DTDeviceKitBase 0x000000011efa9b04 __63-[DTDKRemoteDeviceConnection startFirstServiceOf:unlockKeybag:]_block_invoke + 613 [ERROR] : 2 DTDeviceKitBase 0x000000011efa91d0 __48-[DTDKRemoteDeviceConnection futureWithSession:]_block_invoke_3 + 22 [ERROR] : 3 DTDeviceKitBase 0x000000011ef9ba9f __DTDKExecuteInSession_block_invoke_2 + 35 [ERROR] : 4 DTDeviceKitBase 0x000000011ef9b179 __DTDKExecuteWithConnection_block_invoke_2 + 218 [ERROR] : 5 DTDeviceKitBase 0x000000011ef9b076 __DTDKExecuteWithConnection_block_invoke + 106 [ERROR] : 6 libdispatch.dylib 0x00007fff7068a658 _dispatch_client_callout + 8 [ERROR] : 7 libdispatch.dylib 0x00007fff706966ec _dispatch_lane_barrier_sync_invoke_and_complete + 60 [ERROR] : 8 DVTFoundation 0x000000010cc21def DVTDispatchBarrierSync + 208 [ERROR] : 9 DVTFoundation 0x000000010cbf8f06 -[DVTDispatchLock performLockedBlock:] + 60 [ERROR] : 10 DTDeviceKitBase 0x000000011ef9af77 DTDKExecuteWithConnection + 226 [ERROR] : 11 DTDeviceKitBase 0x000000011ef9b943 DTDKExecuteInSession + 239 [ERROR] : 12 DTDeviceKitBase 0x000000011efa9022 __48-[DTDKRemoteDeviceConnection futureWithSession:]_block_invoke_2 + 131 [ERROR] : 13 DVTFoundation 0x000000010cc1f2aa __DVT_CALLING_CLIENT_BLOCK__ + 7 [ERROR] : 14 DVTFoundation 0x000000010cc20ecc __DVTDispatchAsync_block_invoke + 1191 [ERROR] : 15 libdispatch.dylib 0x00007fff706896c4 _dispatch_call_block_and_release + 12 [ERROR] : 16 libdispatch.dylib 0x00007fff7068a658 _dispatch_client_callout + 8 [ERROR] : 17 libdispatch.dylib 0x00007fff7068fc44 _dispatch_lane_serial_drain + 597 [ERROR] : 18 libdispatch.dylib 0x00007fff70690609 _dispatch_lane_invoke + 414 [ERROR] : 19 libdispatch.dylib 0x00007fff70699c09 _dispatch_workloop_worker_thread + 596 [ERROR] : 20 libsystem_pthread.dylib 0x00007fff708e4a3d _pthread_wqthread + 290 [ERROR] : 21 libsystem_pthread.dylib 0x00007fff708e3b77 start_wqthread + 15 [ERROR] : ), DVTRadarComponentKey=261622, NSLocalizedDescription=The device is passcode protected.}}, NSLocalizedRecoverySuggestion=Please check your connection to your device., DVTRadarComponentKey=261622, NSLocalizedDescription=Failed to start remote service "com.apple.mobile.notification_proxy" on device.} [ERROR] : ** BUILD FAILED **