본문 바로가기

개발

[Swift 4] 구글 애드몹 광고 아이폰에 설정 / Google AdMob banner ads and interstitial settings for iOS


구글 애드몹의 배너 광고와 전면 광고 설정을 간단하게 정리해봤다.

순서는 
  1. 기본 셋팅
  2. 광고 노출 여부 판단
  3. 광고 노출
  4. 다음 광고 노출을 위한 준비

로 말로 하면 아주 심플하기 그지없지만 처음 해보는 사람은 당연 헤매기 마련이다.
나도 처음 몇 번은 헤맸지만 이제는 반 자동적(자동적으로 되는 건 좀 오버스러워서..)으로 코딩을 하게 되었다.

간혹 광고가 안 나온다고 당황하는 경우가 있는데 특별히 에러 내용이 없다면 구글에서 준비된 광고가 없는 경우가 대부분이다.
광고 자리는 준비되었지만 광고를 보내려고 하는 광고주가 없다고 이해하면 된다.
그러니 그냥 광고 자리가 허옇게 나올 수밖에...
처음에는 이런 걸 모르고 마냥 광고 안 나온다고 찡찡 거렸었다.
지금은 그런 경우를 대비해서 내가 만든 다른 앱들을 하우스 광고로 준비해서 내보내고 있다.

광고가 준비되지 못한 경우와 전면광고를 모두 시청한 후에 무언가 액션을 추가한다면 좀 더 깔끔한 앱을 만들수 있을 것이다.
자세한 내용은 아래 소스 보면 충분히(?) 이해 되리라 생각한다.
왜냐면 나 같은 비전공자 생초보도 했으니까..


 
  // adMobMyDeviceUUID, adMobApplicationId, adMobBannerAdUnitId, adMobInterstitialAdUnitId 등은 별도 파일에 애드몹 개인 정보를 입력해 둔다.
 
  // 앱델리게이트에 추가
  GADMobileAds.configure(withApplicationID: adMobApplicationId)
  // class에 GADBannerViewDelegate, GADInterstitialDelegate 추가
 
  @IBOutlet weak var bannerView: GADBannerView!
  @IBOutlet weak var inHouseAdButton: UIButton!
  var interstitial: GADInterstitial!
 
  override func viewDidLoad() {
          super.viewDidLoad()
      // 광고 구매 여부 확인
          checkBuyAd()
     
      // 전면 광고 준비
      interstitial = createAndLoadInterstitial()
  }
 
  //MARK: - 1. 광고 구매 여부 판단
      func checkBuyAd() {
         
          // 광고 구매 안한 유저면
          presentAdMobBanner() // 배너 광고 노출
          getAdShowCount() // 광고 시청 횟수, 조건을 가져옴
          checkAd() // 전면 광고 시청 조건에 맞는 유저라면 전면 광고 노출
      }
     
      // MARK: 광고 보여진 횟수 카운트
      func getAdShowCount() {
          // 광고 시청 횟수, 조건 카운트
      }
     
      // MARK: 광고 준비 여부 확인
      func checkAd() {
          if interstitial.isReady {
              // 전면 광고 받아온 경우 실행
              interstitial.present(fromRootViewController: self)
              interstitial = createAndLoadInterstitial()
          } else {
              // 전면 광고 못 받아온 경우 실행할 코드 입력
          }
      }
     
      //MARK: - 2. 배너 광고 관련
      // 배너 광고 셋팅
      func presentAdMobBanner() {
          bannerView.adUnitID = adMobBannerAdUnitId
          bannerView.rootViewController = self
          let request = GADRequest()
          request.testDevices = [kGADSimulatorID, adMobMyDeviceUUID]
          bannerView.load(request)
      }
     
      // Called when an ad request loaded an ad.
      func adViewDidReceiveAd(_ bannerView: GADBannerView) {
          inHouseAdButton.alpha = 0 // 배너 광고를 성공적으로 가져오면 준비한 하우스 배너는 숨김
          print("배너광고 가져옴 : \(#function)")
      }
     
      // Called when an ad request failed.
      func adView(_ bannerView: GADBannerView, didFailToReceiveAdWithError error: GADRequestError) {
         
          // 배너 광고를 못가져온 경우 준비한 하우스 광고를 노출해 준다
          print("배너광고 못 가져옴 : \(error.localizedDescription)")
      }
     
  //MARK: - 3. 전면 광고 관련
      func createAndLoadInterstitial() -> GADInterstitial {
          let interstitial = GADInterstitial(adUnitID : adMobInterstitialAdUnitId)
          interstitial.delegate = self
          let request = GADRequest()
          request.testDevices = [kGADSimulatorID, adMobMyDeviceUUID]
          interstitial.load(request)
         
          print("전면 광고 준비 완료")
          return interstitial
      }
 
      func interstitialDidReceiveAd(_ ad: GADInterstitial) {
          print("전면 광고 받아옴 interstitialDidReceiveAd")
      }
     
      func interstitial(_ ad: GADInterstitial, didFailToReceiveAdWithError error: GADRequestError) {
          print("전면광고 못 받아옴 :: \(error.localizedDescription)")
      }
     
      func interstitialDidDismissScreen(_ ad: GADInterstitial) {
         
         // 전면 광고가 다 보여진 후에 실행할 코드 추가 입력
          // 전면 광고 실행 후 다음 재생을 위해서 준비
          interstitial = createAndLoadInterstitial()
          print("전면 광고 재생 완료")
      }