使用@react-native-firebase/admob时激励广告结束后能否上层展示Alert或自定义View
技术解答
是可以实现该需求的,核心需要注意触发时机和窗口层级的配置:
- 优先确保弹窗/自定义View的触发时机为激励广告完全销毁关闭后,需监听
@react-native-firebase/admob提供的onAdDismissedFullScreenContent(对应v11以下版本为RewardedAdEventType.DISMISSED)事件回调,不要在onUserEarnedReward回调中直接触发UI操作:此时广告的Activity还未完全销毁,直接触发弹窗会被广告层覆盖,或出现窗口异常问题。 - 若使用React Native自带的
Alert组件无需额外配置,在上述正确的回调中触发即可正常展示在应用最上层。 - 若需展示Android原生Alert或自定义View:
- 原生Alert默认窗口层级已足够覆盖普通应用窗口,只要当前应用处于前台即可正常展示
- 若为应用内使用的自定义View,直接挂载到当前活跃Activity的根布局即可,无需额外申请权限;如果需要全局悬浮展示,才需要申请
SYSTEM_ALERT_WINDOW悬浮窗权限。
- 额外适配注意:部分国产Android定制ROM会默认关闭应用的弹窗权限,出现无法展示的情况时可以引导用户检查应用的弹窗权限是否开启。
参考代码示例
import { Alert } from 'react-native'; import { RewardedAd, RewardedAdEventType, TestIds } from '@react-native-firebase/admob'; // 初始化激励广告实例 const rewardedAd = RewardedAd.createForAdRequest(TestIds.REWARDED, { requestNonPersonalizedAdsOnly: true, }); // 绑定广告事件监听 rewardedAd.onAdEvent((type, error, reward) => { // 处理奖励发放逻辑,不做UI操作 if (type === RewardedAdEventType.EARNED_REWARD) { console.log('用户已获得奖励', reward); } // 广告完全关闭后再触发UI展示 if (type === RewardedAdEventType.DISMISSED) { Alert.alert('提示', '您已成功领取观看广告的奖励'); // 如需调用原生端展示自定义View,可在此处触发原生模块方法 } });
内容的提问来源于stack exchange,提问作者Vadim Bondarenko
相关产品推荐
相关产品推荐

