React-Native-Admob もインストールされている React-Native アプリがあります。アプリ内のバナーは問題なく表示されます。ただし、インタースティシャル アプリやリワード アプリを表示するのに問題があります。
リワード広告を表示したいので、これから始めます。ユーザーは無料で写真や情報をアプリにアップロードできます。レポートボタンをクリックするとモーダルが開き、有料にするか無料にするかを尋ねられます。無料を選択すると、モーダルが閉じて、リワード アプリが表示されます。これを表示すると、アップロードが開始されます。
サンプルアプリによると、これらをComponentdidMountに配置する必要があるため、useEffectフックに配置することにしました。
useEffect(() => {
AdMobRewarded.setTestDevices([AdMobRewarded.simulatorId]);
AdMobRewarded.setAdUnitID('ca-app-pub-3940256099942544/5224354917');
AdMobRewarded.addEventListener('rewarded', reward =>
console.log('AdMobRewarded => rewarded', reward),
);
AdMobRewarded.addEventListener('adLoaded', () =>
console.log('AdMobRewarded => adLoaded'),
);
AdMobRewarded.addEventListener('adFailedToLoad', error =>
console.warn(error),
);
AdMobRewarded.addEventListener('adOpened', () =>
console.log('AdMobRewarded => adOpened'),
);
AdMobRewarded.addEventListener('videoStarted', () =>
console.log('AdMobRewarded => videoStarted'),
);
AdMobRewarded.addEventListener('adClosed', () => {
console.log('AdMobRewarded => adClosed');
AdMobRewarded.requestAd().catch(error => console.warn(error));
});
AdMobRewarded.addEventListener('adLeftApplication', () =>
console.log('AdMobRewarded => adLeftApplication'),
);
AdMobRewarded.requestAd().catch(error => console.warn(error));
}, [])
そのため、モーダルの無料ボタンをクリックすると、addUsingAdHandler が呼び出されます。
const addUsingAdHandler = () => {
setIsAddMode(false)
console.log('Rewared video is shown')
AdMobRewarded.showAd().catch(error => console.warn(error));
ただし、このページを表示すると、すぐに警告が表示されます。
{"framesToPop":1, "code": "E_AD_FAILED_TO_LOAD","nativeStackIOS etc. etc.
Error: Cannot send request while another ad is being presented. Another rewarded ad may be requested after the current ad closes.
at createErrorFromErrorData (utils.js:6)
at RNAdMobRewarded.js:30
at RCTDeviceEventEmitter.emit (EventEmitter.js:189)
at MessageQueue.__callFunction (MessageQueue.js:366)
at MessageQueue.js:106
at MessageQueue.__guard (MessageQueue.js:314)
at MessageQueue.callFunctionReturnFlushedQueue (MessageQueue.js:105)
at RNDebuggerWorker.js:2
この警告を無視して無料ボタンをクリックすると、モーダルは期待どおりに閉じられ、コンソール ログにも報酬ビデオが表示されます。ただし、ログの後、エラー: 広告を表示する準備ができていません。
これは、オンラインのアカウント/アプリでリワード広告を有効にせずに、Admob のテスト ID を使用していたためだと思いました。そこで、数日前にアクティブ化されたインタースティシャル広告を受け取りました。これは警告なしで機能します。ただし、モーダルを閉じて広告を表示する必要がある場合、何も起こりませんでした。
Admob をリワードで動作させる方法を教えてくれる人はいますか? リクエストがあれば、コードをもう一度インタースティシャルに変更してテストしたり、コードを表示したりできます。React-native-cli: 2.0.1 React-native: 0.59.10 React-native-admob: 2.0.0-beta.6