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 Ad Info
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 – 広告が正常に読み込まれ、広告ユニットに対するキャップが設定されていない場合、または視聴回数が広告ユニットに対して設定されたキャップに達していない場合は 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 は非同期です。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
}
動画リワード広告の実装例
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 を使用してインテグレーションを確認します。
インテグレーションガイドに従って、追加の広告ユニットを実装します。