iOS에서의 보상형 동영상 광고 연동
Unity LevelPlay 보상형 광고는 사용자가 시작하는 광고 단위로, 앱 내 보상을 대가로 전체 화면 광고에 참여할 기회를 제공하여 긍정적인 사용자 경험을 유지하면서 참여도를 높입니다.
보상형 광고 객체 생성
보상형 광고 객체 생성은 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를 사용하세요.
보상형 광고 표시
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를 연동하는 방법을 확인할 수 있습니다.
완료!
이제 애플리케이션에서 보상형 광고를 제공할 모든 준비가 되었습니다. 레벨플레이에서 제공하는 연동 Test Suite로 연동을 확인하세요.
레벨플레이 연동 가이드를 따라 추가 보상형 광고 네트워크를 연동하거나 다른 광고 형식을 구성하세요: