iOS에서의 인터스티셜 광고 연동

아이언소스 인터스티셜(전면) 광고는 전체화면 광고 유닛으로, 보통 앱의 생명주기 중 자연스러운 장면 전환 시점에 게재되는 광고입니다. 아이언소스는 정지화면 및 동영상 인터스티셜 광고들 모두를 지원합니다. 또한, 레벨플레이 미디에이션 플랫폼을 통해 인터스티셜 광고를 게재할 수도 있습니다.

시작하기 전에 읽어주세요 아이언소스 SDK가 대상 앱에 올바르게 연동이 되었는지 확인해 주세요. 여기에서 연동과정 및 상세 사항에 대한 설명을 참조하세요.

1단계. 대리자(Delegate) 구현

아이언소스 SDK는 인터스티셜 동작에 대해 여러 이벤트들을 송출합니다. SDK는 아래에 열거된 가능한 모든 이벤트들에 대한 정보를 대리자(Delegate)를 통해 전달합니다:

+ (void)setLevelPlayInterstitialDelegate:(nullable id<LevelPlayInterstitialDelegate>)delegate;
#pragma mark - LevelPlayInterstitialDelegate
/**
 Called after an interstitial has been loaded
 @param adInfo The info of the ad.
 */
- (void)didLoadWithAdInfo:(ISAdInfo *)adInfo {
}
/**
 Called after an interstitial has attempted to load but failed.
 @param error The reason for the error
 */
- (void)didFailToLoadWithError:(NSError *)error {
}
/**
 Called after an interstitial has been opened. 
 This is the indication for impression. 
 @param adInfo The info of the ad.
 */
- (void)didOpenWithAdInfo:(ISAdInfo *)adInfo {
}
/**
 Called after an interstitial has been dismissed.
 @param adInfo The info of the ad.
 */
- (void)didCloseWithAdInfo:(ISAdInfo *)adInfo {
}
/**
 Called after an interstitial has attempted to show but failed.
 @param error The reason for the error
 @param adInfo The info of the ad.
 */
- (void)didFailToShowWithError:(NSError *)error andAdInfo:(ISAdInfo *)adInfo {
}
/**
 Called after an interstitial has been clicked.
 @param adInfo The info of the ad.
 */
- (void)didClickWithAdInfo:(ISAdInfo *)adInfo {
}
/**
 Called after an interstitial has been displayed on the screen.
 This callback is not supported by all networks, and we recommend using it 
 only if it's supported by all networks you included in your build. 
 @param adInfo The info of the ad.
 */
- (void)didShowWithAdInfo:(ISAdInfo *)adInfo {
}
IronSource.setLevelPlayInterstitialDelegate(delegate: LevelPlayInterstitialDelegate?)

// MARK: LevelPlayInterstitialDelegate

/**
 Called after an interstitial has been loaded
 @param adInfo The info of the ad.
 */
func didLoad(with adInfo: ISAdInfo!) {
}

/**
 Called after an interstitial has attempted to load but failed.
 @param error The reason for the error
 */        
func didFailToLoadWithError(_ error: Error!) {
}

/**
 Called after an interstitial has been opened. 
 This is the indication for impression. 
 @param adInfo The info of the ad.
 */        
func didOpen(with adInfo: ISAdInfo!) {
}

/**
 Called after an interstitial has been dismissed.
 @param adInfo The info of the ad.
 */       
func didClose(with adInfo: ISAdInfo!) {
}

/**
 Called after an interstitial has attempted to show but failed.
 @param error The reason for the error
 @param adInfo The info of the ad.
 */        
func didFailToShowWithError(_ error: Error!, andAdInfo adInfo: ISAdInfo!) {
}

/**
 Called after an interstitial has been clicked.
 @param adInfo The info of the ad.
 */
func didClick(with adInfo: ISAdInfo!) {
}

/**
 Called after an interstitial has been displayed on the screen.
 This callback is not supported by all networks, and we recommend using it 
 only if it's supported by all networks you included in your build. 
 @param adInfo The info of the ad.
 */
func didShow(with adInfo: ISAdInfo!) {
}
Note: 위의 콜백은 메인스레드 이외의 스레드에서 실행될 수도 있습니다. 아이언소스 콜백 결과에 영향받는 UI 상호작용이나 업데이트들은 모두 메인스레드로 넘겨진 후 실행되어야 합니다.

전체 대리자(Delegate) 구현은 여기를 참고해 주세요.

2단계. 인터스티셜 광고 로드하기

인터스티셜 광고는 로딩 과정에서 다소 시간이 걸릴 수 있기 때문에 사용자에게 송출하기에 앞서 약간의 시간을 두고 광고를 요청하는 것이 좋습니다. 단시간내에 인터스티셜 광고에 대한 연속 요청은 권장하지 않습니다. 단시간 내의 복수 요청은 결국 해당 시간대의 제공가능 광고 목록을 줄여서 광고 제공 가능성을 낮추기 때문에 이로 인해 얻을 수 있는 이점이 없습니다.

인터스티셜 광고를 요청하려면 아래의 함수를 호출해 주세요:

[IronSource loadInterstitial];
IronSource.loadInterstitial()
Note: 복수의 인터스티셜 광고 게재를 위해서는 위의 과정을 반복할 때 반드시 이전 인터스티셜 광고가 출력되고 닫힌 시점에서 수행해야 합니다. didClose 함수가 호출되고 난 이후에는 새로운 인터스티셜 광고 로딩이 가능합니다. 

3단계. 광고 준비 상태 확인

2단계에서 loadInterstitial을 호출한 다음, didLoad 메서드를 포함한 대리자(Delegate)를 통해 광고가 로딩되고 사용자에게 송출할 준비가 되었음이 이벤트로 전달됩니다.

//Called after an interstitial has been loaded
- (void)didLoadWithAdInfo:(ISAdInfo *)adInfo{}
/**
 Called after an interstitial has been loaded
*/
public func didLoad(with adInfo: ISAdInfo) {
}

또는, 아래의 함수를 직접 호출해서 광고 준비 상태를 boolean 값으로 확인할 수도 있습니다. 준비가 되었을 경우 true, 되지 않은 경우 false를 반환합니다:

[IronSource hasInterstitial];
IronSource.hasInterstitial()

인터스티셜 광고가 준비되면 사용자에게 광고를 송출할 수 있습니다. 이 때, 레벨플레이 광고 플레이스먼트(게재 위치)을 사용하여 인터스티셜 광고 경험을 커스터마이징 및 최적화 할 수 있습니다. 이 도구를 사용해 인터스티셜 광고를 앱 내의 각기 다른 곳(예: 앱 구동 시, 단계 사이 화면 등)에서 송출할 수 있습니다. 다음 단계의 함수를 사용해서 어느 플레이스먼트에서 광고를 송출할 지 지정할 수 있습니다.

아이언소스의 광고 플레이스먼트기능에서는 특정 플레이스먼트의 광고의 횟수 제한 및 빈도 제한 설정도 할 수 있습니다. 광고의 횟수 및 빈도 제한은 지정된 시간 동안에 게재 가능한 광고의 숫자를 제한하여 사용자의 앱 사용 경험을 향상시킵니다.

사용자에게 인터스티셜 광고를 제공하기 전에 아래와 같이 광고가 게재될 플레이스먼트가 횟수 제한이 있는지 확인해 보시기를 권장 드립니다:

[IronSource isInterstitialCappedForPlacement:placementName];
IronSource.isInterstitialCapped(forPlacement: “placement”)

광고 플레이스먼트(게재 위치) 문서로 이동하시면 상세 정보를 보실 수 있습니다.

4단계. 인터스티셜 광고 송출하기

didLoad콜백을 수신하고 나면, 인터스티셜 광고를 사용자에게 송출할 준비가 완료된 것입니다. 사용자에게 최상의 광고 경험을 제공하기 위해서는 광고가 송출되는 동안 오디오를 비롯한 모든 게임 동작을 일시 정지해 주세요.

다음의 메서드를 호출하여 사용자에게 인터스티셜 광고를 송출하세요:

(void)showInterstitialWithViewController:(UIViewController *)viewController;
IronSource.showInterstitial(with: UIViewController)

만약 인터스티셜 광고에 플레이스먼트(게재 위치)를 설정했다면, 해당 플레이스먼트에 인터스티셜 광고가 송출될 수 있도록 아래의 메서드를 호출하세요:

[IronSource showInterstitialWithViewController:YOUR_VIEWCONTROLLER placement:YOUR_PLACEMENT_NAME]
IronSource.showInterstitial(with: UIViewController, placement: String?)

중요합니다! 4단계까지 성공적으로 완료했다면, 사용자에게 인터스티셜 광고가 표시되었을 것입니다. 이 경우 만약 다른 인터스티셜 광고를 표시하려면 2단계부터 다시 시작해서 추가로 인터스티셜 광고를 요청해야 합니다.

완료했습니다!
이제 아이언소스 인터스티셜 광고를 레벨플레이 미디에이션 플랫폼을 통해 제공할 수 있습니다!

최초 연동시의 팁

만약 앱에 처음으로 아이언소스 SDK를 연동하는 경우라면, 이 앱은 아이언소스 대시보드에서 테스트 모드로 기본 설정되어 있을 것입니다. 앱이 테스트 모드일 때에는 아이언소스 SDK는 SDK 처리과정을 좀 더 자세히 볼 수 있도록 더 많은 로그를 콘솔에 송출합니다. 광고 인벤토리 테스트를 위해서는, 테스트 기기를 설정해 주세요. 광고 인벤토리를 라이브 (상용) 모드로 변경하기 전까지는 테스트 캠페인에서 광고를 받고 이 광고들은 수익을 발생시키지 않습니다. 상용 광고 인벤토리의 광고를 앱에 게재할 준비가 되었다면 반드시 레벨플레이 대시보드의 MONETIZE > SETTINGS > Ad Units 페이지에서 Go Live!를 선택해 주세요.
ironsource-go-live-with-rewarded-video

다음엔 뭘 할까요?
Follow our integration guides to integrate additional Interstitial Ad networks or configure additional ad units:

 

You can read this article in: