こんにちは!C.Cです。

みなさんEAS EXPOでreact-native-google-mobile-adsライブラリを用いて広告を表示させたいのに

'RNGoogleMobileAdsModule' could not be found.というエラーが出て困ってませんか?

この記事ではエラーの意味と解決方を解説していきます。

この記事を読んでわかること
  • 'RNGoogleMobileAdsModule' could not be found.のエラーが出る理由がわかる
  • 'RNGoogleMobileAdsModule' could not be found.のエラーを解決できる
スポンサーリンク

エラーの意味と理由

エラーの理由はGithubのissueを参考にさせていただきました。一部抜粋してGoogle翻訳にかけてます。

React-native-google-mobile-ads には、expo go でサポートされていないカスタム ネイティブ コードが含まれています。カスタム ネイティブ コードを完全にサポートする expo dev クライアントに移行することもできます。

https://github.com/invertase/react-native-google-mobile-ads/issues/437#issuecomment-1694713620

stackoverflowにあった質問に対する回答のほうがわかりやすいです

同じエラーが発生しました。問題は、expo go を使用してアプリを実行することでした。 eas ビルドを使用してアプリをビルドした後、 eas からビルドしたアプリをダウンロードし、デバイスまたはエミュレーターにインストールする必要があります。次に、vs code から開発サーバーを実行し、ダウンロードしたアプリを実行します。 YouTube のこちら、または expo のこちら を参照してください。さらに詳しく読みたい場合は、ドキュメントを参照してください。これがお役に立てば幸いです 🙂

https://stackoverflow.com/questions/76793698/invariant-violation-turbomoduleregistry-getenforcing-rngooglemobileadsmo

つまり、Expo Goのアプリを使用して開発を行っている限りこのエラーが出てきてしまうということです。

なのでExpo Goを使用せずに開発をしなければなりません。

Expo Goアプリを使うとエラーが出る!
EXPO GOのアプリは使っちゃだめ

水色の枠に囲まれたExpo Goアプリをつかうと'RNGoogleMobileAdsModule' could not be found.のエラーがでてしまうので黄緑枠にあるように別途開発用のアプリをインストールする必要があります

スポンサーリンク

react-native-google-mobile-ads をインストールしてアプリに配置する

まずはエラー対処の前に広告を配置します。

インストール

npm install react-native-google-mobile-ads
yarn add react-native-google-mobile-ads

公式HPではyarnで紹介されていますが、私はnpmでパッケージ管理を行っていたのでnpmを使用しました。

app.jsonを編集する

app.jsonに"react-native-google-mobile-ads"以下を追加します。

"android_app_id"および"ios_app_id"の"ca-app-pub-xxxxxxxx~xxxxxxxx"にはGoogle admob から

アプリIDをコピペしてください。

注意!

"android_app_id"および"ios_app_id"に有効なアプリIDが入っていないとBuild後起動したときにアプリがクラッシュします。まだ、広告を作成していない場合には該当の行を削除してください。

{
  "expo": {
    "name": "",
    "slug": "",
    "version": "",
    "orientation": "",
    "icon": "",
    "userInterfaceStyle": "",
    "splash": {
      "image": "",
      "resizeMode": "",
      "backgroundColor": ""
    }, 
  },
  "react-native-google-mobile-ads": {
    "android_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx",
    "ios_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx",
    "delay_app_measurement_init": true,
    "user_tracking_usage_description": "許可することで、より関連性の高い広告を表示することができるようになります。"
  }
}

配置

いろいろなやり方があると思いますが一例を紹介します。

16行目の"ca-app-pub-xxxxxxxx/xxxxxxxx"の部分はGoogle admob からバナーの広告ユニットの"広告ユニットID"をコピペしてください

import React from "react";
import mobileAds ,{
  BannerAd,
  BannerAdSize,
  TestIds,
}from "react-native-google-mobile-ads";

// 初期化
mobileAds()
  .initialize()
  .then((adapterStatuses) => {});

// ユニットID
const adBannerUnitId = __DEV__
  ? TestIds.BANNER
  : "ca-app-pub-xxxxxxxx/xxxxxxxx";

export function AdmobFullBanner() {
  return (
    <BannerAd
      unitId={adBannerUnitId}
      size={BannerAdSize.FULL_BANNER}
      requestOptions={{
        requestNonPersonalizedAdsOnly: true,
      }}
    />
  );
}

あとは必要なページでコンポーネントを呼び出すだけ!

import React from "react";
import { AdmobFullBanner } from "../Admob";

export default function App() {
  return (
    //...
    <AdmobFullBanner />
  );
}
スポンサーリンク

エラーの対処法

この動画を見れば全て解決できる

'RNGoogleMobileAdsModule' could not be found.のエラーを回避するためには、繰り返しになりますが開発用のアプリをBuildしてシミュレーターもしくはデバイスにインストールする必要があります。

開発用のアプリのインストール方法は上記の動画にてiOS,Androidともに英語で詳しく解説されてます!

ですが、動画を見るのがめんどくさい方のためにこの記事でも解説して行きたいと思います。

eas-cliをインストールする

npm install -g eas-cli

すでにインストールしたことのある方も一応やっておいたほうが良いです。

expo-dev-clientをインストールする

npx expo install expo-dev-client

開発用アプリを使用するためには"expo-dev-client"が必要になりますのでインストールを忘れないようにしましょう

eas.jsonを作成する

EAS ビルド用に iOS または Android プロジェクトを構成するために、次のコマンドを実行します。

eas build:configure

自動でやるかを聞かれるのでYesを選びます。

すると以下のような選択肢が現れます。今回は「All」を選択します

eas.jsonを編集する

{
  "build": {
    "development": {
      "developmentClient": true,
      "distribution": "internal",
    },
    "preview": {
      "distribution": "internal"
    },
    "production": {}
    "development-simulator": {
      "developmentClient": true,
      "distribution": "internal",
      "ios": {
        "simulator": true
      }
  }
}

上記の"development-simulator"部分をeas.jsonに追記します。

iOSシミュレーター

eas build --profile development-simulator --platform ios

上記のコマンドでiOSシミュレーター用に開発用アプリをBuildします。

Buildが終了するとターミナルにiOSシミュレーターにインストールするように求められるので、

「Y」を押してインストールします。

iOSデバイス

注意

iOSデバイスに開発用アプリをインストールするにはApple Developer memvershipに登録が必要です!

eas device:create

上記のコマンドで開発するiOSデバイスをアドホック プロビジョニング プロファイルに登録します。

eas build --profile development --platform ios

さらに上記のコマンドでiOSデバイス用に開発用アプリをBuildします。

Buildが終了するとターミナルにQRコードが表示されるのでiOSデバイスで読み取るとインストールがはじまります。

Androidエミュレーター & デバイス

eas build --profile development --platform android

上記のコマンドでAndroid用に開発用アプリをBuildします。

Androidエミュレーター

Build終了時にターミナルにAndroidエミュレーターにインストールするように求められるので、

「Y」を押してインストールします。

Androidデバイス

Build終了時にターミナルに表示されるURLをAndorodデバイスで開くとインストールできます。

開発サーバーを立ち上げるときの注意点

npx expo start --dev-client
yarn start --dev-client

開発サーバーを立ち上げる場合は必ず上記のコマンドを使用してください。

お尻に"--dev-client"をつけることでインストールした開発用アプリを使用することができます。

"npx expo start"のみだとExpo Goアプリで起動してしまうため、'RNGoogleMobileAdsModule' could not be found.のエラーが再度発生してしまいます。

最後に

私は"react-native-google-mobile-ads"のインストール前に開発用アプリをBuildしてしまったり、

"--dev-client"をつけずに開発サーバーを立ち上げてしまうなどを繰り返したため、

一月のBuild上限回数15回を超えてしまいました😅

上限回数を増やすために課金まではしたくないので結局2週間ほどアプリ開発ができない状況になってしまいました...😭

皆様はそうならないよう、解決の一助になれば幸いです!

参考サイト

https://stackoverflow.com/questions/76793698/invariant-violation-turbomoduleregistry-getenforcing-rngooglemobileadsmo

https://github.com/invertase/react-native-google-mobile-ads/issues/437

https://docs.page/invertase/react-native-google-mobile-ads

Twitterでフォローしよう

おすすめの記事