Skip to content

[πŸ›] Can't close interstitial ad on physical iOS device (working on simulator)Β #826

@hugoecken

Description

@hugoecken

What happened?

Hi πŸ‘‹

I’m seeing a strange behavior with interstitial ads on iOS:

  • On iOS simulator β†’ interstitial loads and closes correctly
  • On physical iOS devices β†’ tapping the ❌ close button does nothing
  • The ad remains visible and the AdEventType.CLOSED event is NEVER fired
  • This happens even when using TestIds.INTERSTITIAL

There is no overlay in my UI, I also tried hiding the StatusBar during the ad, and tested with a minimal debug screen (no navigation logic). Still reproducible.

This makes the interstitial impossible to dismiss on iOS devices.

Platforms

iOS, but have not tested behavior on Android

React Native Info

info Fetching system and libraries information...
System:
  OS: macOS 15.5
  CPU: (11) arm64 Apple M3 Pro
  Memory: 139.55 MB / 18.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 22.12.0
    path: ~/.nvm/versions/node/v22.12.0/bin/node
  Yarn:
    version: 1.22.22
    path: ~/.nvm/versions/node/v22.12.0/bin/yarn
  npm:
    version: 11.6.4
    path: ~/.nvm/versions/node/v22.12.0/bin/npm
  Watchman:
    version: 2024.12.02.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.16.2
    path: /opt/homebrew/bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 24.2
      - iOS 18.2
      - macOS 15.2
      - tvOS 18.2
      - visionOS 2.2
      - watchOS 11.2
  Android SDK: Not Found
IDEs:
  Android Studio: 2024.3 AI-243.25659.59.2432.13423653
  Xcode:
    version: 16.2/16C5032a
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 21.0.3
    path: /usr/bin/javac
  Ruby:
    version: 2.6.10
    path: /usr/bin/ruby
npmPackages:
  "@react-native-community/cli":
    installed: 20.0.2
    wanted: latest
  react:
    installed: 19.1.0
    wanted: 19.1.0
  react-native:
    installed: 0.81.5
    wanted: 0.81.5
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: true
iOS:
  hermesEnabled: true
  newArchEnabled: true

info React Native v0.83.0 is now available (your project is running on v0.81.5).
info Changelog: https://github.com/facebook/react-native/releases/tag/v0.83.0
info Diff: https://react-native-community.github.io/upgrade-helper/?from=0.81.5&to=0.83.0
info For more info, check out "https://reactnative.dev/docs/upgrading?os=macos".

Are your using Typescript?

  • My project is using Typescript

package.json

{
  "name": "blockout",
  "main": "expo-router/entry",
  "version": "1.0.0",
  "scripts": {
    "start": "expo start",
    "reset-project": "node ./scripts/reset-project.js",
    "android": "expo run:android",
    "ios": "expo run:ios",
    "web": "expo start --web",
    "test": "jest --watchAll",
    "lint": "expo lint"
  },
  "jest": {
    "preset": "jest-expo"
  },
  "dependencies": {
    "@expo/metro-runtime": "~6.1.2",
    "@expo/vector-icons": "^15.0.2",
    "@gorhom/bottom-sheet": "^5.2.3",
    "@legendapp/list": "^2.0.9",
    "@react-native-picker/picker": "2.11.1",
    "@react-navigation/bottom-tabs": "^7.0.0",
    "@react-navigation/drawer": "^7.0.0",
    "@react-navigation/native": "^7.0.14",
    "@shopify/flash-list": "2.0.2",
    "@tanstack/react-query": "^5.62.8",
    "@types/qs": "^6.14.0",
    "@types/tinycolor2": "^1.4.6",
    "axios": "^1.9.0",
    "axios-case-converter": "^1.1.1",
    "axios-retry": "^4.5.0",
    "camelcase-keys": "^9.1.3",
    "date-fns": "^4.1.0",
    "expo": "~54.0.25",
    "expo-application": "~7.0.7",
    "expo-blur": "~15.0.7",
    "expo-build-properties": "~1.0.9",
    "expo-clipboard": "~8.0.7",
    "expo-constants": "~18.0.9",
    "expo-dev-client": "~6.0.18",
    "expo-device": "~8.0.9",
    "expo-font": "~14.0.8",
    "expo-haptics": "~15.0.7",
    "expo-image": "~3.0.10",
    "expo-image-manipulator": "~14.0.7",
    "expo-image-picker": "~17.0.8",
    "expo-linear-gradient": "~15.0.7",
    "expo-linking": "~8.0.9",
    "expo-navigation-bar": "~5.0.9",
    "expo-notifications": "~0.32.13",
    "expo-router": "~6.0.15",
    "expo-secure-store": "~15.0.7",
    "expo-splash-screen": "~31.0.11",
    "expo-status-bar": "~3.0.8",
    "expo-symbols": "~1.0.7",
    "expo-system-ui": "~6.0.8",
    "expo-tracking-transparency": "~6.0.8",
    "expo-updates": "~29.0.13",
    "expo-web-browser": "~15.0.9",
    "formik": "^2.4.6",
    "jest-expo": "~54.0.13",
    "lucide-react-native": "^0.525.0",
    "moti": "^0.30.0",
    "qs": "^6.14.0",
    "react": "19.1.0",
    "react-dom": "19.1.0",
    "react-native": "0.81.5",
    "react-native-auth0": "^5.2.1",
    "react-native-edge-to-edge": "^1.7.0",
    "react-native-gesture-handler": "~2.28.0",
    "react-native-google-mobile-ads": "^15.8.3",
    "react-native-linear-gradient": "^2.8.3",
    "react-native-markdown-display": "^7.0.2",
    "react-native-pager-view": "6.9.1",
    "react-native-paper": "^5.14.5",
    "react-native-reanimated": "~4.1.1",
    "react-native-safe-area-context": "~5.6.0",
    "react-native-screens": "~4.16.0",
    "react-native-svg": "15.12.1",
    "react-native-tab-view": "^4.0.5",
    "react-native-web": "^0.21.0",
    "react-native-webview": "13.15.0",
    "react-native-worklets": "0.5.1",
    "reanimated-color-picker": "^4.1.1",
    "snakecase-keys": "^8.0.1",
    "tinycolor2": "^1.6.0",
    "twrnc": "^4.6.1",
    "use-debounce": "^10.0.4",
    "yup": "^1.6.1",
    "zustand": "^5.0.8"
  },
  "devDependencies": {
    "@babel/core": "^7.25.2",
    "@react-native-community/cli": "latest",
    "@testing-library/dom": "^10.4.1",
    "@testing-library/react": "^16.3.0",
    "@types/jest": "^29.5.12",
    "@types/react": "~19.1.10",
    "@types/react-dom": "^19.1.7",
    "jest": "^29.2.1",
    "typescript": "~5.9.2"
  },
  "private": true
}

app.json

{
  "expo": {
    "name": "Blockout",
    "slug": "blockoutproject",
    "scheme": [
      "blockout"
    ],
    "version": "1.2.0",
    "orientation": "portrait",
    "icon": "./assets/images/icon.png",
    "userInterfaceStyle": "automatic",
    "ios": {
      "supportsTablet": false,
      "bundleIdentifier": "com.blockoutproject.blockout",
      "infoPlist": {
        "ITSAppUsesNonExemptEncryption": false
      },
      "entitlements": {
        "com.apple.developer.applesignin": [
          "Default"
        ]
      }
    },
    "android": {
      "googleServicesFile": "./google-services.json",
      "adaptiveIcon": {
        "foregroundImage": "./assets/images/blockout-logo-light.png",
        "backgroundColor": "#ffffff"
      },
      "package": "com.blockoutproject.blockout"
    },
    "androidNavigationBar": {
      "barStyle": "dark-content"
    },
    "web": {
      "bundler": "metro",
      "output": "static",
      "favicon": "./assets/images/blockout-logo-dark.png"
    },
    "plugins": [
      [
        "react-native-google-mobile-ads",
        {
          "androidAppId": "XXX",
          "iosAppId": "XXXX",
          "userTrackingUsageDescription": "This identifier will be used to deliver personalized ads to you.",
          "skAdNetworkItems": [
            "cstr6suwn9.skadnetwork",
            "4fzdc2evr5.skadnetwork",
            "2fnua5tdw4.skadnetwork",
            "ydx93a7ass.skadnetwork",
            "p78axxw29g.skadnetwork",
            "v72qych5uu.skadnetwork",
            "ludvb6z3bs.skadnetwork",
            "cp8zw746q7.skadnetwork",
            "3sh42y64q3.skadnetwork",
            "c6k4g5qg8m.skadnetwork",
            "s39g8k73mm.skadnetwork",
            "3qy4746246.skadnetwork",
            "f38h382jlk.skadnetwork",
            "hs6bdukanm.skadnetwork",
            "mlmmfzh3r3.skadnetwork",
            "v4nxqhlyqp.skadnetwork",
            "wzmmz9fp6w.skadnetwork",
            "su67r6k2v3.skadnetwork",
            "yclnxrl5pm.skadnetwork",
            "t38b2kh725.skadnetwork",
            "7ug5zh24hu.skadnetwork",
            "gta9lk7p23.skadnetwork",
            "vutu7akeur.skadnetwork",
            "y5ghdn5j9k.skadnetwork",
            "v9wttpbfk9.skadnetwork",
            "n38lu8286q.skadnetwork",
            "47vhws6wlr.skadnetwork",
            "kbd757ywx3.skadnetwork",
            "9t245vhmpl.skadnetwork",
            "a2p9lx4jpn.skadnetwork",
            "22mmun2rn5.skadnetwork",
            "44jx6755aq.skadnetwork",
            "k674qkevps.skadnetwork",
            "4468km3ulz.skadnetwork",
            "2u9pt9hc89.skadnetwork",
            "8s468mfl3y.skadnetwork",
            "klf5c3l5u5.skadnetwork",
            "ppxm28t8ap.skadnetwork",
            "kbmxgpxpgc.skadnetwork",
            "uw77j35x4d.skadnetwork",
            "578prtvx9j.skadnetwork",
            "4dzt52r2t5.skadnetwork",
            "tl55sbb4fm.skadnetwork",
            "c3frkrj4fj.skadnetwork",
            "e5fvkxwrpn.skadnetwork",
            "8c4e2ghe7u.skadnetwork",
            "3rd42ekr43.skadnetwork",
            "97r2b46745.skadnetwork",
            "3qcr597p9d.skadnetwork"
          ]
        }
      ],
      [
        "expo-font",
        {
          "fonts": [
            "./assets/fonts/Outfit-VariableFont_wght.ttf"
          ]
        }
      ],
      [
        "expo-build-properties",
        {
          "android": {
            "enableProguardInReleaseBuild": true,
            "enableShrinkResourcesInReleaseBuild": true
          }
        }
      ],
      "expo-router",
      [
        "expo-splash-screen",
        {
          "backgroundColor": "#0b0c0d",
          "image": "./assets/images/splash-icon-dark.png",
          "dark": {
            "image": "./assets/images/splash-icon-dark.png",
            "backgroundColor": "#0b0c0d"
          },
          "imageWidth": 200
        }
      ],
      [
        "react-native-edge-to-edge",
        {
          "android": {
            "enforceNavigationBarContrast": false
          }
        }
      ],
      [
        "react-native-auth0",
        {
          "domain": "login.blockoutproject.com",
          "customScheme": "com.blockoutproject.blockout.auth0"
        }
      ],
      "expo-secure-store",
      "expo-notifications",
      "expo-web-browser",
      "expo-build-properties",
      "react-native-google-mobile-ads"
    ],
    "experiments": {
      "typedRoutes": true
    },
    "extra": {
      "router": {
        "origin": false
      },
      "eas": {
        "projectId": "10cdf86a-a81e-496a-bcaa-07c132678f6d"
      }
    },
    "owner": "blockoutproject",
    "runtimeVersion": {
      "policy": "appVersion"
    },
    "updates": {
      "url": "https://u.expo.dev/10cdf86a-a81e-496a-bcaa-07c132678f6d"
    }
  }
}

ios/Podfile

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['RCT_NEW_ARCH_ENABLED'] ||= '0' if podfile_properties['newArchEnabled'] == 'false'
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' && podfile_properties['newArchEnabled'] != 'false'
ENV['RCT_USE_PREBUILT_RNCORE'] ||= '1' if podfile_properties['ios.buildReactNativeFromSource'] != 'true' && podfile_properties['newArchEnabled'] != 'false'
platform :ios, podfile_properties['ios.deploymentTarget'] || '15.1'

prepare_react_native_project!

target 'Blockout' do
  use_expo_modules!

  if ENV['EXPO_USE_COMMUNITY_AUTOLINKING'] == '1'
    config_command = ['node', '-e', "process.argv=['', '', 'config'];require('@react-native-community/cli').run()"];
  else
    config_command = [
      'npx',
      '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),
    )
  end
end

android/build.gradle

android/app/build.gradle

android/settings.gradle

AndroidManifest.xml

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions