androidreact-nativeexpoadmobads

Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'RNGoogleMobileAdsModule', in react native while integrating admob


I am new to react native and I wants to monetize my app, so I am integrating Admob in react native, i created my app using npx create-react-native-app command, i tried to see youtube ,google, chatgpt, bard but nothing's working and this is my last hope please help me here is my code,

app.json

enter image description here

Copybase.js --- the file where I am testing my ads but nothing showed up from last 2 days

import { Animated, Dimensions, Image, Pressable, StyleSheet, Text, View } from 'react-native';
import React, { useRef } from 'react';
import Header from '../components/Header';
import { useThContext } from '../reducon/context';
import { Linking } from 'react-native';
import { BannerAd, BannerAdSize, TestIds } from 'react-native-google-mobile-ads';

const adUnitId = __DEV__ ? TestIds.BANNER : 'ca-app-pub-xxxxxxxxxxxxxxxx/xxxxxxxxxx';

export default Copybase = ({ navigation }) => {

  const animation = useRef(new Animated.Value(1)).current;
  const bgColor = useRef(new Animated.Value(0)).current;


  const handlePressIn = () => {
    Animated.spring(animation, {
      toValue: 0.97,
      duration: 200,
      useNativeDriver: true,
    }).start();
    Animated.timing(bgColor, {
      toValue: 1,
      duration: 200,
      useNativeDriver: true,
    }).start();
  }
  const handlePressOut = () => {
    Animated.spring(animation, {
      toValue: 1,
      duration: 200,
      useNativeDriver: true,
    }).start();
    Animated.timing(bgColor, {
      toValue: 0,
      duration: 200,
      useNativeDriver: true,
    }).start();
    Linking.openURL(info.link);
  }


  const { info } = useThContext();

  const backgroundColor = bgColor.interpolate({
    inputRange: [0, 1],
    outputRange: ['#749b38', '#648630'],
  })

  return (
    <View>
      <Header navi={navigation} text={'BASE LAYOUT'} BackButton={true} />
      <View style={styles.container}>
        <Image style={styles.image} source={info.image} />
        <Pressable onPressIn={() => { handlePressIn() }} onPressOut={() => { handlePressOut() }}>
          <Animated.View style={[styles.copyButton, { transform: [{ scale: animation }], backgroundColor: backgroundColor }]}>
            <Text style={styles.copyButtonText}>COPY LAYOUT</Text>
          </Animated.View>
        </Pressable>
      </View>
      <BannerAd
        unitId={TestIds.BANNER}
        size={BannerAdSize.BANNER}
        requestOptions={{
          requestNonPersonalizedAdsOnly: true,
        }}
      />
    </View>
  )
}
const styles = StyleSheet.create({
  container: {
    height: '100%',
    alignItems: 'center',
    backgroundColor: '#f9f9f9',
  },
  image: {
    width: Dimensions.get('window').width,
    height: 300,
    resizeMode: 'contain',
  },
  copyButton: {
    marginTop: 40,
    backgroundColor: '#749b38',
    padding: 12,
    borderRadius: 3,
    shadowColor: "#000000",
    shadowOffset: {
      width: 0,
      height: 1,
    },
    shadowOpacity: 0.16,
    shadowRadius: 1.51,
    elevation: 6,
  },
  copyButtonText: {
    color: '#fff',
    fontWeight: '700',
    fontSize: 18,
  }
});

the error that i am facing ----

Invariant Violation: TurboModuleRegistry.getEnforcing(...): 'RNGoogleMobileAdsModule' could not be found. Verify that a module by this name is registered in the native binary., js engine: hermes
at node_modules\react-native\Libraries\Core\ExceptionsManager.js:null in reportException
at node_modules\react-native\Libraries\Core\ExceptionsManager.js:null in handleException
at node_modules\react-native\Libraries\Core\setUpErrorHandling.js:null in handleError
at node_modules\expo\build\errors\ExpoErrorManager.js:null in createErrorHandler
at node_modules\expo\build\errors\ExpoErrorManager.js:null in <anonymous>
at node_modules\@react-native\js-polyfills\error-guard.js:null in ErrorUtils.applyWithGuard
at node_modules\metro-runtime\src\polyfills\require.js:null in guardedLoadModule
at http://192.168.29.76:19000/index.bundle?platform=android&dev=true&hot=false&strict=false&minify=false:null in metroRequire
at http://192.168.29.76:19000/index.bundle?platform=android&dev=true&hot=false&strict=false&minify=false:null in global

Solution

  • I have encountered the same error and the problem was using expo go to run my app. What you must do is after building your app using eas build, you must download your built app from eas and then install it on your device or emulator. then run your dev server from vs code and run your downloaded app. please refer to this from youtube or here is the same video from expo doc if you want to read about it further. I hope this helps :)

    after you do this fix you will run in to another error which you need to downgrade the installed node version to the current LTS version which at the time of this answer it is 18.17.0. to follow this fix please look at this