動画リワード - 広告ユニット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 を呼び出します。
using com.unity3d.mediation;
// Init the SDK when implementing the Multiple Ad Units API for Interstitial, Banner, and Rewarded
LevelPlayAdFormat[] legacyAdFormats = new[] { LevelPlayAdFormat.REWARDED };
LevelPlay.OnInitSuccess += SdkInitializationCompletedEvent;
LevelPlay.OnInitFailed += SdkInitializationFailedEvent;
LevelPlay.Init(appKey,legacyAdFormats);
LevelPlay 初期化リスナー
OnInitSuccess – 初期化が正常に完了したときに発火します。この通知を受け取った後で、広告の作成とロードが可能です。
OnInitFailed – 設定が正常に取得できず広告をロードできません。後ほど(インターネット接続が利用できる、または障害が解消したときなど)ironSource SDK の初期化を再試行することを推奨します。
レガシー | 広告ユニット(New) | |
API | IronSource.init | LevelPlay.Init |
Events | onInitializationComplete | OnInitSuccess |
– | OnInitFailed |
動画リワード広告オブジェクトの作成
リワード広告オブジェクトの作成は OnInitSuccess コールバックを受け取った後に行う必要があります。
オブジェクトはセッション中に複数回のロードや表示に再利用できます。一度作成したら同じ広告ユニットをロード・表示に使用してください。
より高度な実装が必要な場合は、複数の動画リワード広告オブジェクトを作成しても構いません。
private LevelPlayRewardedAd rewardedAd;
// Create rewarded Ad
rewardedAd = new LevelPlayRewardedAd(adUnitId);
リワードイベントの登録
作成した動画リワード広告ユニットにリスナーを設定し、広告配信関連の通知を受け取ります。
- 動画リワード広告のロード前にリスナーを設定することを推奨します。
- 各動画リワード広告それぞれにリスナー実装が必要です。
- コールバックはメインスレッドで実行されます。
private LevelPlayRewardedAd rewardedAd;
// Create rewarded Ad
rewardedAd = new LevelPlayRewardedAd(adUnitId);
// Register to events
rewardedAd.OnAdLoaded += OnAdLoaded;
rewardedAd.OnAdLoadFailed += OnAdLoadFailed;
rewardedAd.OnAdDisplayed += OnAdDisplayed;
rewardedAd.OnAdDisplayFailed += OnAdDisplayFailed;
rewardedAd.OnAdRewarded += OnAdRewarded;
rewardedAd.OnAdClosed += OnAdClosed;
// Optional
rewardedAd.OnAdClicked += OnAdClicked;
rewardedAd.OnAdInfoChanged += OnAdInfoChanged;
LevelPlayリワード広告イベント
OnAdLoaded – 広告のロードに成功したときに通知されます。
OnAdLoadFailed – 広告のロードに失敗したときに通知されます。広告ユニット情報が含まれます。
OnAdDisplayed – 広告が表示されたときに通知されます(インプレッション相当)。
OnAdDisplayFailed – 広告の表示に失敗したときに通知されます。
OnAdRewarded – 広告視聴でリワードが発生したときに通知されます。広告ユニットおよびリワード情報が含まれます。
OnAdClicked(任意) – ユーザーが広告をクリックしたときに通知されます。
OnAdClosed – 広告が閉じられたときに通知されます。
OnAdInfoChanged(任意) – 広告情報が更新されたときに通知されます。別の広告がロードされ CPM (Rate) が高くなった場合など。
レガシー | 広告ユニット(New) | |
Listener | IronSourceRewardedVideoEvents | LevelPlayRewardedAd |
Events | onAdReady | OnAdLoaded |
onAdLoadFailed | OnAdLoadFailed | |
onAdOpened | OnAdDisplayed | |
onAdClosed | OnAdClosed | |
onAdShowFailed | OnAdDisplayFailed | |
onAdRewarded | OnAdRewarded | |
onAdClicked | OnAdClicked | |
onAdShowSucceeded | –(廃止) | |
– | OnAdInfoChanged |
動画リワード広告のロード
OnInitSuccess イベントを受け取ったら、リワード広告のロードが可能です。次のメソッドを使用します。
// Load or reload the ad
rewardedAd.LoadAd();
動画リワード広告の表示
OnAdLoaded イベントを受け取った後、ShowAd API で動画リワード広告を表示できます。
プレースメントを使用している場合は、下記のようにAPIで指定してください。
// Show ad without placement
rewardedAd.ShowAd();
// Show ad with placement
rewardedAd.ShowAd(placementName);
広告のロード状態を確認
表示失敗を防ぎ、広告が正しく表示できるよう、ShowAd API 呼び出し前に次の API を使うことを推奨します。
IsAdReady – 広告が正常にロードされ、広告ユニットがキャップされていなければ true、それ以外は false。
IsPlacementCapped – 有効なプレースメントがキャップに達していれば true。無効またはキャップに達していない場合は false。
// Check that ad is ready and that the placement is not capped
if (rewardedAd.IsAdReady() && !LevelPlayRewardedAd.IsPlacementCapped(placementName))
{
rewardedAd.ShowAd(placementName);
}
プレイヤーに広告が正常に表示された後は、動画リワード広告のロードステップを繰り返して次の広告をロードできます。1度に1つの広告をロードする場合、新たな広告オブジェクトを作成する必要はありません。
ユーザーにリワードを付与
LevelPlay SDK は、ユーザーが動画を正常に完了するたびに OnAdRewarded を発火します。
OnAdRewarded と OnAdClosed は非同期です。OnAdClosed の後に OnAdRewarded が発火する場合もあるため、いずれの場合も必ずリワードが付与される処理を行ってください。
// Subscribe to the OnAdRewarded event
ad.OnAdRewarded += (adInfo, reward) =>
{
// Grant the reward to the user
Debug.Log($"Ad Completed: {adInfo.PlacementName}, Reward: {reward.Name} - {reward.Amount}");
GrantReward(reward.Name, reward.Amount);
};
// Example method to process the reward
private void GrantReward(string rewardName, int rewardAmount)
{
// TODO: Implement logic to grant the reward to the user
Debug.Log($"Granting reward: {rewardName} with amount: {rewardAmount}");
}
マルチ広告ユニット対応動画リワード API
レガシー | 広告ユニット(New) | |
Class | IronSource | LevelPlayRewardedAd |
API | loadRewardedVideo | LoadAd |
showRewardedVideo | ShowAd | |
isRewardedVideoPlacementCapped | IsPlacementCapped | |
isRewardedVideoAvailable | IsAdReady | |
placement.getRewardName | reward.Name | |
placement.getRewardAmount | reward.Amount |
動画リワード広告のフル実装例
public class LevelPlaySample : MonoBehaviour
{
private LevelPlayRewardedAd rewardedAd;
void CreateRewardedAd(string adUnitId)
{
rewardedAd = new LevelPlayRewardedAd(adUnitId);
rewardedAd.OnAdLoaded += OnAdLoaded;
rewardedAd.OnAdLoadFailed += OnAdLoadFailed;
rewardedAd.OnAdDisplayed += OnAdDisplayed;
rewardedAd.OnAdDisplayFailed += OnAdDisplayFailed;
rewardedAd.OnAdRewarded += OnAdRewarded;
rewardedAd.OnAdClicked += OnAdClicked;
rewardedAd.OnAdClosed += OnAdClosed;
rewardedAd.OnAdInfoChanged += OnAdInfoChanged;
}
void LoadRewardedAd()
{
rewardedAd.LoadAd();
}
void ShowRewardedAd(string placementName = null)
{
if (rewardedAd.IsAdReady() &&!LevelPlayRewardedAd.IsPlacementCapped(placementName))
{
rewardedAd.ShowAd(placementName);
}
}
bool CheckIfRewardedAdIsReady()
{
return rewardedAd.IsAdReady();
}
bool CheckIfPlacementIsCapped(string placementName)
{
return LevelPlayRewardedAd.IsPlacementCapped(placementName);
}
void OnAdLoaded(LevelPlayAdInfo adInfo)
{
Debug.Log($"Rewarded ad loaded with ad info {adInfo}");
}
void OnAdLoadFailed(LevelPlayAdError adError)
{
Debug.Log($"Rewarded ad failed to load with ad error {adError}");
}
void OnAdDisplayed(LevelPlayAdInfo adInfo)
{
Debug.Log($"Rewarded ad displayed with ad info {adInfo}");
}
void OnAdDisplayFailed(LevelPlayAdDisplayInfoError adInfoError)
{
Debug.Log($"Rewarded ad failed to display with ad info and error {adInfoError}");
}
void OnAdRewarded(LevelPlayAdInfo adInfo, LevelPlayReward adReward)
{
Debug.Log($"Rewarded ad gained reward with adInfo {adInfo} and reward {adReward}");
}
void OnAdClicked(LevelPlayAdInfo adInfo)
{
Debug.Log($"Rewarded ad clicked with ad info {adInfo}");
}
void OnAdClosed(LevelPlayAdInfo adInfo)
{
Debug.Log($"Rewarded ad closed with ad info {adInfo}");
}
void OnAdInfoChanged(LevelPlayAdInfo adInfo)
{
Debug.Log($"Rewarded ad info changed with ad info {adInfo}");
}
}