動画リワード - 広告ユニットAPIへの移行
このガイドでは、SDK 8.6.0 以降で利用可能な LevelPlay API で、広告ユニット ID をウォーターフォール識別子として利用して動画リワードをロード・表示する方法について説明します。
本記事で紹介する API は、現在使用中の実装方法(ironSource init、ironSource load rewarded、rewarded listeners)の代わりに使用する必要があります。API の置き換えは以下に記載しています。
その他の SDK 設定および各種レギュレーションに関する詳細設定は変更されておらず、LevelPlay SDK 初期化前後どちらでもサポートされています。
LevelPlay プラットフォームで広告ユニット ID を確認する
リワード広告をロード・表示するには、LevelPlay メディエーションプラットフォームで利用できる広告ユニット ID を使用する必要があります。
LevelPlayアカウントで「Setup → Ad Units」に移動します。
動画リワード広告ユニット ID をコピーし、コードに実装します。
ironSource SDK の初期化
ironSource SDK を初期化するには、以下の手順に従ってください:
- 成功・失敗の完了ハンドラーを定義します。
- セッションで初期化する広告フォーマットのリストを定義します。これは複数広告ユニットAPIを利用しないすべての広告フォーマットを含める必要があります。
- appKey、広告フォーマット、必要に応じてユーザーIDを使ってLevelPlay init APIを呼び出します。
// appKey ã§ãªã¯ã¨ã¹ããã«ãã¼ã使ãå©ç¨å¯è½ãªãUser IDã追å
LPMInitRequestBuilder *requestBuilder = [[LPMInitRequestBuilder alloc] initWithAppKey:@"appKey"];
[requestBuilder withUserId:@"UserId"];
// åæãªã¯ã¨ã¹ãã使
LPMInitRequest *initRequest = [requestBuilder build];
// ç¨æãããªã¯ã¨ã¹ãã§LevelPlayãåæå
[LevelPlay initWithRequest:initRequest completion:^(LPMConfiguration *_Nullable config, NSError *_Nullable error){
if(error) {
// åæåã§ã¨ã©ã¼çºçãå¿
è¦ãªå¯¾å¿ã¾ãã¯å試è¡
} else {
// åæåæåãããã¼åºåã®ãã¼ããä»ã®å¦çãå¯è½
}
}];
// app keyã§ãªã¯ã¨ã¹ããã«ãã¼ã使ãå©ç¨å¯è½ãªãUser IDã追å
let requestBuilder = LPMInitRequestBuilder(appKey: "appKey")
.withUserId("UserId")
// åæãªã¯ã¨ã¹ãã使
let initRequest = requestBuilder.build()
// ç¨æãããªã¯ã¨ã¹ãã§LevelPlayãåæå
LevelPlay.initWith(initRequest)
{ config, error in
if let error = error {
// åæåã§ã¨ã©ã¼çºçãå¿
è¦ãªå¯¾å¿ã¾ãã¯å試è¡
} else {
// åæåæåãåºåã®ãã¼ããä»ã®å¦çãå¯è½
}
}
初期化の結果
Success – 初期化が正常に完了したときに発火します。この通知を受け取ったら、広告の作成とロードが可能です。
Error – 設定が正常に取得できず広告をロードできません。後ほど(インターネット接続が利用できる、または障害が解消したときなど)ironSource SDK の初期化を再試行することを推奨します。
レガシー | 広告ユニット(New) | |
API | IronSource.initWithAppKey | LevelPlay.initWithRequest |
初期化の結果 | onInitializationComplete | completion |
– | error |
動画リワード広告の作成
動画リワード広告オブジェクトの作成は completion 結果を受け取った後に実施してください。
広告オブジェクトはセッション中に複数回のロードや表示に再利用できます。一度作成したら同じ広告ユニットをロード・表示に使用してください。
より高度な実装が必要な場合は、複数のリワード広告オブジェクトを作成しても構いません。
// Create rewarded ad
self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"];
// Create rewarded ad
self.rewardedAd = LPMRewardedAd(adUnitId: "adUnitId")
動画リワードデリゲートの実装
作成したリワード広告ユニットに対して LPMRewardedAdDelegate を実装し、広告配信の通知を受け取ります。
- リワード広告のロード前にリスナーを設定することを推奨します。
- 各リワード広告ごとに独自のリスナー実装が必要です。
- コールバックはメインスレッドで実行されます。
// Create rewarded ad
self.rewardedAd = [[LPMRewardedAd alloc] initWithAdUnitId:@"adUnitId"];
// Implement delegate
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 {}
// Create rewarded ad
self.rewardedAd = LPMRewardedAd(adUnitId: "adUnitId")
// Implement delegate
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 動画リワード広告イベント
didLoadAd – 広告のロードに成功したときに通知されます。
didFailToLoadAd – 広告のロードに失敗したときに通知されます。広告ユニット情報が含まれます。
didDisplayAd – 広告が表示されたときに通知されます(インプレッション相当)。
didFailToDisplayAd – 広告の表示に失敗したときに通知されます。
didRewardAd – 広告視聴でリワードが発生したときに通知されます。広告ユニットおよびリワード情報が含まれます。
didClickAd(任意) – ユーザーが広告をクリックしたときに通知されます。
didCloseAd – 広告が閉じられたときに通知されます。
didChangeAdInfo(任意) – 広告情報が更新されたときに通知されます。別の広告がロードされ CPM/Rate が高くなった場合など。
レガシー | 広告ユニット(New) | |
Delegate | LevelPlayRewardedAdDelegate | LPMRewardedAdDelegate |
Events | onAdReady | didLoadAd |
onAdLoadFailed | didFailToLoadAd | |
onAdOpened | didDisplayAd | |
onAdClosed | didCloseAd | |
onAdShowFailed | didFailToDisplayAd | |
onAdRewarded | didRewardAd | |
onAdClicked | didClickAd | |
onAdShowSucceeded | –(廃止) | |
– | didChangeAdInfo |
動画リワード広告のロード
onInitSuccess コールバックを受け取ったら、動画リワード広告のロードが可能です。次のメソッドを使用します。
// Load or reload the ad
[self.rewardedAd loadAd];
// Load or reload the ad
self.rewardedAd.loadAd()
動画リワード広告の表示
onAdLoaded コールバックを受け取った後、showAd API でリワード広告を表示できます。
プレースメントを使用している場合は、下記のように API で指定してください。
// Show without placement
[self.rewardedAd showAdWithViewController:self placementName:nil];
// Show with placement
[self.rewardedAd showAdWithViewController:self placementName:placementName];
// Show without placement
self.rewardedAd.showAd(viewController: self, placementName: nil)
// Show with placement
self.rewardedAd.showAd(viewController: self, placementName: placementName)
広告の準備状態を確認
表示失敗を防ぎ、広告が正しく表示できるよう、showAd API呼び出し前に次のAPIを使うことを推奨します。
isAdReady – 広告が正常にロードされ、広告ユニットがキャップされていなければ true、それ以外は false。
isPlacementCapped – 有効なプレースメントがキャップに達していれば true。無効またはキャップに達していない場合は 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)
}
プレイヤーに広告が正常に表示された後は、動画リワード広告のロードステップを繰り返して次の広告をロードできます。1度に1つの広告をロードする場合、新たな広告エンティティを作成する必要はありません。
ユーザーにリワードを付与
LevelPlay SDK は、ユーザーが動画を正常に完了するたびに didRewardAd を発火します。
didRewardAd と didCloseAd は非同期です。didCloseAd の後にdidRewardAd が発火する場合もあるため、いずれの場合も必ずリワードが付与される処理を行ってください。
- (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
}
マルチ広告ユニット対応動画リワード API
レガシー | 広告ユニット(New) | |
Class | IronSource | LPMRewardedAd |
API | loadRewardedVideo | loadAd |
showRewardedVideo | showAd | |
isRewardedVideoPlacementCapped | isPlacementCapped | |
isRewardedVideoAvailable | isAdReady | |
placement.getRewardName | reward.name | |
placement.getRewardAmount | 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 {
// 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() {
// 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) {}
}