1

如何以仅在 AppDelegate 中实现并且可以在所有屏幕中使用的方式实现 iAd。

我将代码放在 appDelegate 中。我还需要在每个视图控制器中为它编写代码吗?

AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    [self addiAd];
    NSLog(@"window subview : %@",self.window.subviews);    //Here it shows no subview
    return YES;
}

-(void)addiAd
{
    self.adView.delegate = self;
    self.adView.requiredContentSizeIdentifiers = [NSSet setWithObjects:ADBannerContentSizeIdentifierLandscape,ADBannerContentSizeIdentifierPortrait, nil];
    self.adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifierPortrait;
    UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
    [self setBannerFrame:orientation];
    self.adView = [[ADBannerView alloc] init];
    self.adView.frame = CGRectMake(0, 938, 768, 66);
    [self.window addSubview:self.adView];

}
-(void)removeiAd
{
    [self.adView removeFromSuperview];
}
-(void)setBannerFrame:(UIInterfaceOrientation)interfaceOrientation
{
    if (interfaceOrientation == UIInterfaceOrientationLandscapeLeft || interfaceOrientation == UIInterfaceOrientationLandscapeRight) {
        [self.adView setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifierLandscape];
        self.adView.frame = CGRectMake(0, 634, 320, 50);
    }
    else {
        [self.adView setCurrentContentSizeIdentifier:ADBannerContentSizeIdentifierPortrait];
        self.adView.frame = CGRectMake(0, 890, 480, 32);
    }
}

它的所有委托方法也在 AppDelegate.m 中实现

我的下一步应该是什么?我做错了什么或错过了什么?

4

3 回答 3

2

您不需要在应用程序委托中进行任何 iAd 配置,通常您在显示它的视图控制器的类中配置它 - 这意味着通常您需要在每个视图控制器中放置一个广告视图想要展示广告。

然而,还有更简单的方法——例如,这个问题的答案提供了一个指向似乎可以做你想做的事情的单例类的链接——它提供了一个管理你的 iAd 配置的类,然后你可以将其放入每个视图中您希望广告出现在其中。

于 2012-10-16T05:30:48.010 回答
0

是的。无需在每个视图控件中编写代码。这是我的代码

- (UIWindow *)viewControllerForPresentingModalView {

    return self;

}
- (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlView {
    NSLog(@"Ad received");
    CGSize adSize = [adView actualAdSize];
    NSLog(@"Net work Name %@",[adWhirlView mostRecentNetworkName]);
    CGRect newFrame = adView.frame;
    newFrame.size = adSize;



    newFrame.origin.y=385;
    NSLog(@"frame size %f,%f",newFrame.origin.x,newFrame.origin.y);
    adView.frame = newFrame;




}
-(void)adWhirlDidFailToReceiveAd:(AdWhirlView *)adWhirlView usingBackup:(BOOL)yesOrNo
{
    NSLog(@"Ad not Received");
    NSLog(@"Net work Name %@",[adWhirlView mostRecentNetworkName]);
    CGRect tempFrame = adView.frame;
    tempFrame.origin.y = -adView.frame.size.height;
    adView.frame = tempFrame;


}

在应用程序委托和应用程序的 didFinishedLaunching 方法中编写所有这些方法,只需将 adwhirl 视图添加为窗口的子视图。

adView=[AdWhirlView requestAdWhirlViewWithDelegate:self];
    [self.window addSubview:adView];  

它对我来说工作正常。

于 2012-10-16T06:26:15.863 回答
0

Apple 建议在 App Delegate 中创建一次,然后在所有视图中共享。

https://developer.apple.com/library/ios/technotes/tn2286/_index.html

于 2015-11-21T19:02:14.647 回答