Skip to content

Conversation

@demon-sword
Copy link

@demon-sword demon-sword commented Oct 29, 2025

Description

This PR migrates key Android components to React Native’s New Architecture (TurboModules/Fabric) and updates documentation to reflect the current migration status.

  • Implemented native specs and refactored modules for New Architecture compatibility.
  • Confirmed Banner Ads are using a Fabric Native Component via codegen.
  • Migrated Mobile Ads SDK methods and Full Screen Ad modules (App Open, Interstitial, Rewarded, Rewarded Interstitial) to the New Architecture. fv
  • Updated the Android rows in the README’s “Migrating to the New Architecture Status” table.

Related issues

  • N/A

Release Summary

Android migration to New Architecture for core ads modules; documentation updated to reflect current status.

Checklist

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
    • Yes
  • My change supports the following platforms;
    • Android
    • iOS
  • My change includes tests;
    • e2e tests added or updated in __tests__e2e__
    • jest tests added or updated in __tests__
  • I have updated TypeScript types that are affected by my change.
  • This is a breaking change;
    • Yes
    • No

Test Plan

  • Verified that Android Banner component renders via Fabric using the codegen native component (GoogleMobileAdsBannerViewNativeComponent) and manager (ReactNativeGoogleMobileAdsBannerAdViewManager).
  • Validated Full Screen Ads lifecycle under the new TurboModule implementations:
    • App Open, Interstitial, Rewarded, Rewarded Interstitial load/show/dismiss flows.
  • Ensured README status accurately reflects current migration state.

Think react-native-google-mobile-ads is great? Please consider supporting the project with any of the below:

  • 👉 Star this repo on GitHub ⭐️
  • 👉 Follow Invertase on Twitter

semantic-release-bot and others added 30 commits January 3, 2024 08:30
## [12.8.0](invertase/react-native-google-mobile-ads@v12.7.1...v12.8.0) (2024-01-03)

### Features

* add method to check if gdpr applies ([011d68d](invertase@011d68d))
* feat(config, ios): add support for app.config.js
* feat(config, android): add support for app.config.js
* docs(installation): enhance docs for app.config.js support
* Update android/app-json.gradle
* Update docs/index.mdx
* test: pin detox to 19 (20 does not do jest)

- requires updated patch to handle AGP namespace requirements
- requires updated patch to handle new apple sim error codes

* fix(android): windows-compat pathing, wait for async proc, propagate exception

- windows needs to escape the absolute file path or config file not found
- groovy procs are async, script was continuing before proc had finished
  leading to no output
- if there is an empty config file output we can propagate that to main
  catch so the error message to user is clear but not duplicated

* test(ios): alter boost download source

works around known upstream issue where jfrog is currently unreliable

---------

Co-authored-by: Mike Hardy <[email protected]>
## [12.9.0](invertase/react-native-google-mobile-ads@v12.8.0...v12.9.0) (2024-01-09)

### Features

* **ios, android:** Add support for app.config.js ([invertase#517](invertase#517)) ([be39d5a](invertase@be39d5a))

### Reverts

* Revert "chore(docs): update gathering consent info" ([a82412b](invertase@a82412b))
## [12.10.0](invertase/react-native-google-mobile-ads@v12.9.0...v12.10.0) (2024-01-11)

### Features

* add method to check if consent for purpose 1 was given ([8fcee30](invertase@8fcee30))
## [12.11.0](invertase/react-native-google-mobile-ads@v12.10.0...v12.11.0) (2024-02-19)

### Features

* **android:** potentially improves mediation performance for banners ([invertase#527](invertase#527)) ([32f550a](invertase@32f550a))

### Bug Fixes

* **consent:** the package returns the wrong value for consent for 'Create a personalized content profile' purpose ([7aef863](invertase@7aef863))
## [13.0.0](invertase/react-native-google-mobile-ads@v12.11.0...v13.0.0) (2024-02-22)

### ⚠ BREAKING CHANGES

* **deps:** mobile ads sdk upgrade - ios 11.0.1, ump sdk 2.2.0

### Features

* **deps:** mobile ads sdk upgrade - ios 11.0.1, ump sdk 2.2.0 ([d924586](invertase@d924586))
### [13.0.1](invertase/react-native-google-mobile-ads@v13.0.0...v13.0.1) (2024-02-22)

### Bug Fixes

* to support app privacy manifests, cocoapods has to be at >= 1.12.0 ([ac8e06e](invertase@ac8e06e))
…nges

This wastes developer's time, we should warn them
### [13.0.2](invertase/react-native-google-mobile-ads@v13.0.1...v13.0.2) (2024-03-05)

### Bug Fixes

* TestIds.ADAPTIVE_BANNER undefined type error ([ffbc7b1](invertase@ffbc7b1))
## [13.1.0](invertase/react-native-google-mobile-ads@v13.0.2...v13.1.0) (2024-03-26)

### Features

* **deps:** mobile ads sdk upgrade - ios 11.2.0 android 23.0.0 ([099add4](invertase@099add4))
## [13.2.0](invertase/react-native-google-mobile-ads@v13.1.0...v13.2.0) (2024-04-03)

### Features

* add FLUID size support ([c09a326](invertase@c09a326))

### Bug Fixes

* android build error 'onAdLoaded' overrides nothing ([bd52c12](invertase@bd52c12))
### [13.2.1](invertase/react-native-google-mobile-ads@v13.2.0...v13.2.1) (2024-05-02)

### Bug Fixes

* **banner, ios:** banner not destroyed in new arch ([2d8bdb5](invertase@2d8bdb5))
* **banner, ios:** fixed memory leak ([5cbf0e9](invertase@5cbf0e9))
## [13.3.0](invertase/react-native-google-mobile-ads@v13.2.1...v13.3.0) (2024-05-13)

### Features

* **android:** Add support for ArrayList ([7303730](invertase@7303730))
mikehardy and others added 24 commits October 29, 2025 11:22
an exhaustive conditional always results in the last one being unnecessary
in a strongly typed system since it must be true by process of elimination
of the other enum elements in the type system, this results in a lint error
with strict checking

a more reliable way to test if the arg is in the enum, that does not result
in an unnecessary conditional is to check if the arg is in the enum as a JS
object
… -> Ref

codegen still requires ElementRef though, due to upstream issue
- loaded status wasn't handled well in class components for the 4 loadable tests
- can only useState in functional components, and that's the easiest, so convert
- all of the 4 different loadable tests were doing basically the same thing though,
  so make a more generic loadable component test and have the 4 just implement the differences
this simplifies the native modules there and should also speed up app startup time
as constants won't have to be loaded from native dynamically during module init

- they are equivalent across platforms, so no technical reason to load from native
- none of the other constants like this are loaded from native
- requires to provide an eslint parser source for types
- modified one included rule slightly to allow numbers in template strings
not sure why this was an NSNumber* before, with mismatched types
and conversions...
it seemed that they were all non-null?
…consent

you need to inform the Xcode compiler that you are not intending to reimplement
the setters/getters for the property (i.e., '@synthesize'), you just want a
narrower type, so you need to mark them as '@dynamic'
@docs-page
Copy link

docs-page bot commented Oct 29, 2025

To view this pull requests documentation preview, visit the following URL:

docs.page/invertase/react-native-google-mobile-ads~817

Documentation is deployed and generated using docs.page.

@CLAassistant
Copy link

CLAassistant commented Oct 29, 2025

CLA assistant check
Thank you for your submission! We really appreciate it. Like many open source projects, we ask that you all sign our Contributor License Agreement before we can accept your contribution.
7 out of 8 committers have signed the CLA.

✅ arunlodhi
✅ malandr2
✅ kimnagui
✅ demon-sword
✅ ifarhanpatel
✅ dylancom
✅ mikehardy
❌ semantic-release-bot
You have signed the CLA already but the status is still pending? Let us recheck it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.