是否在 React Native 中观看了奖励广告
Has the rewarded ad been watched in React Native
我在我的 React Native 应用程序中使用 Firebase AdMob,当用户点击特殊按钮时,应该会显示一个奖励广告单元。这个按钮组件和调用广告横幅的功能是在单独的文件中实现的。因此,我的函数需要 return 一个值来显示用户是否观看了完整的广告并获得了奖励。但是我不知道如何在 rewarded.onAdEvent
事件以 type === RewardedAdEventType.EARNED_REWARD
结束后 return 值。有一个调用广告和按钮组件的函数示例:
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;
}
此功能return gotReward
仅在广告关闭后。如果用户观看了所有广告则为真,如果他已跳过则此值为假。
我在我的 React Native 应用程序中使用 Firebase AdMob,当用户点击特殊按钮时,应该会显示一个奖励广告单元。这个按钮组件和调用广告横幅的功能是在单独的文件中实现的。因此,我的函数需要 return 一个值来显示用户是否观看了完整的广告并获得了奖励。但是我不知道如何在 rewarded.onAdEvent
事件以 type === RewardedAdEventType.EARNED_REWARD
结束后 return 值。有一个调用广告和按钮组件的函数示例:
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;
}
此功能return gotReward
仅在广告关闭后。如果用户观看了所有广告则为真,如果他已跳过则此值为假。