我需要添加什么才能正确处理AdMob / iAd中介

时间:2015-02-15 22:20:29

标签: ios admob iad

我做了以下事情:

1)在iOS项目中添加了iAd.framework。我将iAd / iAd.h和.m导入项目。

2)我打开了AdMob帐户。在调解中,我使iAd cpm高于AdMob cpm。

3)将AdMob SDK iOS 7.0 SDK下载到项目中,它附带AdMob适配器。将GoogleMobileAds导入到项目

中的.h和.m文件中

4)将iAd适配器下载到项目中。

5)在其他链接器标志的Build Settings下,我添加了-ObjC,以便它在调试和发布中。

它在Admob Mediation说明中说明"无需编写其他代码来从每个广告网络创建广告视图。 AdMob中介SDK会根据需要调用每个广告网络的适配器和SDK来制作广告"

不添加任何代码,不起作用。

我有一个ViewController可供广告分享。 3个方法就是1个VC。 1st = viewDidLoad方法,2nd = StartGame方法,3rd = GameOver方法。然后回到GameOver之后的viewDidLoad。

所以然后我在viewDidLoad中添加了iad代码,并将iad隐藏在didFailToReceiveAdWithError和AdMob show中。

这使得iAd加载和iAd在失败并加载AdMob之前保持显示测试横幅5分钟。但是,在我离开GameOver页面并返回viewDidLoad后,AdMob立即更改回iAd。

所以我不认为调解工作正常,因为广告横幅不应受任何方法的影响。我做错了什么?如何正确设置调解?

我的代码:

-(void)viewDidLoad{
self.iAD = [[ADBannerView alloc] initWithFrame:CGRectMake(0, 60, 375, 50)];
[self.iAD setDelegate:self];
[self.view addSubview:self.iAD];   
}

-(void)bannerViewDidLoadAd:(ADBannerView *)banner{
  self.iAD.hidden=NO;
}

 -(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error{
  [self.iAD setAlpha:0];
  self.iAD.hidden=YES;

  self.bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeSmartBannerPortrait]; 
  self.AdMob.adUnitID = @"my-unit-id";
  self.AdMob.rootViewController = self;
  self.AdMob.delegate = self;
  [self.view addSubview:self.AdMob];
  GADRequest *request =[GADRequest request];
  request.testDevices = @[ @"278b11d6d1cb3f7d10414d6b2686d0e5 ];  
  [self.bannerView loadRequest:request];
   }

2 个答案:

答案 0 :(得分:0)

我不熟悉AdMob的iAd适配器,但它听起来像是显示一个AdMob视图并让AdMob在他们的结束时进行调解是否根据他们可以获得的CPM显示iAd广告或AdMob广告在那时候。您的代码显示您希望单独实施iAd和AdMob,并根据他们是否收到广告来显示其中一个。此外,每次要展示广告时,都不应创建新的iAd和AdMob横幅广告视图。您应该最初创建其中一个并在应用程序中的适当时间显示它们。离开gameOver视图后,您的iAd广告立即显示的原因是因为调用了viewDidLoad,您可以再次创建全新的iAd视图。要完成您在代码中尝试执行的操作,您应该创建一个函数来初始创建广告视图,或者在viewDidLoad中使用条件语句,以确保广告视图只创建一次。我的示例使用条件语句执行此操作,然后在iAd收到广告时在屏幕上或屏幕外移动iAd / AdMob广告视图。

//ViewController.h
#import <iAd/iAd.h>
#import <GoogleMobileAds/GoogleMobileAds.h>

@interface ViewController : UIViewController <ADBannerViewDelegate>

@end


//ViewController.m
#define BANNER_UNIT_ID @"your admob banner id"

@implementation ViewController {
        //Ads
        GADBannerView *adMobView;
        ADBannerView *iAdView;
        CGRect screenBounds;
        BOOL bannerIsVisible;
        BOOL haveCreatedAdViews;
    }

- (void)viewDidLoad {
    [super viewDidLoad];
    if (!haveCreatedAdViews) {
        // Get device screen size
        screenBounds = [[UIScreen mainScreen] bounds];

        // Setup iAd view
        iAdView = [[ADBannerView alloc] initWithFrame:CGRectZero];
        [self.view addSubview:iAdView];
        iAdView.delegate=self;
        [iAdView setFrame:CGRectMake(0,
                                       0,
                                       iAdView.bounds.size.width,
                                       iAdView.bounds.size.height)];
        iAdView.center = CGPointMake(screenBounds.size.width / 2, screenBounds.size.height + (iAdView.bounds.size.height / 2));

        // Setup AdMob view
        adMobView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];
        adMobView.adUnitID = BANNER_UNIT_ID;
        adMobView.rootViewController = self;
        [self.view addSubview:adMobView];
        [adMobView loadRequest:[GADRequest request]];
        [adMobView setFrame:CGRectMake(0,
                                         0,
                                         adMobView.bounds.size.width,
                                         adMobView.bounds.size.height)];
        adMobView.center = CGPointMake(screenBounds.size.width / 2, screenBounds.size.height + (adMobView.bounds.size.height / 2));
        // Start AdMobView on screen
        adMobView.frame = CGRectOffset(adMobView.frame, 0, -50);
        //iAd banner is not visible
        bannerIsVisible = NO;
        haveCreatedAdViews = YES;
    }
}

//iAd
-(void)bannerViewDidLoadAd:(ADBannerView *)banner {
    NSLog(@"iAd received ad");
    if (!bannerIsVisible) {
        // Move iAd on screen
        [UIView beginAnimations:nil context:NULL];
        iAdView.frame = CGRectOffset(iAdView.frame, 0, -50);
        [UIView commitAnimations];
        bannerIsVisible = YES;

        // Move AdMob off screen
        [UIView beginAnimations:nil context:NULL];
        adMobView.frame = CGRectOffset(adMobView.frame, 0, 50);
        [UIView commitAnimations];
    }
}

-(void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
    NSLog(@"iAd failed");
    if (bannerIsVisible) {
        // Move iAd off screen
        [UIView beginAnimations:nil context:NULL];
        iAdView.frame = CGRectOffset(iAdView.frame, 0, 50);
        [UIView commitAnimations];
        bannerIsVisible = NO;

        // Move AdMob on screen
        [UIView beginAnimations:nil context:NULL];
        adMobView.frame = CGRectOffset(adMobView.frame, 0, -50);
        [UIView commitAnimations];
    }
}

答案 1 :(得分:-1)

我有类似的问题。 我在didFailToReceiveAdWithError中使用它:

[self.bannerView removeFromSuperview];

然后我初始化了我的adMobView ...