본문 바로가기
iOS, Swift 개발

iOS 구글 IMA 광고 SDK 장착 하기

by Nin J 2024. 4. 16.

안녕하세요.

구글 IMA 광고를 나의 앱 iOS, Swift 소스로 쉽게 구현하는 설명 및 가이드입니다.

일단 https://developers.google.com/interactive-media-ads/docs/sdks/ios/client-side?hl=ko

 

시작하기  |  IMA SDK for iOS  |  Google for Developers

Google 양방향 미디어 광고 (IMA)를 사용하면 게시자가 iOS에서 동영상, 오디오, 게임 콘텐츠에 광고를 요청하고 표시할 수 있습니다.

developers.google.com

가볍게 정식 가이드라인 보시면 간단히 설치 및 설명이 나와있습니다.

간단히 설명하자면

1. pod으로 해당 프레임워크 및 라이브러리 설치 

pod 'GoogleAds-IMA-iOS-SDK', '~> 3.22.1'

2. 해당 정식 가이드 구현된 소스 추가

저는 싱글톤 객체를 활용하여 독립적인 IMA 광고 Manager로 구현

https://nplayground.tistory.com/6

 

Swift 싱글턴 패턴(Singleton Pattern)

자주 쓰는 객체 같은 경우 Manager 모드로 어느곳이든 편히 쓸수 있을까? 그 방법은 싱글턴 패턴을 이용하여 사용하면 되는것이다. 예로 API 통신을 하는 ConnectionManager 만든 후 각각의 Func 정의후 필

nplayground.tistory.com

 

이와 같은 형식으로 독립 Manager로 구성

3. 플레이어 Controller에서 영상 재생 시 구글 광고 재생 설정

GoogleIMAManager.sharedInstance.setUpContentAD(adView: self.playerViewlayout, adPlayer: self.kPlayer ?? onairAdPlayer, adUrl: tempGoogleAdUrl , adViewController: self)

위에 소스 설명:

1) GoogleIMAManager.sharedInstance.setUpContentAD ==  독립적인 IMA 광고 Manager 객체 안에 함수 setUpContentAD

2) adView: self.playerViewlayout == 플레이어 뷰 적정 크기 및 위치를 adView에 전달

3) self.kPlayer ?? onairAdPlayer == 플레이어를 광고 함수에 전달

4) adUrl: tempGoogleAdUrl  == 구글 광고 url 전달

기본적이 소스들이 정식 가이드 SDK와 다르지만 독립적인 객체를 위해 필요한 값을 전달하는 로직을 만들어서

각각의 독립성을 살렸다.

각각의 독립성이 살아있으면 추후 및 유지보수 시 코드의 수정 코드의 오류등이 쉽게 잡아 낼 수 있고

또한 수정이 용이하다.

 

두 번째로 장착을 했으면 광고 이벤트를 catch 해야 하는데  이 부분은

// MARK: - IMAAdsManagerDelegate

func adsManager(_ adsManager: IMAAdsManager, didReceive event: IMAAdEvent) 항목에서 이벤트가 전달된다.

이벤트들 매우 많지만 필수적이 것만 나열하면

 

case IMAAdEventType.PAUSE: 광고 일시정지

case IMAAdEventType.RESUME: 광고 재개

case IMAAdEventType.TAPPED: 광고 탭

case IMAAdEventType.STARTED:광고 시작

case IMAAdEventType.SKIPPED: 건너뛰기

case IMAAdEventType.ALL_ADS_COMPLETED: 모든 광고 종료

 

그리고 소스 안에 해당 필요 액션을 설정하면 된다. 

ex) 한 예로 나는 광고 시작하면 숨겨져 있던 광고 텍스트를 노출시켰다.

 case IMAAdEventType.STARTED:

 appDelegate().rootMainviewController.kPlayerController.googleADText.isHidden = false

또한 IMAAdsManagerDelegate 포함된 함수들을 추가하면 추가로 이벤트를 Catch 할 수 있다.

func adsManager(_ adsManager: IMAAdsManager, didReceive error: IMAAdError) : IMAAdError 이벤트 상태

func adsManagerDidRequestContentPause(_ adsManager: IMAAdsManager) : Pause 이벤트 상태

func adsManagerDidRequestContentResume(_ adsManager: IMAAdsManager): Resume 이벤트 상태

3.구글 광고 재생 종료

그 후 프리롤 광고, 미드롤 광고, 프리롤 광고 2개, 미드롤 광고 2개 등등등 관리자 페이지에서 설정한 광고가 모두 끝나면 ALL_ADS_COMPLETED 이벤트가 주어지는데

그 부분에 나의 앱 영상 재생 코드를 ex)KPlayerManager.sharedInstance.playerPlay() 실행하면 본영상 재생을 진행 하게되고 그러면

스무스하게 광고를 진행할 수 있다.