对于iOS,admob附带isReady
字段,以确定广告是否已准备好展示。现在我正在将admob集成到我在cocos2d-x的Android游戏中,我正在关注此官方指南:https://firebase.google.com/docs/admob/cpp/quick-start#set_up_an_interstitial_ad
if (interstitial_ad->LoadAdLastResult().status() ==
firebase::kFutureStatusComplete &&
interstitial_ad->LoadAdLastResult().error() ==
firebase::admob::kAdMobErrorNone) {
interstitial_ad->Show();
}
该条件与iOS isReady
API略有不同。在展示广告后,对于iOS,isReady
将为false。但即使展示了广告,LoadAdLastResult
仍然是Complete
。我需要与isReady
类似的内容来决定是否需要申请新广告。我怎样才能做到这一点?
答案 0 :(得分:1)
不要使用bar(/* hints */)
// 1/2 bar(args_0: number, args_1: string): void
// 2/2 bar(args_0: Record<string, any>, args_1: number): void
。最新的 Admob 更新删除了它实际上是一个糟糕的 API(适用于 iOS 的 v8.0)。
原因是 isReady 很容易导致竞争条件并导致状态不佳。更好的方法是在广告获取回调成功后才保留对广告实例的引用(这是 v8.0 API 中唯一的方法)
答案 1 :(得分:0)
你应该自己实现这个逻辑。例如:变量(interstitialAdShown),表示您需要申请新广告
// Set up the show interstitial ad button.
showInterstitialAdBtn = createButton(false, kShowInterstitialText);
showInterstitialAdBtn->addTouchEventListener(
[&](Ref* sender, cocos2d::ui::Widget::TouchEventType type) {
cocos2d::ui::Button* button = static_cast<cocos2d::ui::Button*>(sender);
switch (type) {
case cocos2d::ui::Widget::TouchEventType::ENDED:
// The show intersitial button is enabled in the update() method
// when the interstial ad has successfully loaded. Here the show
// interstitial button has been pressed by the user, so we disable
// the button and display the interstitial ad to the user.
button->setEnabled(false);
logMessage("Showing the interstitial ad.");
interstitialAd->Show();
// Invalidate all Futures and enable loadInterstitialAdBtn.
interstitialAdShown = true;
break;
default:
break;
}
});
this->addChild(showInterstitialAdBtn);
您可以在此处查看完整示例 - https://github.com/firebase/cocos2dx-cpp-sample/blob/master/admob/Classes/FirebaseAdMobScene.cpp#L441
来自Google的cocos2d-x的其他firebase示例 - https://github.com/firebase/cocos2dx-cpp-sample
答案 2 :(得分:0)
据我所知,对于IOS和Android,在插页式加载方面的行为非常相似。
在Android中,您可以使用此功能检查插页式广告是否已准备就绪:
?
Android的良好做法是在onAdClosed事件中请求新的插页式广告