Skip to content

動画リワード広告の導入

aoiro234 edited this page Jul 17, 2019 · 87 revisions

SDKの更新

SDKを更新する際はパッケージに含まれる全てのSDKを更新してください。 バージョンの異なるSDKをご利用の場合、正常に動作しない可能性があります。

こちらの変更履歴をご覧になってから導入を開始してください。

SDK 2.10.0以降をご利用で、AdExchangeインタースティシャル広告と動画リワード広告を併用している皆さまへ

SDK 2.10.0以降の動画リワード広告と、AdExcahngeインタースティシャル広告をアプリ内で併用した場合、広告の再生ができない場合がございます。 動画リワード広告とAdExcahngeインタースティシャル広告を併用される場合は、こちらを参考に枠Noを取得いただき、使用する全て枠Noを同時に初期化をするようにお願いいたします。

必要条件

XCode 9以上 iOS 8.0以上

adstir SDK 2.12.0よりiOS 8.0以上の端末にのみ配信されます。

対応提携ネットワークについて

対応提携ネットワークについてはこちらのページをご覧ください。

初期設定

初期設定をご覧になり、adstir SDKをプロジェクトへ導入してください。
対応提携ネットワークを導入する場合はこちらを参考に対応提携ネットワークを導入してください。

広告の設置

  1. メディアユーザIDの設定を行う
  2. 動画広告の初期化を行う
  3. 動画リワード広告のインスタンスを生成
  4. デリゲートの実装(オプション)
  5. 動画リワード広告の読み込み
  6. 動画リワード広告の再生

1. メディアユーザIDの設定を行う

サーバーサイドで成果通知を受け取る場合、メディアユーザーIDを設定します。 メディアユーザIDの設定は、動画リワード広告の読み込みよりも前までに設定する必要があります。

[AdstirVideoAds setMediaUserID:[[UIDevice currentDevice].identifierForVendor UUIDString]]; // ここでは例として、Vendor IDを指定していますが、任意のIDが利用可能です。

2. 動画広告の初期化を行う

AdstirVideoAds prepareWithMediaを使い、プロジェクトで利用する全ての動画広告の初期化を同時に行います。動画リワード広告とフルスクリーン広告を併用する場合は、同時に初期化を行う必要があります。

[AdstirVideoAds prepareWithMedia:@"メディアID" spots:@[@枠No1, @枠No2]];

3. 動画リワード広告のインスタンスを生成

AdstirVideoRewardのインスタンスを生成します。

AdstirVideoReward *aVideoReward = [[AdstirVideoReward alloc] initWithMedia:@"メディアID" spot:枠No];

4. デリゲートの実装(オプション)

- (void)viewDidLoad
{
    [super viewDidLoad];
        :
    aVideoReward.delegate = self;
        :
}

/** 動画の読み込み完了イベントを受け取ります */
- (void)adstirVideoRewardDidLoad:(AdstirVideoReward *)videoReward
{
}

/** 動画の再生準備に失敗した際に呼び出されます */
- (void)adstirVideoReward:(AdstirVideoReward *)videoReward didFailToLoadWithError:(NSError *)error
{
}

/** 動画の再生開始イベントを受け取ります */
- (void)adstirVideoRewardDidStart:(AdstirVideoReward *)videoReward
{
}

/** 動画のインセンティブ付与の完了イベントを受け取ります */
- (void)adstirVideoRewardDidComplete:(AdstirVideoReward *)videoReward
{
}

/** 動画再生のキャンセルイベントを受け取ります */
- (void)adstirVideoRewardDidCancel:(AdstirVideoReward *)videoReward
{
}

/** 動画再生ビューが閉じられたことを受け取ります */
- (void)adstirVideoRewardDidClose:(AdstirVideoReward *)videoReward
{
}

5. 動画リワード広告の読み込み

動画リワード広告の読み込みを行います。

[aVideoReward load];

6. 動画リワード広告の再生

読み込みが完了した動画リワード広告を再生します。 動画の再生を行うViewControllerを渡してください。 動画の再生後、もう一度動画を再生するためには5.動画リワード広告の読み込みを行う必要があります。

if ([aVideoReward canShow]) {
    [aVideoReward showFromViewController:self]];
}

SDKの実装例

ここでは、単純な実装についてのサンプルを提示します。 まず、Storyboard上に、UIButtonUILabelを配置し、UIButtonをのOutletとActionをshowVideoButtonshowVideoButtonDidTouchUpInsideにそれぞれ接続し、UILabelのOutletをstatusLabelに接続してください。

Swift

  • AppDelegate.swift
// ...
import AdstirAds
// ...
class AppDelegate: UIResponder, UIApplicationDelegate {
// ...
   func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        /* 他の初期化コード */
        // サーバーサイドで成果通知を受け取る場合、メディアユーザーID(半角英数記号)を設定します。
        AdstirVideoAds.setMediaUserID(UIDevice.currentDevice().identifierForVendor?.UUIDString) // ここでは例として、Vendor IDを指定していますが、任意のIDが利用可能です。
        
        // メディアIDと、このアプリ内で利用する動画インセンティブメニューの枠IDとインタースティシャル広告の枠IDをすべて指定します。
        // 動画リワードとインタースティシャルを併用する場合はどちらの枠Noも指定してください。
        AdstirVideoAds.prepare(withMedia:"メディアID", spots: [枠No, 枠No])
        return true
    }
// ...
}
  • ViewController.swift
import UIKit
import AdstirAds

class ViewController: UIViewController, AdstirVideoRewardDelegate {
    
    @IBOutlet weak var statusLabel: UILabel!
    @IBOutlet weak var showVideoButton: UIButton!
    
    var videoReward: AdstirVideoReward?
    var isVideoRewardCompleted = false

    override func viewDidLoad() {
        super.viewDidLoad()

        self.showVideoButton.enabled = false
        
        let videoReward = AdstirVideoReward.init(media: "メディアID", spot: 枠No)
        videoReward?.delegate = self;
        self.videoReward = videoReward;

        self.videoReward?.load()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }

    /** リワード広告を表示するボタンのターゲットメソッド */
    @IBAction func showVideoButtonTouchUpInside(sender: AnyObject) {
        self.showVideoButton.enabled = false
        self.videoReward?.showFromViewController(self)
    }

    /** 動画の読み込み完了イベントを受け取ります */
    func adstirVideoRewardDidLoad(videoReward: AdstirVideoReward!) {
        self.statusLabel.text = "Loaded"
        self.showVideoButton.enabled = true
    }
    
    /** 動画の再生準備に失敗した際に呼び出されます */
    func adstirVideoReward(videoReward: AdstirVideoReward!, didFailToLoadWithError error: NSError!) {
        NSLog("動画が読み込めませんでした")

        // 15秒待ってから再読み込みします
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(15.0f * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {
            self.statusLabel.text = "Loading...";
            self.videoReward?.load()
        })
    }

    /** 動画の再生開始イベントを受け取ります */
    func adstirVideoRewardDidStart(videoReward: AdstirVideoReward!) {
        self.statusLabel.text = ""
    }

    /** 動画のインセンティブ付与の完了イベントを受け取ります */
    func adstirVideoRewardDidComplete(videoReward: AdstirVideoReward!) {
        self.isVideoRewardCompleted = true
    }

    /** 動画再生のキャンセルイベントを受け取ります */
    func adstirVideoRewardDidCancel(videoReward: AdstirVideoReward!) {
        // 15秒待ってから再読み込みします
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(15.0f * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {
            self.statusLabel.text = "Loading...";
            self.videoReward?.load()
        })
    }

    func adstirVideoRewardDidClose(videoReward: AdstirVideoReward!) {
        if (self.isVideoRewardCompleted) {
            self.statusLabel.text = "Congrats! Got virtual currency!"
        }
        self.isVideoRewardCompleted = false

        // 15秒待ってから再読み込みします
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(15.0f * Double(NSEC_PER_SEC))), dispatch_get_main_queue(), {
            self.statusLabel.text = "Loading...";
            self.videoReward?.load()
        })
    }
    
    deinit {
        // デリゲートを解放します。解放を忘れるとクラッシュする可能性があります。
        self.videoReward?.delegate = nil;
        // 広告の制御インスタンスを解放します。
        self.videoReward = nil;
    }
}

Objective-C

  • AppDelegate.m
@import AdstirAds;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    /* 他の初期化コード */

    // サーバーサイドで成果通知を受け取る場合、メディアユーザーIDを設定します。
    [AdstirVideoAds setMediaUserID:[[UIDevice currentDevice].identifierForVendor UUIDString]]; // ここでは例として、Vendor IDを指定していますが、任意のIDが利用可能です。

    // メディアIDと、このアプリ内で利用する動画インセンティブメニューの枠IDとインタースティシャル広告の枠IDをすべて指定します。
    // 動画リワードとインタースティシャルを併用する場合はどちらの枠Noも指定してください。
    [AdstirVideoAds prepareWithMedia:@"メディアID" spots:@[@枠No, @枠No]];

    return YES;
}
  • ViewController.m
@import AdstirAds;

@interface FooViewController () <AdstirVideoRewardDelegate>

@property (weak, nonatomic) IBOutlet UILabel *statusLabel;
@property (weak, nonatomic) IBOutlet UIButton *showVideoButton;

@property (nonatomic, strong) AdstirVideoReward *videoReward;

@property (nonatomic, assign) BOOL isVideoRewardCompleted;

@end

@implementation FooViewController

- (void)viewDidLoad
{
    AdstirVideoReward *aVideoReward = [[AdstirVideoReward alloc] initWithMedia:@"メディアID" spot:枠No];
    aVideoReward.delegate = self;
    
    self.videoReward = aVideoReward;

    self.statusLabel.text = @"Loading...";
    [self.videoReward load];
}

/** リワード広告を表示するボタンのターゲットメソッド */
- (IBAction)showVideoButtonDidTouchUpInside:(id)sender
{
    self.showVideoButton.enabled = NO;
    if ([self.videoReward canShow]) {
        [self.videoReward showFromViewController:self]];
    }
}

- (void)dealloc
{
    // デリゲートを解放します。解放を忘れるとクラッシュする可能性があります。
    self.videoReward.delegate = nil;
    // 広告の制御インスタンスを解放します。
    self.videoReward = nil;
}

#pragma mark -
#pragma mark AdstirVideoRewardDelegate

/** 動画の読み込み完了イベントを受け取ります */
- (void)adstirVideoRewardDidLoad:(AdstirVideoReward *)videoReward
{
    self.statusLabel.text = @"Loaded.";
    self.showVideoButton.enabled = YES;
}

/**
 動画の再生準備に失敗した際に呼び出されます
 */
- (void)adstirVideoReward:(AdstirVideoReward *)videoReward didFailToLoadWithError:(NSError *)error
{
    NSLog(@"動画が読み込めませんでした");
    // 15秒待ってから再読み込みします
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(15.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        self.statusLabel.text = @"Loading...";
        [self.videoReward load];
    });
}

/** 動画の再生開始イベントを受け取ります */
- (void)adstirVideoRewardDidStart:(AdstirVideoReward *)videoReward
{
    self.statusLabel.text = @"";
}

/** 動画のインセンティブ付与の完了イベントを受け取ります */
- (void)adstirVideoRewardDidComplete:(AdstirVideoReward *)videoReward
{
    self.isVideoRewardCompleted = YES;
}

/** 動画再生のキャンセルイベントを受け取ります */
- (void)adstirVideoRewardDidCancel:(AdstirVideoReward *)videoReward
{
    // 15秒待ってから再読み込みします
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(15.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        self.statusLabel.text = @"Loading...";
        [self.videoReward load];
    });
}

/** 動画再生ビューが閉じられたことを受け取ります */
- (void)adstirVideoRewardDidClose:(AdstirVideoReward *)videoReward
{
    if (self.isVideoRewardCompleted) {
        self.statusLabel.text = @"Congrats! Got virtual currency!";
    }
    self.isVideoRewardCompleted = NO;

    // 15秒待ってから再読み込みします
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(15.0f * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
        self.statusLabel.text = @"Loading...";
        [self.videoReward load];
    });
}

@end

成果のコールバックURLへの通知

AdStirでは、インセンティブ付与の通知を、任意のコールバックURLに行うことが可能です。 付与するインセンティブの単位と額は、任意の値に変更可能です。 AdstirVideoReward.setMediaUserID でユーザーIDを設定していない場合には通知されませんので、ご注意ください。

動画インセンティブ付与をコールバックURLに通知する

ライブラリ詳細

APIリファレンスをご覧ください。

よくある質問

レポートに表示回数が反映されません

開発版とリリース版のパッケージ名が異なる場合、一部の提携ネットワークで実績の取得が行われないことがございます。 その際は、リリース版と同じパッケージ名に変更いただいた上でテストいただくか、開発版とリリース版のパッケージ名が異なる旨を添えていただき、レポート数値について営業担当にお問い合わせください。

更新履歴

変更履歴をご覧ください。

Clone this wiki locally