簡易版インフィード広告よりも柔軟な表示を行いたい場合などに、カスタム型のインフィード広告機能を利用することが出来ます。
広告を利用するには、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!) -> ())!)
RFPInstreamInfoModel.getAdId()
をご利用ください。現状、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
}
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 をご参照ください。