【问题标题】:Has the rewarded ad been watched in React Native是否在 React Native 中观看过奖励广告
【发布时间】:2020-08-09 09:44:07
【问题描述】:

我在我的 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
  }

Button.js

import 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;

【问题讨论】:

    标签: javascript firebase react-native admob


    【解决方案1】:

    我认为有更好的解决方案,但我在未加载广告单元的情况下使用简单的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。如果用户观看了所有广告则为真,如果他跳过此值为假。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多