iOS에서의 보상형 동영상 광고 연동

Unity LevelPlay 보상형 광고는 사용자가 시작하는 광고 단위로, 앱 내 보상을 대가로 전체 화면 광고에 참여할 기회를 제공하여 긍정적인 사용자 경험을 유지하면서 참여도를 높입니다.

Before you start
    • ironSource SDK를 애플리케이션에 올바르게 연동했는지 확인하세요. 연동 방법은 여기에 설명되어 있습니다.
    • LevelPlay 초기화 API를 사용하여 SDK를 초기화했는지 확인하세요.
    • AdUnitID는 LevelPlay 대시보드에서 찾을 수 있습니다. 여기에서 자세히 알아보세요.
    • 이 문서는 SDK 8.5.0 이상 버전에 해당합니다. 레거시 보상형 API(SDK 8.5.0 이하)에 대한 문서는 여기에서 찾을 수 있습니다.

    보상형 광고 객체 생성

    보상형 광고 객체 생성은 onInitSuccess 콜백을 수신한 후에 수행해야 합니다.

    이 객체는 세션 내내 여러 번의 로드와 표시를 처리할 수 있는 재사용 가능한 인스턴스입니다. 일단 생성되면 동일한 광고 단위의 광고를 로드하고 표시하는 데 사용해야 합니다.

    추가적인 고급 구현을 위해 필요한 경우 여러 개의 보상형 광고 객체를 생성할 수도 있습니다.

    self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"];
    self.rewardedAd = LPMRewardedAd(adUnitId: "adUnitId")

    델리게이트 구현

    코드에 LPMRewardedAdDelegate를 구현하여 광고 전송에 대한 정보를 받으세요. 

    • 보상형 광고를 로드하기 전에 델리게이트를 설정하는 것을 권장합니다.
    • 각 보상형 광고에는 고유한 델리게이트 구현이 있어야 합니다.
    • 델리게이트 메서드는 메인 스레드에서 실행됩니다.
    self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"]; 
    self.rewardedAd.delegate = self;
    
    #pragma mark - LPMRewardedAdDelegate Methods
    - (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}
    - (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}
    - (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}
    - (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
    - (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo error:(NSError *)error {}
    - (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
    - (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}
    - (void)didRewardAdWithAdInfo:(LPMAdInfo *)adInfo reward:(LPMReward *)reward {}
    self.rewardedAd = LPMRewardedAd(adUnitId: "adUnitId") 
    self.rewardedAd.setDelegate(self)
      
    // MARK: LPMRewardedAdDelegate methods
    func didLoadAd(with adInfo: LPMAdInfo) {}
    func didFailToLoadAd(withAdUnitId adUnitId: String, error: Error) {}
    func didChangeAdInfo(_ adInfo: LPMAdInfo) {}
    func didDisplayAd(with adInfo: LPMAdInfo) {}
    func didFailToDisplayAd(with adInfo: LPMAdInfo, error: Error) {}
    func didClickAd(with adInfo: LPMAdInfo) {}
    func didCloseAd(with adInfo: LPMAdInfo) {}
    func didRewardAd(with adInfo: LPMAdInfo, reward: LPMReward) {}

    LevelPlay 광고 정보

    광고 정보

    LPMAdInfo 파라미터에는 로드된 광고에 대한 정보가 포함됩니다.

    구현 방법 및 사용 가능한 필드에 대해 여기에서 자세히 알아보세요.

    보상형 광고 로드

    보상형 광고를 로드하려면 loadAd를 사용하세요.

    [self.rewardedAd loadAd];
    self.rewardedAd.loadAd()

    보상형 광고 표시

    didLoadAd 콜백을 받은 후 보상형 광고를 표시합니다.

    • ViewController를 공유해야 합니다
    • 게재위치를 사용하는 경우, 아래 게재위치 섹션에 표시된 것처럼 showAd API에 게재위치 이름을 전달합니다.
    • 광고가 사용자에게 성공적으로 표시되면 로드 단계를 반복하여 다른 광고를 로드할 수 있습니다. 
    - (void)showRewardedAd {
        // Check that ad is ready
        if ([self.rewardedAd isAdReady]) {
            // Show without placement
            [self.rewardedAd showAdWithViewController:self placementName:NULL];
        }
    }
    func showRewardedAd() {
        // Check that ad is ready  
        if self.rewardedAd.isAdReady() {
            // Show without placement
            self.rewardedAd.showAd(viewController: self, placementName: nil)
        }
    }

    광고 준비 완료 확인

    표시 실패를 방지하고 광고가 올바르게 표시될 수 있도록 showAd API를 호출하기 전에 다음 API를 사용하는 것을 권장합니다.

    isAdReady – 광고가 성공적으로 로드되었고 광고 단위가 캡핑(capping)되지 않은 경우 true를, 그렇지 않으면 false를 반환합니다.

    isPlacementCapped – 유효한 게재위치가 캡핑된 경우 true를 반환합니다. 게재위치가 유효하지 않거나 캡핑되지 않은 경우 이 API는 false를 반환합니다.

    // Check that ad is ready and that the placement is not capped 
    if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) {
        [self.rewardedAd showAdWithViewController:self placementName:placementName];
    }
    
    // Check that ad is ready and that the placement is not capped 
    if self.rewardedAd.isAdReady(), !LPMRewardedAd.isPlacementCapped(placementName) {
        self.rewardedAd.showAd(viewController: self, placementName: placementName)
    }

    게재위치

    LevelPlay 대시보드에서 보상형 광고에 대한 게재위치 페이스 조절 및 캡핑을 지원합니다.

    보상형 광고에 게재위치가 설정된 경우, showAd 메서드를 호출하여 특정 게재위치에 광고를 게재하세요.

    // Check that ad is ready and that the placement is not capped
     if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) {
        // Show ad with placement
        [self.rewardedAd showAdWithViewController:self placementName:@"PlacementName"];
    }
    // Check that ad is ready and that the placement is not capped 
    if self.rewardedAd.isAdReady(), !LPMRewardedAd.isPlacementCapped(placementName) {
        // Show ad with placement
        self.rewardedAd.showAd(viewController: self, placementName: placementName) 
    }

    사용자에게 보상 지급

    LevelPlay SDK는 사용자가 비디오를 성공적으로 완료할 때마다 didRewardAd 를 호출합니다.

    didRewardAd didCloseAd는 비동기적으로 처리됩니다. didRewardAd didCloseAd 이후에 호출되는 경우에도 보상을 지급하도록 리스너를 설정해야 합니다.

    - (void)didRewardAdWithAdInfo:(LPMAdInfo *)adInfo reward:(LPMReward *)reward {
        // Implement logic to grant the reward to the user
        NSString *name = reward.name; 
        NSInteger *amount = reward.amount;
    }
    
    func didRewardAd(with adInfo: LPMAdInfo, reward: LPMReward) {
        // Implement logic to grant the reward to the user
        let name: String = reward.name 
        let amount: Int = reward.amount
    }
    

    보상형 광고 전체 구현 예시

    NS_ASSUME_NONNULL_BEGIN
    @interface RewardedAdViewController () <LPMRewardedAdDelegate>
    @property(nonatomic, strong) LPMRewardedAd *RewardedAd;
    @end
    @implementation RewardedAdViewController
    - (void)createRewardedAd {
        self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"];
        self.rewardedAd.delegate = self;
    }
    - (void)loadRewardedAd {
        // used to load or reload the ad
        [self.rewardedAd loadAd];
    }
    - (void)showRewardedAd {
        if ([self.rewardedAd isAdReady]) {
            [self.rewardedAd showAdWithViewController:self placementName:NULL];
        }
    }
    - (void)showRewardedAdWithPlacementName:(NSString *)placementName {
        // check that ad is ready and that the placement is not capped 
        if ([self.rewardedAd isAdReady] && ![LPMRewardedAd isPlacementCapped:placementName]) {
            [self.rewardedAd showAdWithViewController:self placementName:placementName];
        }
    }
    #pragma mark - LPMRewardedAdDelegate Methods
    - (void)didLoadAdWithAdInfo:(LPMAdInfo *)adInfo {}
    - (void)didFailToLoadAdWithAdUnitId:(NSString *)adUnitId error:(NSError *)error {}
    - (void)didChangeAdInfo:(LPMAdInfo *)adInfo {}
    - (void)didDisplayAdWithAdInfo:(LPMAdInfo *)adInfo {}
    - (void)didFailToDisplayAdWithAdInfo:(LPMAdInfo *)adInfo error:(NSError *)error {}
    - (void)didClickAdWithAdInfo:(LPMAdInfo *)adInfo {}
    - (void)didCloseAdWithAdInfo:(LPMAdInfo *)adInfo {}
    - (void)didRewardAdWithAdInfo:(LPMAdInfo *)adInfo reward:(LPMReward *)reward {} 
    @end
    NS_ASSUME_NONNULL_END
    class RewardedAdViewController: UIViewController, LPMRewardedAdDelegate {
        var RewardedAd: LPMRewardedAd!
        
        func createRewardedAd() {
            self.rewardedAd = LPMRewardedAd(adUnitId: "adUnitId")
            self.rewardedAd.setDelegate(self)
        }
        
        func loadRewardedAd() {
            // used to load or reload the ad
            self.rewardedAd.loadAd()
        }
        
        func showRewardedAd() {
            if self.rewardedAd.isAdReady() {
                self.rewardedAd.showAd(viewController: self, placementName: nil)
            }
        }
        
        func showRewardedAd(withPlacementName placementName: String) {
            // check that ad is ready and that the placement is not capped 
            if self.rewardedAd.isAdReady(), !LPMRewardedAd.isPlacementCapped(placementName) {
                self.rewardedAd.showAd(viewController: self, placementName: placementName)
            }
        }
        
        // MARK: LPMRewardedAdDelegate methods
        func didLoadAd(with adInfo: LPMAdInfo) {}
        func didFailToLoadAd(withAdUnitId adUnitId: String, error: Error) {}
        func didChangeAdInfo(_ adInfo: LPMAdInfo) {}
        func didDisplayAd(with adInfo: LPMAdInfo) {}
        func didFailToDisplayAd(with adInfo: LPMAdInfo, error: Error) {}
        func didClickAd(with adInfo: LPMAdInfo) {}
        func didCloseAd(with adInfo: LPMAdInfo) {}
        func didRewardAd(with adInfo: LPMAdInfo, reward: LPMReward) {} 
    }

    LevelPlay 미디에이션 데모 앱

    연동 데모 애플리케이션에서 앱에 보상형 광고 단위 API를 연동하는 방법을 확인할 수 있습니다.

    iOS 데모 애플리케이션 다운로드

    완료!
    이제 애플리케이션에서 보상형 광고를 제공할 모든 준비가 되었습니다. 레벨플레이에서 제공하는 연동 Test Suite로 연동을 확인하세요.


    다음 단계는요?
    레벨플레이 연동 가이드를 따라 추가 보상형 광고 네트워크를 연동하거나 다른 광고 형식을 구성하세요: