多次显示AdMob插页式广告如何实现?

5
我有一个小游戏应用程序,其中有一个故事板(storyboard),里面创建了像开始菜单-游戏区域-分数这样的场景。我已经添加了AdMob横幅广告视图和插页式广告。我的横幅广告视图工作正常,但我的插页式广告只能工作一次。
我在viewdidload中加载我的插页式广告,并在调用游戏会话结束的函数中触发它,它可以运行,但只能运行一次。当用户再次开始游戏并失败时,这次就没有插页式广告(下面是错误信息)。那么该怎么办才能解决问题?我希望我的游戏可以在需要时多次显示插页式广告。
错误消息: 请求错误:不会发送请求,因为插页式对象已被使用。
头部:
#import "GADBannerView.h"
#import "GADInterstitial.h"
@class GADInterstitial;
@class GADRequest;
////////////code UIviewcontroller//////////
        GADBannerView *bannerView_;
        GADInterstitial *interstitial_;

实现

-(void)viewdidload
{
//////////////////gaming code///////////

interstitial_ = [[GADInterstitial alloc] init];
    interstitial_.delegate = self;

    interstitial_.adUnitID = @"ca-app-pub-6280395701552972/5217388242";
    GADRequest *request = [GADRequest request];
    [interstitial_ loadRequest:request];

}

实现

-(void)failgame
{
//////////////////gaming code///////////

    [interstitial_ presentFromRootViewController:self];

}

在 Google AdMob SDK 页面上,它说插页式广告是一次性使用的对象,所以我百分之百确定这就是问题所在,但是那里没有说明如何调用多个对象,所以只要您指出答案,请不要告诉我去阅读,我已经读了五遍。

插屏广告并非所有人都可以使用。只需检查应用程序是否显示广告即可。对于插屏广告,您需要一些CPC... - GameLoading
3个回答

6

虽然没有人给出答案,但我相信还有其他人遇到了同样的问题,所以对于那些想多次调用插页式广告的人,这里有一个技巧。

将其放入自己的方法中,并从主方法(回复多次)调用该方法。

将插页式广告保留在您的viewdidload(或希望首先触发的位置),因为如果不这样做,则会错过第一次触发,而其他触发仍将正常工作。

完整的代码如下所示。

- (void) callint
{
    int rNumber1 = arc4random() % 45 + 1;
    int rNumber2 = arc4random() % 45 + 1;
    if((rNumber1%2==1) && (rNumber1%1==0))
    {
    [interstitial_ presentFromRootViewController:self];
    interstitial_ = [[GADInterstitial alloc] init];
    interstitial_.delegate = self;
    interstitial_.adUnitID = @"ca-app-pub-6280395701552972/5217388242";
    GADRequest *request = [GADRequest request];
    [interstitial_ loadRequest:request];

    }

}

我在这里加入了随机数生成和if语句,因为我不想让用户每次看到这些插页广告,即使每次调用int时都会触发,但只有4/1的概率才会触发,所以它会在4-5次触发后显示1个插页广告。


谢谢随机生成器很有帮助。可以再解释一下它是如何工作的吗? - resting

4
- (void)viewDidLoad {
  [super viewDidLoad];
  self.interstitial = [self createAndLoadInterstitial];
}

- (GADInterstitial *)createAndLoadInterstitial {
  GADInterstitial *interstitial = [[GADInterstitial alloc] initWithAdUnitID:@"ca-app-pub-3940256099942544/4411468910"];
  interstitial.delegate = self;
 [interstitial loadRequest:[GADRequest request]];
  return interstitial;
}

- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {
  self.interstitial = [self createAndLoadInterstitial];
}

GADInterstitial是一个一次性使用的对象。要请求另一个插页式广告,您需要分配一个新的GADInterstitial对象。

最好的地方是在GADInterstitialDelegate的interstitialDidDismissScreen:方法中分配另一个插页式广告,以便下一个插页式广告在上一个插页式广告关闭时立即开始加载。参考:admob网站链接


0
如果您按照Admob推荐的代码,如Sonu VR所示,您将不会遇到任何问题。只需注意,尽管使用最佳实践的Admob代码仍会出现日志错误,但这是一个误导。这可能是Admob日志记录中的错误,而不是Admob代码显示广告的错误。您可以通过使用非测试手机,在不同的时间提供不同的广告来进行测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接