2

我已经在我的应用程序中设置了 Flurry 广告,而且大多数时候,它们的效果都很好。我的游戏有几个小游戏,在每个小游戏结束时,我都会展示一个广告。

但是,有时广告不会出现,让用户停留在游戏的结束屏幕上。我无法弄清楚每次都会发生这种情况的用例,而似乎是随机发生的。

一旦广告未能出现,双击主页按钮(即调出应用程序切换器菜单)具有关闭广告并返回我的游戏主屏幕的效果。所以就好像广告在那里,但用户看不到它(或单击 x 将其关闭)。

这种情况发生一次后,每次都会发生,即应用程序不会返回到广告工作的状态,除非我完全重新启动应用程序(双击主页按钮等)。

我从我的用户那里收到很多关于应用程序在每次小游戏后“崩溃”的报告,而实际发生的是广告没有出现。

下面是我初始化和显示广告的代码。方法 [showFullScreenAd] 每次都被成功调用,并且我有来自 delegates 方法的输出语句来确认广告已成功检索。

- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
#ifdef ADVERTISING
if (![[NSUserDefaults standardUserDefaults] boolForKey:kIsProUpgradePurchased]) {
    DLog(@"Fetching ads for hook %@", kAdHookInterstitial);
    [FlurryAds fetchAdForSpace:kAdHookInterstitial
                         frame:self.view.frame
                          size:FULLSCREEN];
    [FlurryAds setAdDelegate:self];
}
#endif
}

-(void) viewWillDisappear:(BOOL)animated {

#ifdef ADVERTISING
DLog(@"REMOVING ADS FROM SPACE: %@", kAdHookInterstitial);
if (![[NSUserDefaults standardUserDefaults] boolForKey:kIsProUpgradePurchased]) {
    [FlurryAds removeAdFromSpace:kAdHookInterstitial];
    [FlurryAds setAdDelegate:nil];
}
#endif

- (void)showFullScreenAd {
#ifdef ADVERTISING
if (![[NSUserDefaults standardUserDefaults] boolForKey:kIsProUpgradePurchased]) {
    if ([FlurryAds adReadyForSpace:kAdHookInterstitial]) {
        [FlurryAds displayAdForSpace:kAdHookInterstitial
                              onView:self.view];
    }
    else {
        [self.navigationController popToRootViewControllerAnimated:YES]; 
    }
}
#else
[self.navigationController popToRootViewControllerAnimated:YES];
#endif
}
4

1 回答 1

1

您希望在启动任何广告活动之前设置广告委托。否则,可能会向您的委托转发有用(失败)消息的 SDK 将无法执行此操作。

在哪里/如何被showFullScreenAd称为?该方法似乎是合理的,因为如果广告不可用,则弹出控制器(假设您的根视图控制器在这种情况下是您想要的位置)。

您还可以实现FlurryAdDelegate在广告成功获取时提醒您的方法,并将其用于您的显示功能。

由于对广告服务器的提取可能会失败,因此实施该 FlurryAdDelegate#sapceDidFailToReceiveAd:error:方法通常是谨慎的。根据您希望在集成中使用广告的方式,您可能希望在此处尝试另一个网络请求。

http://support.flurry.com/index.php?title=Publisher/Code/Doc

于 2013-03-07T22:35:31.453 回答