ATT Prompt Appears in Simulator but Not on Physical Device - Cordova iOS App

I'm experiencing an inconsistent behavior with the App Tracking Transparency (ATT) prompt in my Cordova iOS app using the admob-plus-cordova and cordova-plugin-consent plugins.

Environment:

  • Cordova iOS app
  • Plugins: admob-plus-cordova, cordova-plugin-consent
  • iOS Simulator: 16.0
  • Physical device: iphone 12 17.5.1
  • Xcode version: 16.2

Issue: The ATT permission prompt appears correctly in the iOS Simulator but fails to show on physical devices. I've verified that:

  • Info.plist includes NSUserTrackingUsageDescription
  • The ATT request is triggered before initializing AdMob
  • The device is running iOS 14.5 or later

Expected behavior:

  • ATT prompt should appear on first launch on physical devices (as it does in the simulator)

Actual behavior:

  • ATT prompt appears correctly in simulator [attach your screenshot]
  • ATT prompt never appears on physical device

Troubleshooting steps tried:

  1. Verified app hasn't previously requested ATT permission
  2. Confirmed tracking is enabled in device Settings -> Privacy -> Tracking
  3. Verified implementation order (ATT request before AdMob initialization)

Any insights on why this might be happening or additional debugging steps would be greatly appreciated.

async handleIOSConsent() {
    const trackingStatus = await consent.trackingAuthorizationStatus();
    console.log('📢 iOS tracking status:', trackingStatus);
    
    if (trackingStatus === 0) { // notDetermined
        const newStatus = await consent.requestTrackingAuthorization();
        console.log('📢 New tracking status:', newStatus);
    }
}

async init() {
    if (this.isInitialized) return;

    try {
        // Wait for device ready
        await new Promise(resolve => setTimeout(resolve, 1000));

        // Check consent on iOS
        if (cordova.platformId === 'ios') {
            await this.handleIOSConsent();
        }

        // Initialize AdMob and continue with other initializations
        await admob.start();
        // ...

    } catch (error) {
        console.error('Error initializing:', error);
    }
}

// Initialization
document.addEventListener('deviceready', () => {
    console.log('Initializing AdManager...');
    setTimeout(() => {
        window.adManager = new AdManager();
        window.adManager.init();
    }, 1500);
}, false);
ATT Prompt Appears in Simulator but Not on Physical Device - Cordova iOS App
 
 
Q