gpt4 book ai didi

ios - Admob 奖励广告不适用于 iOS 上的 Expo App

转载 作者:行者123 更新时间:2023-12-04 03:56:17 26 4
gpt4 key购买 nike

在 App.js 上,我已将 AdMobRewarded 初始化如下:

if (Platform.OS === 'ios') {
AdMobRewarded.setAdUnitID('ca-app-pub-xxx/xxx');
} else {
AdMobRewarded.setAdUnitID('ca-app-pub-xxx/xxx');
}

这是类:

export default class App extends React.Component {
state = {
fontsLoaded: false,
};

render() {
const { fontsLoaded } = this.state;
if (!fontsLoaded) {
return (
<AppLoading
startAsync={fetchFonts}
onFinish={() => this.setState({ fontsLoaded: true })}
/>
);
}
return (
<Provider store={store}>
<AppContainer
ref={navigatorRef => {
NavigationService.setTopLevelNavigator(navigatorRef);
}}
/>
<CommonComponents />
</Provider>
);
}
}

我在 CommonComponents 中放置了 AdMobRewarded 的监听器:

useEffect(() => {
AdMobRewarded.addEventListener('rewardedVideoDidRewardUser', () => {
setState({
hintModalVisible: true,
adIsLoading: false,
mainMenuVisible: false,
});
});

return () => {
AdMobRewarded.removeAllListeners();
};
}, []);

setState其实不是React setState,是我实现的redux action:

const setStateAction = (obj, sceneName) => {
const type = sceneName ? `${sceneName}_SET_STATE` : 'SET_STATE';
return { ...obj, type };
};

没有 rewardedVideoDidRewardUser 监听器,调用 setState 确实会打开 Modal,一切都很好。

hintModalVisible 用于 Modal isVisible 属性,它打开和关闭 Modal。

在 Android 上一切都按预期工作,但在 iOS 上有一个奇怪的行为。广告显示一秒钟后自动关闭,提示模式不会打开。

这是请求和显示广告的函数。它存在于应用程序的所有屏幕中:

showHint = async () => {
const { setState } = this.props;
try {
setState({
mainMenuVisible: false,
});
await AdMobRewarded.requestAdAsync();
await AdMobRewarded.showAdAsync();
} catch (e) {
setState({
hintModalVisible: true,
mainMenuVisible: false,
});
}
};

这是一个开源项目,因此您可以使用代码 here

最佳答案

问题出在 React Native Modal 上。

setState({
hintModalVisible: true,
adIsLoading: false,
mainMenuVisible: false,
});

此代码块应该关闭主菜单模式并打开提示模式。但似乎在 IOS 上你不能同时执行此操作。所以这就是我的处理方式。

useEffect(() => {
AdMobRewarded.addEventListener('rewardedVideoDidRewardUser', () => {
setTimeout(() => {
setState({
hintModalVisible: true,
});
}, 1000);
});

return () => {
AdMobRewarded.removeAllListeners();
};
}, []);

并在广告请求功能中关闭主菜单模式:

const requestHint = useCallback(async () => {
try {
setState({
mainMenuVisible: false,
});
await AdMobRewarded.requestAdAsync();
await AdMobRewarded.showAdAsync();
} catch (e) {
setState({
mainMenuVisible: false,
});
setTimeout(() => {
setState({
hintModalVisible: true,
});
}, 500);
}
}, [setState, hintModalVisible]);

所以这与 Admob 奖励无关。它更像是一个 React Native Modal 错误。 https://github.com/react-native-community/react-native-modal/issues/192

关于ios - Admob 奖励广告不适用于 iOS 上的 Expo App,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63846158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com