'AdMob'에 해당되는 글 2건

  1. 2014.03.15 Apportable Android에 Admob 적용하기 (3)
  2. 2014.02.21 SpriteKit에 iAd, AdMob 붙이기

Apportable을 사용해서 cocos2d-iPhone 앱을 안드로이드 앱으로 빌드하는 과정에서 가장 아쉬운게 AdMob 광고였다. 아무리 구글링을 해봐도 제대로된 해답은 없고, Starter Kit에서는 지원이 안되니 BridgeKit을 사용해서 직접 Android Java를 코딩해서 직접 붙이는 수 밖에 없었다. 


Apportable 에서 직접 AdNetworkTests http://docs.apportable.com/sample-apps.html#adnetworktests 광고 관련 셈플 프로젝트가 있는데 문구에는 Indie 버전만 지원한다고 나온다. 그래서 bulid를 해도 AdMob은 지원을 안하니 계속해서 에러가 난다. 


그러다가 공식 문서에서 발견한 한 줄기 빛과 같은 문구. 


Revmob and Admob

Included again in full SDK

모든 SDK에서 다시 Admob을 지원한다는 것이다. 그런데 계속해서 build를 해도 에러가 난다. 


apportable --version을 확인하니 1.1.03 


apportable update를 해도 계속해서 1.1.03 이다. 지우고 설치를 해도 1.1.03 이다. 뭔가 컴맹이 된 기분. 


해결책은 아주 간단하다. http://www.apportable.com/account 에 가서 SDK Version을 release_1.1.06 으로 변경한다. 

1.1.05 이상에서만 starter kit 에서도 Admob을 지원하니. 꼭 1.1.06을 선택하도록 하자. 


그리고 AdNetworkTests 에서 가저온 샘플 코드를 자신에 환경에 맞게 살짝 손만 본다. 기존 코드는 UIKit 기준으로 되어 있어서 cocos2d에 맞게만 변경을 하였다. 


AppDelegate.h

#ifdef ANDROID

#import "GADBannerView.h"

#import "GADInterstitial.h"

#else


#ifdef ANDROID

@interface AppDelegate : CCAppDelegate <GADInterstitialDelegate> {

  GADBannerView *mBannerView;

  GADInterstitial *mInterstitial;

}


@end


#else


AppDelegate.m

// 광고 생성 초기.

- (void)initADBanner {

  CGSize winsize = [[UIScreen mainScreen] bounds].size;


#ifdef ANDROID

  mBannerView = [[GADBannerView alloc] initWithAdSize:kGADAdSizeBanner];

  #ifdef APPORTABLE

  mBannerView.adUnitID = @"APPID";

  #endif // apportable

  mBannerView.rootViewController = self.window.rootViewController;

  CGRect frame = mBannerView.frame;

  mBannerView.frame = CGRectMake(winsize.height/2 - frame.size.width / 2, winsize.width - 50, 320, 50);


  [self.window.rootViewController.view addSubview:mBannerView];

  GADRequest *request = [GADRequest request];

  request.testDevices = [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil];

  [mBannerView loadRequest:request];

  

  [self loadInterstitial];


#else

  [self initADBanneriAd];

  [self initADBannergAd];

#endif

}



#pragma mark - Private


- (void)loadInterstitial

{

  [GADRequest request];

}


- (void)reloadInterstitial

{

  mInterstitial = nil;

  [self loadInterstitial];

}


#pragma mark - MPIntersitialAdControllerDelegate


- (void)interstitial:(GADInterstitial *)interstitial didFailToReceiveAdWithError:(GADRequestError *)error {

  NSLog(@"**** MoPub Interstitial load failed.");

}


- (void)interstitialDidReceiveAd:(GADInterstitial *)interstitial {

  NSLog(@"**** MoPub Interstitial did load.");

}


- (void)interstitialWillPresentScreen:(GADInterstitial *)interstitial {

  

}


- (void)interstitialDidDismissScreen:(GADInterstitial *)interstitial {

  [self reloadInterstitial];

}


#endif



끗!


저작자 표시 비영리
신고
Posted by KraZYeom

* iAd는 UIViewController에만 붙는다. 


iAd 문서

https://developer.apple.com/library/ios/documentation/userexperience/Reference/iAd_ReferenceCollection/_index.html

Google AdMob 문서

https://developers.google.com/mobile-ads-sdk/docs/admob/fundamentals#ios

두 개의 문서를 참조하여 필요한 프레임 워크 및 설정을 하도록 하자. AdMob에서는 Other Linker Flags에서 -ObjC 설정을 안해주면 뭔가 에러를 나니 꼭 문서를 참조해서 설정하도록 하자. 


나머지는 대충 코드를 보면 알수 있다. 설명 생략. 


UIViewController.h

#import <UIKit/UIKit.h>

#import <SpriteKit/SpriteKit.h>

#import "GADBannerView.h"

#import <iAd/iAd.h>



@interface ViewController : UIViewController <ADBannerViewDelegate, GADBannerViewDelegate> {

  ADBannerView* iADBanner; // iAD

  GADBannerView* adMobBanner; // 애드몹

}


- (void)initADBanner;

- (void)hideADBanner;


UIViewController.m

// 광고 생성 초기.

- (void)initADBanner {

  // iAd Banner

  iADBanner = [[ADBannerView alloc] initWithAdType:ADAdTypeBanner];

  iADBanner.frame = CGRectZero;

  iADBanner.delegate=self;

  [self.view addSubview:iADBanner];

  

  // AdMob Banner

  adMobBanner = [[GADBannerView alloc] initWithFrame:CGRectMake(0, 578, 320, 50)];

  adMobBanner.rootViewController = self;

  adMobBanner.delegate = self;

  adMobBanner.adUnitID = @"google AdMob 광고 id";

  [self.view addSubview:adMobBanner];

  

  // 애드몹 광고 request

  GADRequest* requestAd = [GADRequest request];

  

  // test. 테스트 주석

//  [requestAd setTestDevices: [NSArray arrayWithObjects:GAD_SIMULATOR_ID, nil]];

  [adMobBanner loadRequest:requestAd];

}


- (void)hideADBanner {

  for (UIView *subview in [self.view subviews]) {

    if([subview isKindOfClass:[GADBannerView class]]) {

      [subview removeFromSuperview];

    }

    if([subview isKindOfClass:[ADBannerView class]]) {

      [subview removeFromSuperview];

    }

  }}


#pragma mark -

#pragma mark iAD Delegate


- (void)bannerViewDidLoadAd:(ADBannerView *)banner {

  [UIView beginAnimations:@"animateBannerAppear" context:nil];

  [iADBanner setFrame:CGRectMake(0, 0, 320, 50)];

  [UIView commitAnimations];

}


- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error {

  [UIView beginAnimations:@"animateBannerOff" context:nil];

  [iADBanner setFrame:CGRectMake(0, 0, 320, 50)];

  [UIView commitAnimations];

}


#pragma mark -

#pragma mark adMob Delegate


- (void)adViewDidReceiveAd:(GADBannerView *)bannerView {

  [UIView beginAnimations:@"BannerSlide" context:nil];

  [adMobBanner setFrame:CGRectMake(0, 518, 320, 50)];

  [UIView commitAnimations];

}


- (void)adView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(GADRequestError *)error {

  [UIView beginAnimations:@"BannerSlide" context:nil];

  [adMobBanner setFrame:CGRectMake(0, 518, 320, 50)];

  [UIView commitAnimations];

}



광고를 호출하는 곳.m

#import "AppDelegate.h"

#import "ViewController.h"


- (void)loadAdBanner {

  AppDelegate *delegate = (AppDelegate *)[UIApplication sharedApplication].delegate;

  ViewController *vc = (ViewController *)delegate.window.rootViewController;

  [vc initADBanner];

}








저작자 표시 비영리
신고
Posted by KraZYeom