iAds, показывающие ошибку Ad, были выгружены из этого баннера при переключении между вкладками на UITabBarController
Я впервые внедряю iAds в свое приложение, а само приложение представляет собой простую вкладку с 5 вкладками UITabBarController
где первые 4 вкладки являются UIViewController
с UITableView
встроен и последняя вкладка является UITableViewController
,
Следуя этому руководству: http://www.appcoda.com/ios-iad-introduction/ Я успешно внедрил iAds, и он отображается в приложении и работает через каждый метод делегата.
Я сделал так, чтобы первые 4 вкладки имели iAds, а последняя - нет. Это потому, что последняя вкладка является статической UITableView
и я не могу встроить это в UIViewController
и т. д. Итак, первые 4 вкладки имеют adBannerView
, AdBannerView
добавляется из Storyboard
в это UIViewController
,
вопрос
Во время разработки на реальном устройстве под управлением iOS 8.1.1 (и на другом устройстве под управлением 8.2), когда я на первой вкладке, он показывает iAd Banner без проблем. Когда я переключаюсь на вторую вкладку и возвращаюсь на первую вкладку, происходят две вещи:
1) adBannerView
есть, но само объявление показывается на секунду, а затем снова исчезает. 2) Метод делегата ниже выдает ошибку, как только я покидаю первую вкладку:
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
NSLog(@"Unable to show ads. Error: %@", [error localizedDescription]);
}
NSLog: Unable to show ads. Error: The operation couldn’t be completed. Ad was unloaded from this banner.
Несколько вещей, на которые следует обратить внимание. Если я перейду к 5-й вкладке, которая сама по себе не содержит adBannerView
и вернитесь на первую вкладку, эта проблема не возникает и adBannerView
Само это все еще показывается с рекламой.
Также с использованием NSLogs
Я вижу, что когда я возвращаюсь к первой вкладке со второй вкладки, viewWillAppear
запускается, за которым сразу следует:
- (void)bannerViewWillLoadAd:(ADBannerView *)banner
- (void)bannerViewDidLoadAd:(ADBannerView *)banner
Это означает, что объявление готово к загрузке, но на то, чтобы оно действительно отображалось в adBannerView
, Когда я возвращаюсь к первой вкладке со второй вкладки, adBannerView
есть, но рекламы нет.
Вот некоторый код:
- (void)bannerViewWillLoadAd:(ADBannerView *)banner
{
NSLog(@"AD Banner will load ad");
}
- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
NSLog(@"Ad Banner did load ad");
// We must show the ad banner view when an ad is ready to be displayed.
[UIView animateWithDuration:0.5 animations:^{
self.adBanner.alpha = 1.0;
}];
// self.adBanner.hidden = NO;
}
- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:(BOOL)willLeave
{
NSLog(@"Ad Banner action is about to begin");
return YES;
}
- (void)bannerViewActionDidFinish:(ADBannerView *)banner
{
NSLog(@"Ad Banner action did finish");
}
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
NSLog(@"Unable to show ads. Error: %@", [error localizedDescription]);
// When there are no ads to show, we should hide it:
Hide the ad banner.
[UIView animateWithDuration:0.5 animations:^{
self.adBanner.alpha = 0.0;
}];
}
- (void)viewDidLoad
{
[super viewDidLoad];
self.adBanner.delegate = self;
self.adBanner.alpha = 0.0;
}
Я прочитал руководство Apple ( https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/iAd_Guide/TestingiAdApplications/TestingiAdApplications.html), в котором говорится, что время от времени в приложение будут отправляться ошибки для проверки этого и это нормально, но в этом случае, кажется, что само приложение выгружает представление баннера, но затем занимает много времени, чтобы загрузить его снова.
Кроме того, рассматривая некоторые похожие ситуации с переполнением стека, я даже попытался установить для делегата adBannerView значение nil в viewWillDisappear
, Когда я делаю это и переключаюсь с первой вкладки на вторую, я не получаю сообщение об ошибке, говорящее о том, что объявление было выгружено в методе делегата, и когда я возвращаюсь, оно показывает AdBannerView
но без рекламы.
- (void)viewWillDisappear:(BOOL)animated
{
NSLog(@"DISAPEARING");
self.adBanner.delegate = nil;
}
Таким образом, чтобы подтвердить, проблема в том, что, когда я покидаю первую вкладку, чтобы перейти ко второй вкладке, NSLog
выводит сообщение о том, что объявление было выгружено. Когда я возвращаюсь к первой вкладке, она проходит через методы делегата и даже запускает метод, который указывает, что объявление готово к показу, adBannerView
видно, но само объявление не, около 2 минут.
Обновить
Я реализовал использование общих баннеров, используя AppDelegate
и код в этом примере: https://www.youtube.com/watch?v=_0Mv44FWw0A&feature=youtu.be.
В результате я не получаю никаких ошибок при переключении вкладок, но когда я переключаюсь на вторую вкладку и возвращаюсь снова, она все равно показывает баннер, но загружает в нее рекламу через 2 минуты, даже если bannerViewDidLoadAd
Метод делегата вызывается, как только я возвращаюсь на первую вкладку.
Любое руководство по этому вопросу действительно будет оценено.