奖励广告在React Native上观看了吗



我在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;

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

最新更新