2016-06-10 2 views
2

iOS에서 Google 모바일 광고 SDK를 사용하고 일부 광고를 표시하려고합니다. 내 코드 : 바로 당신이 위의 내용 참조 코드 뒤에 뷰 계층에 bannerView를 추가하는 경우보기가보기 계층에 없으면 GADBannerView 대리자 메소드가 호출되지 않습니다.

GADBannerView* bannerView = [[GADBannerView alloc] initWithAdSize:GADAdSizeFromCGSize(CGSizeMake(300, 250))]; 
bannerView.adUnitID = @"hidden"; 
bannerView.rootViewController = self; 
bannerView.delegate = self; 

GADRequest* request = [GADRequest request]; 
request.testDevices = @[ kGADSimulatorID ]; 

[bannerView loadRequest:request]; 

이 잘 작동합니다. 그러나 광고가로드 될 때까지 추가하고 싶지 않으므로 지연시키고 싶습니다. bannerView이 뷰 계층 구조에 없다면 위임 메서드가 전혀 호출되지 않는다는 것을 알았습니다. 또한, 나는 관찰하고있는 것과 일치하는 this answer을 발견했습니다.

/// Tells the delegate that an ad request successfully received an ad. The delegate may want to add 
/// the banner view to the view hierarchy if it hasn't been added yet. 
- (void)adViewDidReceiveAd:(GADBannerView *)bannerView; 

이는보기 내가 원하는 정확히 어떤 계층 구조에없는 경우에도 그 대리인 콜백을받을 수 있어야한다 제안 : 다른 한편으로, 이는 GADBannerViewDelegate 헤더에서 인용이다. 그래서, 어떤 생각을 어떻게 할 수 있습니까?

+0

'ViewController'에'GADBannerViewDelegate'를 추가 했습니까? 예를 들어,'@interface ViewController() . –

+1

@ 대니얼 예, 프로토콜을 구현하기 위해 뷰 컨트롤러를 선언했지만 아무런 경고 메시지가 표시되지 않습니다. – lawicko

답변

5

좋아, 여기서 문제는 내가 bannerView에 대한 참조를 유지하지 않았다는 것이 었습니다. 메서드가 반환 된 후에 할당이 해제 되었기 때문에 위임 메서드가 호출되지 않은 것입니다.

0

보기에 GADBannerView을 추가하고 숨겨진 속성을 처음에 YES으로 설정해야합니다. 또한 AdMob에서 제공하는 AdSize Constant kGADAdSizeBanner을 사용하는 것이 좋습니다. 다음은 추가 AdSize Constants 목록입니다. 예를 들어

: 당신이 광고를받을 때

bannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner]; 
bannerView.adUnitID = @"YourAdUnitID"; 
bannerView.rootViewController = self; 
bannerView.delegate = self; 
[bannerView loadRequest:[GADRequest request]]; 
bannerView.hidden = YES; // Hide banner initially 
[self.view addSubview:bannerView]; 
// This will put the banner at the bottom of the screen and stretch to fit the screens width 
[bannerView setFrame:CGRectMake(0, self.view.frame.size.height - bannerView.frame.size.height, self.view.frame.size.width, bannerView.frame.size.height)]; 

는 그런 다음 배너 숨기기를 취소. 예를 들면 : 당신이 0.0에 배너의 alpha 속성을 설정 처음 대신이 hidden 재산의 사용에 의해, 않으려면

-(void)adViewDidReceiveAd:(GADBannerView *)adView { 
    // We've received an ad so lets show the banner 
    bannerView.hidden = NO; 
    NSLog(@"adViewDidReceiveAd"); 
} 

-(void)adView:(GADBannerView *)adView didFailToReceiveAdWithError:(GADRequestError *)error { 
    // Failed to receive an ad from AdMob so lets hide the banner 
    bannerView.hidden = YES; 
    NSLog(@"adView:didFailToReceiveAdWithError: %@", [error localizedDescription]); 
} 

는 또한,이 애니메이션을 할 수있다. 그런 다음 광고를 수신하면 alpha에 애니메이션을 적용합니다. 예를 들어 표시 할 광고가없는 경우

-(void)adViewDidReceiveAd:(GADBannerView *)adView { 
    // We've received an ad so lets fade in the banner 
    [UIView animateWithDuration:0.2 animations:^{ 
     bannerView.alpha = 1.0; 
    }]; 
    NSLog(@"adViewDidReceiveAd"); 
} 

-(void)adView:(GADBannerView *)adView didFailToReceiveAdWithError:(GADRequestError *)error { 
    // Failed to receive an ad from AdMob so lets fade out the banner 
    [UIView animateWithDuration:0.2 animations:^{ 
     bannerView.alpha = 0.0; 
    }]; 
    NSLog(@"adView:didFailToReceiveAdWithError: %@", [error localizedDescription]); 
} 

또한, 보조 노트와 같이 GADBannerView은 투명합니다. 그래서, 그것을 당신의 견해에 추가하고 아무것도하지 않으면 너무 일할 것입니다.

+0

답변 주셔서 감사합니다.하지만 뷰에 계층 구조를 추가하고 싶지 않습니다. 실제로이 배너는 컬렉션 뷰의 셀이므로로드하지 않을 경우, 나는 그것에 관심이 없다. 또한 크기는 300x250으로 정의되므로 크기 상수는 나에게 유용하지 않습니다. 중형 직사각형이라고하는 300x250 크기가 꽤 유명하므로 표시 할 광고의 부족에 대해 걱정하지 않아도됩니다. – lawicko

+0

@lawicko 내 기쁨. 이 정보를 포함하도록 질문을 편집해야합니다. –

+0

배너 뷰가 처음에는 뷰 계층에 있어야한다고 언급했습니다. SDK 문서는 계층 구조에 추가하기 전에 요청할 수 있음을 명확하게 명시합니다. –