カスタムインフィード広告

簡易版インフィード広告よりも柔軟な表示を行いたい場合などに、カスタム型のインフィード広告機能を利用することが出来ます。

広告を利用するには、SDKを有効にする必要があります。詳細はインストールガイドSDKの初期化をご確認ください。

実装する際には広告箇所が広告であることをユーザーが視認・理解できる文言を必ず記述して下さい。

(例:「PR」・「Sponsored」・「Ad」・「広告」)

  • パラメータdisplayedAdvertiserを使うことで広告ごとに適切な文言を表示することが出来ます。

下記のガイドでは、UITableViewを前提とした例を示しますが、UIViewなどその他の場合でも利用が可能です。

カスタムインフィード広告のロード

カスタムインフィード広告の実装例を挙げます。

class YourViewController: UIViewController, RFPInstreamAdLoaderDelegate {

    let instreamAdLoader = RFPInstreamAdLoader.init()
    let adSpotId = "your_adspot_id"
    let positions = [0, 1, 2]

    override func viewDidLoad() {
        super.viewDidLoad()

        // delegateを設定
        instreamAdLoader.delegate = self
        // インフィード広告ロードを呼び出し
        instreamAdLoader.rfpLoadAd(
            withReturn: adSpotId,
            adCount: UInt(positions.count),
            positions: positions
        )
    }

    // インフィード広告ロードの完了
    func rfpInstreamAdLoaderDidFinishLoadingAd(withReturn instreamAdLoader: RFPInstreamAdLoader!, instreamInfoModels: [Any]!) {

        // インフィード広告情報を受け取る
        for model: RFPInstreamInfoModel in instreamInfoModels as! [RFPInstreamInfoModel] {
            items[model.position.intValue] = model
        }
        // ... UITableView更新など ...
        tableView.realoadData();
    }
}

カスタムインフィード広告のカスタムパラメータ

インフィード広告ロード時にカスタムパラメータを指定することができます。

// インフィード広告ロードを呼び出し
instreamAdLoader.rfpLoadAd(
    withReturn: adSpotId,
    adCount: UInt(positions.count),
    positions: positions,
    customs: ["a": "1", "b": ["2", "3"]]
)

// custom[a]=1&custom[b]=2&custom[b]=3

カスタムインフィード広告の表示

RFPInstreamInfoModelから取り出した情報をもとに、広告を表示させます。positionは、広告の成果分析に使われるため、画面内の位置を決める参考にしてください。

    if (model.title) {
        titleLabel.text = model.title
    }

    if (model.content) {
        contentLabel.text = model.content
    }

    model.rfpLoadImage(imageView, completion: { error -> Void in
        print("Load Finish.")
        if (error != nil) {
            print("Load Error.", error!)
        } else {
            instreamAdLoader.rfpMeasureImp(model)
        }
    })

カスタムインフィード広告のインプレッション通知

広告の表示が完了したら、インプレッションを通知してください。 RFPInstreamAdLoader.rfpMeasureImp(_:)を呼び出してください。

// model: RFPInstreamInfoProtocol!
RFPInstreamAdLoader.rfpMeasureImp(model)

カスタムインフィード広告のクリック時の遷移処理

広告がクリックされたら、以下のメソッドを呼び出すことで、適切にユーザーを遷移させることができます。 RFPInstreamAdLoader.rfpSendClickEvent(_:)を呼び出してください。

// model: RFPInstreamInfoProtocol!
RFPInstreamAdLoader.rfpSendClickEvent(model)

カスタムインフィード広告のボタン表記文字取得

管理画面から設定したボタン表記文字(ユーザーアクション)についてはRFPInstreamInfoModel.getCtaText()を利用して取得します。

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

    for model: RFPInstreamInfoModel in instreamInfoModels as! [RFPInstreamInfoModel] {

        // ボタン表記文字の取得 "詳細はこちら","予約する","購入する","登録する" ....
        print("Button Name", model.getCtaText())

    }
}

カスタムインフィード広告のロードと各種通知時のイベント取得

インフィード広告のロードや各種通知をする際に、そのイベントを受け取りたい場合があります。

その場合は RFPInstreamAdLoader のプロパティである delegate が、RFPInstreamAdLoaderDelegate に準拠しているので、それ経由で受信する事が出来ます。

Viewable Impressionをサポートするライブラリーの提供を利用する場合、インプレッションの結果はそのライブラリーにより提供します。

override func viewDidLoad() {
    super.viewDidLoad()
    // (1) delegate を設定
    instreamAdLoader.delegate = self
}

// (2) 広告のロード開始時
func rfpInstreamAdLoaderDidStartLoadingAd(_ instreamAdLoader: RFPInstreamAdLoader!) {
}

// (3) 広告のロード完了時
func rfpInstreamAdLoaderDidFinishLoadingAd(_ instreamAdLoader: RFPInstreamAdLoader!) {
}

// (4) 広告のインプレッション通知完了時
func rfpInstreamAdLoaderDidFinishSendingAdImp() {
}

// (5) 広告のクリック処理完了時
func rfpInstreamAdLoaderDidFinishSendingAdClick() {
}

// (6) 広告のロード失敗時
func rfpInstreamAdLoader(_ instreamAdLoader: RFPInstreamAdLoader!, didFailToLoadAdWithError error: Error!) {
}

// (7) 広告のインプレッション通知失敗時
func rfpInstreamAdLoader(_ instreamAdLoader: RFPInstreamAdLoader!, didFailToSendImpWithError error: Error!) {
}

// (8) 広告のクリック処理失敗時
func rfpInstreamAdLoader(_ instreamAdLoader: RFPInstreamAdLoader!, didFailToSendClickWithError error: Error!) {
}

// (9) 動画広告の再生準備完了
func readyToPlay(with playerControl: RFPPlayerControl!) {
}

// (※)動画広告再生時に必須
func viewControllerForPresentingModalView() -> UIViewController! {
    return self
}

カスタムインフィード広告パラメータ

RFPInstreamInfoModel.hを合わせて参照ください。

パラメータ名 説明
title タイトル文言(全角20文字以内) TestAd
content 説明・紹介文(全角40~70文字以内) テスト広告です。
position 広告案件の 相対位置 3
displayedAdvertiser 表記広告主名 飲料会社 A社
imageURL バナー型の矩形画像(広告枠IDごとにサイズ可変)リソース NSURL オブジェクトです
creativeSize バナー画像(または動画広告)のサイズ CGSize オブジェクトです
  • バナー型の矩形画像は次のメソッドを使っても取得することができます。
    • RFPInstreamInfoModel.rfpLoadImage(_:UIImageView!,completion:((Error!) -> ())!)
  • 広告IDの取得はRFPInstreamInfoModel.getAdId()をご利用ください。

SDKがデフォルトで提供する広告フォーマットの任意利用

現状、7つの広告フォーマットを自由に利用できます。UITableViewCellのサブクラスです。

デフォルト広告フォーマットの利用に必要なファイルは以下です。

RFPInstreamAdCellThumbnailMiddle.h
RFPInstreamAdCellThumbnailSmall.h
RFPInstreamAdCellLandscapePhoto.h
RFPInstreamAdCellPhotoBottom.h
RFPInstreamAdCellPhotoMiddle.h
RFPInstreamAdCellTextOnly.h
RFPInstreamAdCellWebView.h
のうち、利用するフォーマットのものを選択する

簡易版インフィード広告から利用できるフォーマットを利用することができます。

事前に、利用するフォーマットのヘッダをBridging-Header.hに設定してください。

#import <RFP/RFPInstreamAdCellThumbnailMiddle.h>

以下の様に実装し、デフォルト広告フォーマットを表示します。

override func viewDidLoad() {
    super.viewDidLoad()
    // 利用したい広告フォーマットのクラスを事前に登録する
    self.tableView.register(RFPInstreamAdCellThumbnailMiddle.self, forCellReuseIdentifier: "adCell")
}

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

    // 保持してある広告情報を取得
    let model = items[indexPath.row]!

    // 事前に登録した広告フォーマットのクラスを取り出す
    let cell = tableView.dequeueReusableCell(withIdentifier: "adCell", for: indexPath) as! RFPInstreamAdCellThumbnailMiddle

    // 広告情報をもとにセルを描画する
    cell.rfpUpdateCell(model, completion: { (error) -> () in
        // 描画完了後の処理
        print("Updated Cell")
    })

    return cell
}

SDK内で発生した例外の取得

RFPExceptionDelegateを利用することで、SDK内で発生した例外内容を取得することができます。 発生したエラーの詳細について、エラーコード一覧をご確認ください。

class YourViewController: UIViewController, RFPInstreamAdLoaderDelegate, RFPExceptionDelegate {

    let instreamAdLoader = RFPInstreamAdLoader.init()
    let adSpotId = "your_adspot_id"
    let positions = [0, 1, 2]

    override func viewDidLoad() {
        super.viewDidLoad()

        // delegateを設定
        instreamAdLoader.exceptionDelegate = self

        // インフィード広告ロードを呼び出し
        instreamAdLoader.delegate = self
        instreamAdLoader.rfpLoadAd(
            withReturn: adSpotId,
            adCount: UInt(positions.count),
            positions: positions
        )
    }

    // 例外内容取得Delegate
    func exceptionOccurred(_ error: Error!) {
        print("exceptionOccurred", error)
    }
}

ダークモードについて

iOS 13以降、ユーザは新たにダークモードと呼ばれる外観を選択できるようになります。 表示確認の際には、ライトモードとダークモード両方での確認を行うようにしてください。

ダークモードについては Human Interface Guidelines/Dark Mode をご参照ください。