Подтвердить что ты не робот

IAds Загрузка Throttled после повторного запуска приложения из фона (также происходит в iAdSuite)

Я пытаюсь реализовать пример NavigationBanner iAdSuite в моем проекте, чтобы я мог совместно использовать один экземпляр AdBannerView для нескольких контроллеров представлений, но я продолжаю получать следующую ошибку:

Ошибка домена = ADErrorDomain Code = 2 "Операция не может быть завершена Загрузка дроссельной заслонки

Я скопировал соответствующий код точно из текущего iAdSuite в свое приложение и получаю эту ошибку. Фактически, эта ошибка повторяется в собственном примере Apple для iAdSuite для NavigationBanner (который является примером, который я пытаюсь реализовать). Ошибка можно увидеть, добавив:

NSLog (@"%@",error);

в

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error

Чтобы реплицировать проблему в iAdSuite, выполните следующие действия:

  • Превратите ваше устройство Режим полета в положение "Вкл."
  • Запустите iAdSuite NavigationBanner с Xcode. Это сразу вызывает ошибку "Ошибка ADErrorDomain 1".
  • Выйдите из приложения, нажав кнопку "Домой" на вашем устройстве, затем выключите режим полета.
  • Перезапустите NavigationBanner, нажав на значок, и появится ошибка.

Это проблема для моего приложения, потому что я хочу скрыть iAd, если нет возможности подключения, а затем снова заново появиться после возобновления подключения. Если приложение получает ошибку дросселирования, тогда будет длительная задержка, прежде чем он сможет получить другое объявление.

Как избежать ошибки дросселя? Я думал, что bannerView нужно удалить, а затем снова добавить, но не мог понять, как это сделать правильно.

Последнее, что нужно отметить, это то, что текущий iAdSuite использует ARC, пока мое приложение этого не делает. Тем не менее, ошибка возникает как с моим приложением, так и с iAdSuite.

4b9b3361

Ответ 1

Попробуйте определить статус сети с кодом проекта "Достижимость" от Apple. В Github есть совместимая с ARC версия. (https://github.com/tonymillion/Reachability) После того, как вы импортируете Reachability.h в свой файл заголовка, вы можете попробовать код ниже. Достижимость обнаружит, доступно ли какое-либо соединение, а если нет, то iAd будет перемещен за пределы экрана. Надеюсь, это поможет!

- (void)bannerViewDidLoadAd:(ADBannerView *)banner
{
    Reachability *reachability = [Reachability reachabilityForInternetConnection];
    [reachability startNotifier];

    NetworkStatus status = [reachability currentReachabilityStatus];

    if(status == NotReachable)
    {
        // No internet connection. We need to move the iAd off screen.
        NSLog(@"No network connection. iAd will hide.");
        banner.frame = CGRectOffset(banner.frame, 320, 0);
    }
    if(status == ReachableViaWifi)
    {
        banner.frame = CGRectOffset(banner.frame, your position here);
    }
    if(status == ReachableViaWWAN)
    {
        banner.frame = CGRectOffset(banner.frame, your position here);
    }
}

Ответ 2

/*Implement the iAd in app delegate and use the applicationDidBecomeActive method.Here I use #import "Reachability.h" class downloaded from Github Here is the code.*/




//  AppDelegate.h




 @interface AppDelegate : UIResponder <UIApplicationDelegate,ADBannerViewDelegate>
    {

      BOOL iAdLauchFlag;
      ADBannerView *bannerView;
      UILabel  *notifier ;
      UIView *iAdview;
    }

//  AppDelegate.m




  #import "AppDelegate.h"

  #import "Reachability.h"



    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions

    {

      LauchFlag=NO;

      notifier=[[UILabel alloc]init];

      notifier=[[UILabel alloc]initWithFrame:CGRectMake(0.0f, 40.0f, bounds.size.height, 30)];

       iAdview =[[UIView      alloc]initWithFrame:CGRectMake(0.0f,bounds.size.width,bounds.size.height, 30)]; 

    }

    -(void) applicationDidBecomeActive: (UIApplication *) application 
    {

        NSLog(@"applicationDidBecomeActive");

     if ( [self connectedToNetwork] )

      {

          if(!LauchFlag)
            {
              CGRect bounds=[[UIScreen mainScreen] bounds];

              NSLog(@"allocated banner view");

             bannerView = [[ADBannerView alloc]
                          initWithFrame:CGRectMake(0.0f, 30.0f, bounds.size.height, 30)];


             [notifier setText:@"  Connecting to iAd service......."];
             [iAdview addSubview:notifier];
            }
            bannerView.delegate = self;


        }
        else
        {
            if(LauchFlag)
            {
                [bannerView removeFromSuperview];
                [bannerView release];
                 LauchFlag=NO;
            }
            [notifier setText:@" iAd failed to launch due to internet connection problem "];
            [iAdview addSubview:notifier];
        }

    }

    -(BOOL)bannerViewActionShouldBegin:
    (ADBannerView *)banner
                   willLeaveApplication:(BOOL)willLeave{


     return YES;

    }

    - (void)bannerViewActionDidFinish:(ADBannerView *)banner
    {
    }

    -(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
    {

        NSLog(@"bannerView:(ADBannerView *)banner didFailToReceiveAdWithError");


        if ([self connectedToNetwork]) {

            [notifier setText:@" Launching iAd ............"];


            NSLog(@"Reachable");
        }
        else {

            [notifier setText:@"error: iAd failed to launch due internet connection problem "];


            NSLog(@"Not Reachable");
        }


    }

    -(void)bannerViewDidLoadAd:(ADBannerView *)banner
    {

        NSLog(@"bannerViewDidLoadAd");
        [notifier removeFromSuperview];
        [iAdview  addSubview:bannerView];
         LauchFlag=YES;

    }
- (BOOL) connectedToNetwork
{
    Reachability *r = [Reachability reachabilityWithHostName:@"www.google.com"];
    NetworkStatus internetStatus = [r currentReachabilityStatus];
    BOOL internet;
    if ((internetStatus != ReachableViaWiFi) && (internetStatus != ReachableViaWWAN)) {
        internet = NO;
    } else {
        internet = YES;
    }
    return internet;
}

//viewcontroller1

#import "AppDelegate.h"

 - (void)viewDidLoad
{
     AppDelegate *appdelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate];
      [[self view] addSubview:appdelegate.iAdview];
}

//viewcontroller2

#import "AppDelegate.h"
 - (void)viewDidLoad
{
    AppDelegate *appdelegate=(AppDelegate *)[[UIApplication sharedApplication] delegate];
     [[self view] addSubview:appdelegate.iAdview];
}