iAds通过adWhirl未完全加载

时间:2012-07-30 04:14:34

标签: ios iad adwhirl

我刚使用iAds和adMob将adWhirl实施到我的应用中。一切都正确编译,adMob完美运行,但我的iAd的大小不正确。广告看起来像是正确的尺寸,但它实际上似乎被切断了。大约1/4的广告似乎缺失了。由于我没有错误,我不确切地知道在哪里解决这个问题。

这是我的广告栏的截图。

http://imgur.com/waPPD

任何帮助或只是朝着正确的方向轻推都会受到赞赏!

这是AdWhirlAdapteriAd.h

#import "AdWhirlAdNetworkAdapter.h"
#import <iAd/ADBannerView.h>

@interface AdWhirlAdapterIAd : AdWhirlAdNetworkAdapter <ADBannerViewDelegate> {
  NSString *kADBannerContentSizeIdentifierPortrait;
  NSString *kADBannerContentSizeIdentifierLandscape;
}

+ (AdWhirlAdNetworkType)networkType;

@end

这里是AdWhirlAdapteriAd.m

#import "AdWhirlAdapterIAd.h"
#import "AdWhirlAdNetworkConfig.h"
#import "AdWhirlView.h"
#import "AdWhirlLog.h"
#import "AdWhirlAdNetworkAdapter+Helpers.h"
#import "AdWhirlAdNetworkRegistry.h"

@implementation AdWhirlAdapterIAd

+ (AdWhirlAdNetworkType)networkType {
  return AdWhirlAdNetworkTypeIAd;
}

+ (void)load {
  if(NSClassFromString(@"ADBannerView") != nil) {
    [[AdWhirlAdNetworkRegistry sharedRegistry] registerClass:self];
  }
}

- (void)getAd {
  ADBannerView *iAdView = [[ADBannerView alloc] initWithFrame:CGRectZero];
  kADBannerContentSizeIdentifierPortrait =
    &ADBannerContentSizeIdentifierPortrait != nil ?
      ADBannerContentSizeIdentifierPortrait :
      ADBannerContentSizeIdentifierPortrait;
  kADBannerContentSizeIdentifierLandscape =
    &ADBannerContentSizeIdentifierLandscape != nil ?
      ADBannerContentSizeIdentifierLandscape :
      ADBannerContentSizeIdentifierPortrait;
  iAdView.requiredContentSizeIdentifiers = [NSSet setWithObjects:
                                        kADBannerContentSizeIdentifierPortrait,
                                        kADBannerContentSizeIdentifierLandscape,
                                        nil];
  UIDeviceOrientation orientation;
  if ([self.adWhirlDelegate respondsToSelector:@selector(adWhirlCurrentOrientation)]) {
orientation = [self.adWhirlDelegate adWhirlCurrentOrientation];
  }
  else {
    orientation = [UIDevice currentDevice].orientation;
  }

  if (UIDeviceOrientationIsLandscape(orientation)) {
    iAdView.currentContentSizeIdentifier = kADBannerContentSizeIdentifierLandscape;
  }
  else {
    iAdView.currentContentSizeIdentifier = kADBannerContentSizeIdentifierPortrait;
  }
  [iAdView setDelegate:self];

  self.adNetworkView = iAdView;
  [iAdView release];
}

- (void)stopBeingDelegate {
  ADBannerView *iAdView = (ADBannerView *)self.adNetworkView;
  if (iAdView != nil) {
    iAdView.delegate = nil;
  }
}

- (void)rotateToOrientation:(UIInterfaceOrientation)orientation {
  ADBannerView *iAdView = (ADBannerView *)self.adNetworkView;
  if (iAdView == nil) return;
  if (UIInterfaceOrientationIsLandscape(orientation)) {
    iAdView.currentContentSizeIdentifier = kADBannerContentSizeIdentifierLandscape;
  }
  else {
    iAdView.currentContentSizeIdentifier = kADBannerContentSizeIdentifierPortrait;
  }
  // ADBanner positions itself in the center of the super view, which we do not
  // want, since we rely on publishers to resize the container view.
  // position back to 0,0
  CGRect newFrame = iAdView.frame;
  newFrame.origin.x = newFrame.origin.y = 0;
  iAdView.frame = newFrame;
}

- (BOOL)isBannerAnimationOK:(AWBannerAnimationType)animType {
  if (animType == AWBannerAnimationTypeFadeIn) {
    return NO;
  }
  return YES;
}

- (void)dealloc {
  [super dealloc];
}

#pragma mark IAdDelegate methods

- (void)bannerViewDidLoadAd:(ADBannerView *)banner {
  // ADBanner positions itself in the center of the super view, which we do not
  // want, since we rely on publishers to resize the container view.
  // position back to 0,0
  CGRect newFrame = banner.frame;
  newFrame.origin.x = newFrame.origin.y = 0;
  banner.frame = newFrame;

  [adWhirlView adapter:self didReceiveAdView:banner];
}

- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {
  [adWhirlView adapter:self didFailAd:error];
}

- (BOOL)bannerViewActionShouldBegin:(ADBannerView *)banner willLeaveApplication:              (BOOL)willLeave {
  [self helperNotifyDelegateOfFullScreenModal];
  return YES;
}

- (void)bannerViewActionDidFinish:(ADBannerView *)banner {
  [self helperNotifyDelegateOfFullScreenModalDismissal];
}

@end

以下是在应用中调用广告的位置

MainMenuInterface.h

#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import "GameManager.h"
#import "AdWhirlView.h"
#import "AdWhirlDelegateProtocol.h"
#import "Reading_FluencyAppDelegate.h"
#import "RootViewController.h"

enum GameStatePP {
    kGameStatePlaying,
    kGameStatePaused
};


@interface MainMenuInterface : CCLayer <AdWhirlDelegate>

{
    CCMenu *mainMenu;
    CCMenu *aboutPage;

    RootViewController *viewController;
    AdWhirlView *adWhirlView;
    enum GameStatePP _state;
}

@property(nonatomic,retain) AdWhirlView *adWhirlView;
@property(nonatomic) enum GameStatePP state;

-(void)displayStartButton;

@end

这是MainMenuInterface.m中的重要内容

- (void)adWhirlWillPresentFullScreenModal {

    if (self.state == kGameStatePlaying) {

        //[[SimpleAudioEngine sharedEngine] pauseBackgroundMusic];

        [[CCDirector sharedDirector] pause];
  }
}

- (void)adWhirlDidDismissFullScreenModal {

    if (self.state == kGameStatePaused)
        return;

    else {
        self.state = kGameStatePlaying;
        //[[SimpleAudioEngine sharedEngine] resumeBackgroundMusic];
        [[CCDirector sharedDirector] resume];

    }
}

- (NSString *)adWhirlApplicationKey {
    return @"23myapplicationkey39203924";
}

- (UIViewController *)viewControllerForPresentingModalView {
    return viewController;
}

-(void)adjustAdSize {
    [UIView beginAnimations:@"AdResize" context:nil];
    [UIView setAnimationDuration:0.2];
    CGSize adSize = [adWhirlView actualAdSize];
    CGRect newFrame = adWhirlView.frame;
newFrame.size.height = adSize.height;

CGSize winSize = [CCDirector sharedDirector].winSize;
newFrame.size.width = winSize.width;
newFrame.origin.x = (self.adWhirlView.bounds.size.width - adSize.width)/2;

newFrame.origin.y = (winSize.height - adSize.height);
adWhirlView.frame = newFrame;
[UIView commitAnimations];
}

- (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlVieww {
[adWhirlView rotateToOrientation:UIInterfaceOrientationLandscapeRight];
[self adjustAdSize];

}

-(void)onEnter {
    viewController = [(Reading_FluencyAppDelegate *)[[UIApplication sharedApplication]         delegate] viewController];
    self.adWhirlView = [AdWhirlView requestAdWhirlViewWithDelegate:self];
    self.adWhirlView.autoresizingMask = UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin;

    [adWhirlView updateAdWhirlConfig];
CGSize adSize = [adWhirlView actualAdSize];
CGSize winSize = [CCDirector sharedDirector].winSize;
self.adWhirlView.frame = CGRectMake((winSize.width/2)-(adSize.width/2),winSize.height-            adSize.height,winSize.width,adSize.height);
self.adWhirlView.clipsToBounds = YES;
[viewController.view addSubview:adWhirlView];
[viewController.view bringSubviewToFront:adWhirlView];
[super onEnter];
}

-(void)onExit {
if (adWhirlView) {
    [adWhirlView removeFromSuperview];
    [adWhirlView replaceBannerViewWith:nil];
    [adWhirlView ignoreNewAdRequests];
    [adWhirlView setDelegate:nil];
    self.adWhirlView = nil;
}
[super onExit];
}

-(void)dealloc
{
self.adWhirlView.delegate = nil;
self.adWhirlView = nil;
[super dealloc];
}

2 个答案:

答案 0 :(得分:1)

也许winSize的{​​{1}}属性仍然认为你的肖像?如果你把它翻过来怎么办:

sharedDirector

答案 1 :(得分:0)

对于那些将来需要了解的人,我的问题原来是它调用广告而不是肖像,而不是调用adjustAdSize()它没有得到正确的大小调整。

我改变了

- (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlVieww {
    [adWhirlView rotateToOrientation:UIInterfaceOrientationLandscapeRight];
    [self adjustAdSize];
{

- (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlVieww {
    [adWhirlView rotateToOrientation:UIInterfaceOrientationPortrait];
    [self adjustAdSize];
{

它解决了我所有的问题!