動画広告への対応

※ 動画広告は現在限定されたパートナー様のみご利用頂けます

動画広告SDKで提供されるコンポーネント

  • RFPPlayerControl
    • 動画プレイヤーを表示するUIViewです。動画を制御する機能も提供します。任意のUIViewのSubviewとして埋め込んでください。

動画広告の判定

動画広告の場合、RFPInstreamInfoModel.isVideo()trueを返します。これを利用して動画広告か否かを判定することができます。

動画広告で利用するDelegate method

動画広告で利用するRFPInstreamAdLoaderDelegateのmethodは2つあります。

  • viewControllerForPresentingModalView

    • 呼び出し元のViewControllerを返してください。こちらは動画広告再生時は必須となります。
  • readyToPlay(with playerControl: RFPPlayerControl!)

    • 再生準備完了時に呼び出されます。準備完了前にplayerControl.play()を実行しても再生されませんのでご注意ください。

動画広告の取得

RFPInstreamAdLoader.getVideoControl(withFrame:infoModel:)を利用してRFPPlayerControlを取得できます。

viewControllerForPresentingModalViewの指定

Video再生の場合はRFPInstreamAdLoaderDelegate.viewControllerForPresentingModalViewを必ず指定してください。

こちらは動画のFullscreen切替の際に必要となります。

戻り値は呼び出し元のUIViewControllerを指定してください。

func rfpInstreamAdLoaderDidFinishLoadingAd(withReturn instreamAdLoader: RFPInstreamAdLoader!, instreamInfoModels: [Any]!) {

    // インフィード広告情報を受け取る
    for model: RFPInstreamInfoModel in instreamInfoModels as! [RFPInstreamInfoModel] {
        if (model.isVideo()) {
            // RFPPlayerControlを取得
            let playerControl = instreamAdLoader.getVideoControl(withFrame: containerView.bounds, infoModel: model)!
            // playerUiView以外は設定しない
            containerView.subviews.forEach { subview in
                subview.removeFromSuperview()
            }
            containerView.addSubview(playerControl)
        }
    }
}

// ※ 動画広告再生の場合は必須
func viewControllerForPresentingModalView() -> UIViewController! {
    return self
}

再生準備完了

再生準備が完了すると、RFPInstreamAdLoaderDelegate.readyToPlay(with:)が呼び出されます。

プレイヤーの初期状態では、一時停止状態です。

func readyToPlay(with playerControl: RFPPlayerControl!) {
    // 再生
    playerControl.play()
    // 一時停止
    playerControl.pause()
}

動画の再生

RFPPlayerControl.play()を利用して再生を開始してください。

RFPPlayerControl.pause()で一時停止することも可能です。

    // 再生
    playerControl.play()
    // 一時停止
    playerControl.pause()

再生終了

(v2.7.0以上で利用可能)

再生が終了すると、RFPInstreamAdLoaderDelegate.didPlayToEndTime(with:)が呼び出されます。

func didPlayToEndTime(with playerControl: RFPPlayerControl!) {
    // 再生終了時の処理
}

キャッシュの設定

(v2.5.0以上、iOS11以上で利用可能)

RFPでは端末の内部ストレージに動画広告をある程度キャッシュ(HLSダウンロード保存)し、通信量削減および動画広告再生レスポンスの改善を行います。

キャッシュ容量はRFPが推奨する設定値を使用します。この値はアプリ側から変更することが可能です。

キャッシュ容量を変更したい場合、RFP.rfpSetVideoCacheSize(_:)を利用してキャッシュ容量を設定してください。

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    // 現在の設定を取得
    let size = RFP.rfpGetVideoCacheSize()

    // videoキャッシュを100MBに設定
    RFP.rfpSetVideoCacheSize(100);

    // videoキャッシュを無効にする
    RFP.rfpSetVideoCacheSize(0);

    // ※ rfpSetVideoCacheSizeは必ずrfpInitMediaの前に設定をしてください
    RFP.rfpInitMedia("your_media_id")
}

キャッシュ設定時の注意点

  • iOS11以上の場合、キャッシュされた動画広告は[設定] > [一般] > [iPhoneストレージ] > {各アプリ名}に「video_ad_cache_rfp」という名前で表示されます。このキャッシュファイルは、ユーザが任意のタイミングで削除可能です。
  • キャッシュクリアはrfpInitMediaが呼び出されたタイミングで行います。このため、一時的にrfpSetVideoCacheSizeで設定したキャッシュ容量を超える可能性があります。

プレイヤータップ時の設定

(v2.7.0以上で利用可能)

プレイヤータップ時の動作を切り替えることができます。デフォルトはFullscreen起動です。

  • RFPPlayerControl.setTapActionFullscreen
    • Fullscreen画面を起動します。デフォルトの動作です。
  • RFPPlayerControl.setTapActionAdClick
    • 広告クリックの動作となります。再生は停止されます。
  • RFPPlayerControl.replaceTapAction:
    • 任意の処理を設定することができます。
// Fullscreen画面の起動 (default)
playerControl.setTapActionFullscreen()

// 広告クリック
playerControl.setTapActionAdClick()

// 任意の処理
playerControl.replaceTapAction({ [weak playerControl] () -> Void in
    if let weakPlayer = playerControl {
        // 例: 一時停止
        weakPlayer.pause()
    }
})