为了账号安全,请及时绑定邮箱和手机立即绑定

是否在 React Native 中观看了奖励广告

是否在 React Native 中观看了奖励广告

阿晨1998 2022-12-29 10:26:58
我在我的 React Native 应用程序中使用 Firebase AdMob,当用户点击特殊按钮时,应该会显示一个奖励广告单元。这个按钮组件和调用广告横幅的功能是在单独的文件中实现的。因此,我的函数需要返回一个值,以显示用户是否已观看完整广告并获得奖励。但是我不知道如何在rewarded.onAdEvent事件以 . 结束后返回值type === RewardedAdEventType.EARNED_REWARD。我的函数有一个调用广告和我的按钮组件的示例:Ads.js 片段const showRewarded = () => {    const rewarded = RewardedAd.createForAdRequest(UNIT_ID, {      requestNonPersonalizedAdsOnly: false,    });    const eventListener = rewarded.onAdEvent((type, error, reward) => {      if(type === RewardedAdEventType.LOADED) {        rewarded.show();      }      if(type === RewardedAdEventType.EARNED_REWARD) {        return reward;      }      // The reward should be null if user skiped the ad      return null;     });     rewarded.load();    // Wait for event completion  }按钮.jsimport React from 'react';import {  View,  Text,  TouchableOpacity} from 'react-native';;import { Ads } from '../components';class MyButton extends React.Component {  constructor(props) {    super(props);  }  showAd() {    // Wait while user has not been get a reward (or skiped the ad)    const reward = Ads.showRewarded();    console.log(`The reward is ${reward}`);  }  render() {    return (      <View>      <TouchableOpacity onPress={() => this.showAd()}>        <Text>Show Ad to get a reward</Text>      </TouchableOpacity>      </View>    )  }}export default MyButton;
查看完整描述

1 回答

?
慕桂英546537

TA贡献1848条经验 获得超10个赞

我认为有更好的解决方案,但我是setTimeout在广告单元尚未加载时使用简单的函数完成的。它看起来像这样:


const showRewarded = async () => {

    const rewarded = RewardedAd.createForAdRequest(UNIT_ID, {

      requestNonPersonalizedAdsOnly: false

    });

    var loaded = false;

    var gotReward = false;

    const eventListener = rewarded.onAdEvent((type, error, reward) => {

      if(type === RewardedAdEventType.LOADED) {

        rewarded.show();

        loaded = true;

      }

      else if(type === RewardedAdEventType.EARNED_REWARD) {

        gotReward = true;

      }

      else if(error) {

        console.warn(error);

      }

    }); 

    rewarded.load();

    while(!loaded) {

      await new Promise((resolve, reject) => setTimeout(resolve, 1000));

    }

    return gotReward;

  }

此函数gotReward仅在广告关闭后返回。如果用户观看了所有广告则为真,如果他已跳过则此值为假。


查看完整回答
反对 回复 2022-12-29
  • 1 回答
  • 0 关注
  • 147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号