ユーザーに広告を表示するためAdMob モジュールを使用します。すべての広告は Google AdMob ネットワーク経由で配信されるため、Google AdMob アカウントが必要になります。
開発環境(Expo Bare)
- “typescript”: “^5.2.2”
- “expo”: “~49.0.13”,
- “react”: “18.2.0”,
- “react-native”: “0.72.6”,
- “expo-router”: “^2.0.0”,
- “react-native-paper”: “^5.10.6”,
- “react-native-google-mobile-ads”: “^12.3.0”,
セットアップ
React Native Google Mobile Ads
パッケージをインストールする
$ yarn add react-native-google-mobile-ads
iOS static frameworksを設定する
// ios/Podfile を編集する ... target 'myproject' do use_expo_modules! config = use_native_modules! // <--- ⬇︎を追加 ---> // use_frameworks! :linkage => :static $RNFirebaseAsStaticFramework = true $RNGoogleMobileAdsAsStaticFramework = true // <--- ⬆︎を追加 ---> // ...
Google AdMob
自身の Google AdMob account でログインしてiOS/Androidアプリを追加する
🥕 Google AdMob > アプリ > アプリを追加
🥕 Google AdMob > iOS or Android アプリを選択 > アプリの設定 > アプリの情報 からアプリ ID を確認し、app.json フィアルに追加します。
// <project-root>/app.json
{
"react-native-google-mobile-ads": {
"android_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx",
"ios_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx"
}
}
プロジェクトをリビルドする
# For iOS npx pod-install npx react-native run-ios # For Android npx react-native run-android
Outbound requestsを設定する
// app/_layout.tsx
import mobileAds, { MaxAdContentRating } from 'react-native-google-mobile-ads';
export default function RootLayout() {
const [requestedAds, setRequestedAds] = useState<boolean>(false);
...
useEffect(() => {
mobileAds()
.setRequestConfiguration({
maxAdContentRating: MaxAdContentRating.PG,
tagForChildDirectedTreatment: true,
tagForUnderAgeOfConsent: true,
testDeviceIdentifiers: ['EMULATOR'],
})
.then(() => {
console.log('🚀AdMob: Request config successfully set!:');
setRequestedAds(true);
});
}, []);
Google Mobile Ads SDKを初期化する
// app/_layout.tsx
。。。
useEffect(() => {
if (requestedAds) {
mobileAds()
.initialize()
.then(_adapterStatuses => {
console.log('🚀AdMob: Initialization complete!:');
});
}
}, [requestedAds]);
。。。
App Tracking Transparency (iOS)を設定する
Apple は、IDFA にアクセスするための App Tracking Transparency 認証リクエストを表示することをアプリに要求しています (パーソナライズされた広告を使用するか、パーソナライズされていない広告を使用するかはユーザーに選択を委ねます)。 プロジェクトの app.json または app.config.js ファイル内で、 user_tracking_usage_description を使用して使用方法を説明する必要があります。
{
"react-native-google-mobile-ads": {
"android_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx",
"ios_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx",
"user_tracking_usage_description": "This identifier will be used to deliver personalized ads to you."
}
}
// app/_layout.tsx
。。。
useEffect(() => {
(async () => {
const {status} = await requestTrackingPermissionsAsync();
if (status === PermissionStatus.GRANTED) {
console.log(
'🚀AdMob: User permission to track data is',
PermissionStatus.GRANTED,
);
}
})();
}, []);
。。。
※ 詳細
SKAdNetworkを活性化する(iOS)
Google Mobile Ads SDK は、Apple の SKAdNetwork を使用したコンバージョン トラッキングをサポートしています。これにより、Google および参加するサードパーティ購入者は、IDFA が利用できない場合でもアプリのインストールを関連付けることができます。 プロジェクトの app.json ファイル内に、推奨される SKAdNetwork 識別子 を追加します。
// <project-root>/app.json
{
"react-native-google-mobile-ads": {
"android_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx",
"ios_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx",
"sk_ad_network_items": [
"cstr6suwn9.skadnetwork",
"4fzdc2evr5.skadnetwork",
"4pfyvq9l8r.skadnetwork",
"2fnua5tdw4.skadnetwork",
"ydx93a7ass.skadnetwork",
"5a6flpkh64.skadnetwork",
"p78axxw29g.skadnetwork",
"v72qych5uu.skadnetwork",
"ludvb6z3bs.skadnetwork",
"cp8zw746q7.skadnetwork",
"3sh42y64q3.skadnetwork",
"c6k4g5qg8m.skadnetwork",
"s39g8k73mm.skadnetwork",
"3qy4746246.skadnetwork",
"f38h382jlk.skadnetwork",
"hs6bdukanm.skadnetwork",
"v4nxqhlyqp.skadnetwork",
"wzmmz9fp6w.skadnetwork",
"yclnxrl5pm.skadnetwork",
"t38b2kh725.skadnetwork",
"7ug5zh24hu.skadnetwork",
"gta9lk7p23.skadnetwork",
"vutu7akeur.skadnetwork",
"y5ghdn5j9k.skadnetwork",
"n6fk4nfna4.skadnetwork",
"v9wttpbfk9.skadnetwork",
"n38lu8286q.skadnetwork",
"47vhws6wlr.skadnetwork",
"kbd757ywx3.skadnetwork",
"9t245vhmpl.skadnetwork",
"eh6m2bh4zr.skadnetwork",
"a2p9lx4jpn.skadnetwork",
"22mmun2rn5.skadnetwork",
"4468km3ulz.skadnetwork",
"2u9pt9hc89.skadnetwork",
"8s468mfl3y.skadnetwork",
"klf5c3l5u5.skadnetwork",
"ppxm28t8ap.skadnetwork",
"ecpz2srf59.skadnetwork",
"uw77j35x4d.skadnetwork",
"pwa73g5rt2.skadnetwork",
"mlmmfzh3r3.skadnetwork",
"578prtvx9j.skadnetwork",
"4dzt52r2t5.skadnetwork",
"e5fvkxwrpn.skadnetwork",
"8c4e2ghe7u.skadnetwork",
"zq492l623r.skadnetwork",
"3rd42ekr43.skadnetwork",
"3qcr597p9d.skadnetwork"
]
}
}
広告を表示する
バナー広告は、既存のアプリケーション内に統合できる部分的な広告です。 インタースティシャル広告やリワード広告とは異なり、バナーはアプリケーションの限られた領域のみを占有し、その領域内に広告を表示します。 これにより、中断を伴う操作を行わずに広告を統合できます。
このモジュールは BannerAd コンポーネントを公開します。 バナーを表示するには、unitId と size プロパティが必要です。
🥕 adUnitId は Google AdMob > iOS or Androidアプリを選択 > 広告ユニット > 広告ユニットを追加 で追加したバナー広告ユニットの 広告ユニット ID です。
// app/(tabs)/index.tsx
import React from 'react';
import { BannerAd, BannerAdSize, TestIds } from 'react-native-google-mobile-ads';
const adUnitId = __DEV__ ? TestIds.ADAPTIVE_BANNER : 'ca-app-pub-xxxxxxxxxxxxx/yyyyyyyyyyyyyy';
function App() {
return (
<BannerAd
unitId={adUnitId}
size={BannerAdSize.ANCHORED_ADAPTIVE_BANNER}
/>
);
}
バナー広告の実装ガイドラインを守る
🔥 バナー広告の実装ガイドライン(英語版)の各項目ごとに Click to view an example テキストをクリックすると推奨方法を図で確認できます!
- ① インタラクティブ要素から広告を分離する!
- ② 広告はアプリのコンテンツから境界線で区切られるように!
- ③ バナー広告に固定スペースを割り当てる!
- ④ 複数のデバイスの画面サイズに対応するアダプティブ バナーを実装する!
Android (Tabbar/No-Tabbar): ①と③を適用!


iOS (Tabbar/No-Tabbar): ①と③を適用!


リリースする
※上記の詳細は以下のアプリに実装されています。



コメント