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

What do I need to add to handle AdMob/iAd mediation properly

我做了以下事情:

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

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

3) 下载 AdMob SDK iOS 7.0 SDK 到项目中,它带有 AdMob 适配器。将 GoogleMobileAds 导入项目中的 .h 和 .m 文件

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

5) 在其他链接器标志的构建设置下,我添加了 -ObjC,因此它处于调试和发布状态。

它在 Admob 调解说明中说明 "There is no need to write additional code to create ad views from each ad network. The AdMob mediation SDK will invoke each ad network's adapters and SDK as necessary to create ads"

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

我有 1 ViewController 个广告要分享。 1 VC 中的 3 种方法。第一个 = viewDidLoad 方法,第二个 = StartGame 方法,第三个 = GameOver 方法。然后在GameOver之后回到viewDidLoad。

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

这使得 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];
   }

我不熟悉 AdMob 的 iAd 适配器,但听起来它的意思是显示一个 AdMob 视图并让 AdMob 调解是显示 iAd 广告还是基于他们的每千次展示费用的 AdMob 广告可以在那个时候获得。您的代码表明您希望分别实施 iAd 和 AdMob,并根据它们是否收到广告来显示其中一个。此外,您不应在每次要展示广告时都创建新的 iAd 和 AdMob 横幅视图。您应该首先创建每一个,并在适当的时候在您的应用程序中显示它们。您的 iAd 广告在离开 gameOver 视图后立即显示的原因是因为在您再次创建全新的 iAd 视图时调用了 viewDidLoad。要完成您尝试在代码中执行的操作,您应该创建一个函数来最初创建广告视图,或者在 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];
    }
}

我遇到了类似的问题。 我在我的 didFailToReceiveAdWithError:

中使用了这个
[self.bannerView removeFromSuperview];

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