iAd тестирование ADBannerViewDelegate bannerViewActionDidFinish:
Я хотел бы попробовать проверить bannerViewActionDidFinish:
после завершения клика.
Мой опыт показывает, что при тестировании с поддельной рекламой в отладочной сборке или на симуляторе. кто-нибудь был в состоянии успешно проверить это?
bannerViewActionShouldBegin:willLeaveApplication:
всегда вызывается с willLeave == NO
и когда вы нажимаете на тестовый iAd, появляется подтверждение о том, что iAd настроен правильно... но после закрытия этого окна, bannerViewActionDidFinish:
никогда не называется.
дополнительная информация: все баннеры iAd правильно отображаются и исчезают при тестировании, и они находятся в сборке дистрибутива магазина приложений и функционируют очень хорошо… вплоть до того момента, когда пользователь возвращается из операции перехода по клику. я хочу использовать bannerViewActionDidFinish:
для этого, но я не вижу способа проверить это с поддельной рекламой.
вот соответствующий код (надеюсь, всем, кто помогает, не нужно видеть код макета; похоже, он всегда поступает правильно с точки зрения представления или скрытия баннера iAd в зависимости от того, загружено ли объявление в баннере или нет, или от того, генерируется ошибка или нет, а также совпадает с соответствующим выводом журнала; единственное, чего не происходит, это bannerViewActionDidFinish:
никогда не вызывается во время тестирования:
#pragma mark - ADBannerViewDelegate implementation
#pragma mark @optional
#if __IPHONE_OS_VERSION_MAX_ALLOWED > __IPHONE_4_3
// This method is invoked when the banner has confirmation that an ad will be presented, but
// before the ad has loaded resources necessary for presentation.
- (void)bannerViewWillLoadAd:(ADBannerView *)banner {
if (banner == self.adBannerView)
#if DEBUG
NSLog(@"(%@)bannerViewWillLoadAd", self.navigationItem.title),
#endif
banner.hidden = NO;
#if DEBUG
else
NSLog(@"== banner that will load ad is different than this view's banner ==");
#endif
}
#endif
// This method is invoked each time a banner loads a new advertisement. Once a banner has
// loaded an ad, it will display that ad until another ad is available. The delegate might
// implement this method if it wished to defer placing the banner in a view hierarchy until the
// banner has content to display.
- (void)bannerViewDidLoadAd:(ADBannerView*)banner {
#if DEBUG
NSLog(@"(%@)bannerViewDidLoadAd: bannerLoaded==%d",
self.navigationItem.title, banner.isBannerLoaded ? 1 : 0);
#endif
if (self.view.window)
[UIView animateWithDuration:0.3 animations:^{
[self.view setNeedsLayout];
[self.view layoutIfNeeded];
}];
#if DEBUG
else
NSLog(@"(%@)bannerViewDidLoadAd: window not visible, skipping …",
self.navigationItem.title);
#endif
}
// This method will be invoked when an error has occurred attempting to get advertisement content.
// The ADError enum lists the possible error codes.
- (void)bannerView:(ADBannerView*)banner didFailToReceiveAdWithError:(NSError *)error {
#if DEBUG
NSLog(@"(%@)%@: bannerLoaded==%d",
self.navigationItem.title, error, banner.isBannerLoaded ? 1 : 0);
#endif
if (self.view.window)
{
banner.hidden = !banner.isBannerLoaded; // can't say NO, in case banner loaded w/error!
[UIView animateWithDuration:0.3 animations:^{
[self.view setNeedsLayout];
[self.view layoutIfNeeded];
}];
}
#if DEBUG
else
NSLog(@"(%@)%s window not visible, skipping…",
self.navigationItem.title, __FUNCTION__);
#endif
}
// This message will be sent when the user taps on the banner and some action is to be taken.
// Actions either display full screen content in a modal session or take the user to a different
// application. The delegate may return NO to block the action from taking place, but this
// should be avoided if possible because most advertisements pay significantly more when
// the action takes place and, over the longer term, repeatedly blocking actions will
// decrease the ad inventory available to the application. Applications may wish to pause video,
// audio, or other animated content while the advertisement's action executes.
- (BOOL)bannerViewActionShouldBegin:(ADBannerView*)banner willLeaveApplication:(BOOL)willLeave {
return YES;
}
// This message is sent when a modal action has completed and control is returned to the
// application. Games, media playback, and other activities that were paused in response to the
// beginning of the action should resume at this point.
- (void)bannerViewActionDidFinish:(ADBannerView *)banner {
// all new code, to be tested
[self configureView];
[UIView animateWithDuration:0.3 animations:^{
[self.view setNeedsLayout];
[self.view layoutIfNeeded];
}];
}