動画リワード - 広告ユニット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 をコピーし、コードに実装します。
エディター内で実装テストが可能です。Unity Editorでモック広告をプレビューする方法については、モック広告プレビューガイドをご覧ください。
ironSource SDK の初期化
ironSource SDK を初期化するには、以下の手順に従ってください:
- 初期化成功と失敗のコールバックを実装します。
- セッションで初期化する広告フォーマットのリストを定義します。これは複数広告ユニットAPIを利用しないすべての広告フォーマットを含める必要があります。
- appKey、広告フォーマット、必要に応じてユーザーIDを使って LevelPlay init API を呼び出します。
LevelPlayInitRequest initRequest = new LevelPlayInitRequest.Builder(appKey)
.build();
LevelPlayInitListener initListener = new LevelPlayInitListener() {
@Override
public void onInitFailed(@NonNull LevelPlayInitError error) {}
@Override
public void onInitSuccess(LevelPlayConfiguration configuration) {}
};
LevelPlay.init(context, initRequest, initListener);
val initRequest = LevelPlayInitRequest.Builder("AppKey")
.withUserId("UserId")
.build()
LevelPlay.init(context, initRequest, object: LevelPlayInitListener {
override fun onInitSuccess(configuration: LevelPlayConfiguration) {}
override fun onInitFailed(error: LevelPlayInitError) {}
}
LevelPlay 初期化リスナー
onInitSuccess – 初期化が正常に完了したときに発火します。この通知を受け取ったら、広告の作成とロードが可能です。
onInitFailed – 設定が正常に取得できず広告をロードできません。後ほど(インターネット接続が利用できる、または障害が解消したときなど)ironSource SDK の初期化を再試行することを推奨します。
レガシー | 広告ユニット(New) | |
API | IronSource.init | LevelPlay.init |
Callbacks | onInitializationComplete | onInitSuccess |
– | onInitFailed |
動画リワード広告オブジェクトの作成
動画リワード広告オブジェクトの作成は onInitSuccess コールバックを受け取った後に行う必要があります。
オブジェクトはセッション中に複数回のロードや表示に再利用できます。一度作成したら同じ広告ユニットをロード・表示に使用してください。
より高度な実装が必要な場合は、複数の動画リワード広告オブジェクトを作成しても構いません。
// Create rewarded Ad
mRewardedAd = new LevelPlayRewardedAd("adUnitId");
// Create rewarded Ad
mRewardedAd = LevelPlayRewardedAd("adUnitId")
動画リワードイベントの登録
作成した動画リワード広告ユニットにリスナーを設定し、広告配信の通知を受け取ります。
- <liリワード広告のロード前にリスナーを設定することを推奨します。
- 各リワード広告ごとに独自のリスナー実装が必要です。
- コールバックはメインスレッドで実行されます。
// Create rewarded ad
mRewardedAd = new LevelPlayRewardedAd("adUnitId");
// Set listener
mRewardedAd.setListener(this);
// LevelPlayRewardedAdListener methods
@Override
public void onAdLoaded(@NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdLoadFailed(@NonNull LevelPlayAdError error) {}
@Override
public void onAdDisplayed(@NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdDisplayFailed(@NonNull LevelPlayAdError error, @NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdClosed(@NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdClicked(@NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdInfoChanged(@NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdRewarded(@NonNull LevelPlayReward reward, @NonNull LevelPlayAdInfo adInfo) {}
// Create rewarded ad
mRewardedAd = LevelPlayRewardedAd("adUnitId")
// Set listener
mRewardedAd.setListener(this)
// LevelPlayRewardedAdListener methods
override fun onAdLoaded(adInfo: LevelPlayAdInfo) {}
override fun onAdLoadFailed(error: LevelPlayAdError) {}
override fun onAdInfoChanged(adInfo: LevelPlayAdInfo) {}
override fun onAdDisplayed(adInfo: LevelPlayAdInfo) {}
override fun onAdDisplayFailed(error: LevelPlayAdError, adInfo: LevelPlayAdInfo) {}
override fun onAdClicked(adInfo: LevelPlayAdInfo) {}
override fun onAdClosed(adInfo: LevelPlayAdInfo) {}
override fun onAdRewarded(reward: LevelPlayReward, adInfo: LevelPlayAdInfo) {}
LevelPlay 動画リワード広告コールバック
onAdLoaded – 広告のロードに成功したときに通知されます。
onAdLoadFailed – 広告のロードに失敗したときに通知されます。広告ユニット情報が含まれます。
onAdDisplayed – 広告が表示されたときに通知されます(インプレッション相当)。
onAdDisplayFailed – 広告の表示に失敗したときに通知されます。
onAdRewarded – 広告視聴でリワードが発生したときに通知されます。広告ユニットおよびリワード情報が含まれます。
onAdClicked(任意) – ユーザーが広告をクリックしたときに通知されます。
onAdClosed – 広告が閉じられたときに通知されます。
onAdInfoChanged(任意) – 広告情報が更新されたときに通知されます。別の広告がロードされCPM/レートが高くなった場合など。
レガシー | 広告ユニット(New) | |
Listener | IronSourceRewardedVideoEvents | LevelPlayRewardedAd |
Callbacks | onAdReady | onAdLoaded |
onAdLoadFailed | onAdLoadFailed | |
onAdOpened | onAdDisplayed | |
onAdClosed | onAdClosed | |
onAdShowFailed | onAdDisplayFailed | |
onAdRewarded | onAdRewarded | |
onAdClicked | onAdClicked | |
onAdShowSucceeded | –(廃止) | |
– | onAdInfoChanged |
動画リワード広告のロード
onInitSuccess コールバックを受け取ったら、リワード広告のロードが可能です。次のメソッドを使用します。
// Load or reload the ad
mRewardedAd.loadAd();
// Load or reload the ad
mRewardedAd.loadAd()
動画リワード広告の表示
onAdLoadedコールバックを受け取った後、showAd API でリワード広告を表示できます。
プレースメントを使用している場合は、下記のように API で指定してください。
// Show ad without placement
mRewardedAd.showAd(this);
// Show ad with placement
mRewardedAd.showAd(this, placementName);
// Show ad without placement
mRewardedAd.showAd(this)
// Show ad with placement
mRewardedAd.showAd(this, placementName)
広告のロード状態を確認
表示失敗を防ぎ、広告が正しく表示できるよう、showAd API 呼び出し前に次の API を使うことを推奨します。
isAdReady – 広告が正常にロードされ、広告ユニットがキャップに達していなければ true、それ以外は false。
isPlacementCapped – 有効なプレースメントがキャップに達していれば true。無効またはキャップに達していない場合は false。
// Check that ad is ready and that the placement is not capped
if(mRewardedAd.isAdReady() && !LevelPlayRewardedAd.isPlacementCapped(placementName)) {
mRewardedAd.showAd(this, placementName);
}
// Check that ad is ready and that the placement is not capped
if (mRewardedAd.isAdReady() && !LevelPlayRewardedAd.isPlacementCapped(placementName)) {
mRewardedAd.showAd(this, placementName)
}
プレイヤーに広告が正常に表示された後は、動画リワード広告のロードステップを繰り返して次の広告をロードできます。1度に1つの広告をロードする場合、新たな広告オブジェクトを作成する必要はありません。
ユーザーにリワードを付与
LevelPlay SDK は、ユーザーが動画を正常に完了するたびに onAdRewarded を発火します。
onAdRewarded と onAdClosed は非同期です。onAdClosed の後に onAdRewarded が発火する場合もあるため、いずれの場合も必ずリワードが付与される処理を行ってください。
@override
public void onAdRewarded(@NonNull LevelPlayReward reward, @NonNull LevelPlayAdInfo adInfo) {
// Implement logic to grant the reward to the user
String name = reward.getName();
int amount = reward.getAmount();
}
override fun onAdRewarded(reward: LevelPlayReward, adInfo: LevelPlayAdInfo) {
// Implement logic to grant the reward to the user
val name: String = reward.name
val amount: Int = reward.amount
}
マルチ広告ユニット対応動画リワード API
レガシー | 広告ユニット(New) | |
Class | IronSource | LevelPlayRewardedAd |
API | loadRewardedVideo | loadAd |
showRewardedVideo | showAd | |
isRewardedVideoPlacementCapped | isPlacementCapped | |
isRewardedVideoAvailable | isAdReady | |
placement.getRewardName | reward.name | |
placement.getRewardAmount | reward.amount |
動画リワード広告のフル実装例
public class RewardedAdActivity extends Activity implements LevelPlayRewardedAdListener {
private LevelPlayRewardedAd mRewardedAd;
void createRewardedAd() {
mRewardedAd = new LevelPlayRewardedAd("adUnitId");
mRewardedAd.setListener(this);
}
void loadRewardedAd() {
// Load or reload the ad
mRewardedAd.loadAd();
}
void showRewardedAd() {
if(mRewardedAd.isAdReady()) {
mRewardedAd.showAd(this);
}
}
void showRewardedAd(@NonNull String placementName) {
// Check that ad is ready and that the placement is not capped
if(mRewardedAd.isAdReady() && !LevelPlayRewardedAd.isPlacementCapped(placementName)) {
mRewardedAd.showAd(this, placementName);
}
}
// LevelPlayRewardedAdListener methods
@Override
public void onAdLoaded(@NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdLoadFailed(@NonNull LevelPlayAdError error) {}
@Override
public void onAdDisplayed(@NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdClosed(@NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdClicked(@NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdDisplayFailed(@NonNull LevelPlayAdError error, @NonNull LevelPlayAdInfo adInfo) {}
@Override
public void onAdInfoChanged(@NonNull LevelPlayAdInfo adInfo) {}
public void onAdRewarded(@NonNull LevelPlayReward reward, @NonNull LevelPlayAdInfo adInfo) {}
}
class RewardedAdActivity : Activity(), LevelPlayRewardedAdListener {
private lateinit var mRewardedAd: LevelPlayRewardedAd
fun createRewardedAd() {
mRewardedAd = LevelPlayRewardedAd("adUnitId")
mRewardedAd.setListener(this)
}
fun loadRewardedAd() {
mRewardedAd.loadAd()
}
fun showRewardedAd() {
if (mRewardedAd.isAdReady()) {
mRewardedAd.showAd(this)
}
}
fun showRewardedAd(placementName: String) {
// Check that ad is ready and that the placement is not capped
if (mRewardedAd.isAdReady() && !LevelPlayRewardedAd.isPlacementCapped(placementName)) {
mRewardedAd.showAd(this, placementName)
}
}
// LevelPlayRewardedAdListener methods
override fun onAdLoaded(adInfo: LevelPlayAdInfo) {}
override fun onAdLoadFailed(error: LevelPlayAdError) {}
override fun onAdInfoChanged(adInfo: LevelPlayAdInfo) {}
override fun onAdDisplayed(adInfo: LevelPlayAdInfo) {}
override fun onAdDisplayFailed(error: LevelPlayAdError, adInfo: LevelPlayAdInfo) {}
override fun onAdClicked(adInfo: LevelPlayAdInfo) {}
override fun onAdClosed(adInfo: LevelPlayAdInfo) {}
override fun onAdRewarded(reward: LevelPlayReward, adInfo: LevelPlayAdInfo) {}
}