ネイティブアドのすゝめ(iOS)


家族とMacとネット環境さえあれば、どこでも生きていける[@neiraza](http://blacksheep.hatenablog.com/)です。
今年の10月から[サイバーエージェント](https://www.cyberagent.co.jp/)のアドテク本部AdTech NativeUnitてとこで、iOSおよびAndroid向けのSDKをつくってます。

最近、ネイティブアドのお仕事をしており、良い機会なので色々とまとめてみました。

## ネイティブアドの概要

### @neiraza的な解釈

<b>「媒体に自然と表示し見せる、広告自体の呼び出し元となる枠」</b>
ネイティブアドにとって重要なのは、
それ単体で価値のある枠で、その枠をタップした先に利用者が求める答えがある、その答えこそが広告だった。
たぶん、そんな状態なんだと思います。

僕は今のところ、ネイティブアドと言われる広告を入れた日本のアプリしか見たことがないのですが、
これが成功する、カッコイイ、ネイティブアドだぜ！ってのは無いように思えます。
ずっと以前からネイティブアドと呼ばれずに存在していたタイプの広告に名前がついたくらいの状況かなと思ってます。

何か面白い案とか、ないすかね。

ちなみに僕は最初、ネイティブアドってネイティブ技術（モバイルの）でつくる広告だと思ってましたが、普通にJSでタグ埋め埋めな広告とかも指すので、結構範囲は広いです。

### 業界標準的なやつ

業界標準的な取りまとめは[米国のオンライン広告の業界団体IAB](http://www.iab.net/)や[一般社団法人 インターネット広告推進協議会（JIAA）](http://www.jiaa.org/index.html)などのサイトで、抑えたほうが良いと思います。

特に[THE ADVERTISING PLAYBOOK](http://www.iab.net/media/file/IAB-Native-Advertising-Playbook2.pdf)は一度、目を通した上で日本の商慣習、現状などを見ていったほうが良いと思います。


## ネイティブアドに触ってみよう

[MoPub Inc.](http://www.mopub.com/)が公開している[mopub-ios-sdk](https://github.com/mopub/mopub-ios-sdk)を適当に解説しつつ、動かしてみます。
MoPub?って人もいるかと思いますが、Twitterが昨年９月に４億ドルぐらいで買収したモバイル広告ネットワークをやっている会社です。

### 動かしてみよう

[mopub-ios-sdk](https://github.com/mopub/mopub-ios-sdk)をローカルにcloneした上で、Xcode環境が万全な状態を前提に進めます。

サンプルアプリを実行するにはMoPubSampleAppのスキーマを選択し実行するだけ。

画面起動後に、NativeAd(TableView Manager)をタップする。
（下記画像を参照のこと）

![MPNativeAdTableViewController_1.png](https://qiita-image-store.s3.amazonaws.com/0/4107/7fa6446d-5ee0-7418-0a88-4af255e0b7de.png "MPNativeAdTableViewController_1.png")

すると下みたいな表示が出てきます。
こいつはUITableView内の2行目だけをネイティブアドに差し替える実装をしています。ソースは[こちら](https://github.com/mopub/mopub-ios-sdk/blob/master/MoPubSampleApp/Controllers/MPNativeAdTableViewController.m)。

![MPNativeAdTableViewController_2.png](https://qiita-image-store.s3.amazonaws.com/0/4107/77e64378-b643-ee75-25b6-8ed2b242da72.png "MPNativeAdTableViewController_2.png")

Twitterでよくこんな感じの広告みますよね。

![MPNativeAdTableViewController_3.png](https://qiita-image-store.s3.amazonaws.com/0/4107/d4c8ce0c-d427-c764-37f5-1a0d07c2f984.png "MPNativeAdTableViewController_3.png")

### 実装をみてみよう

さて、スーパーざっくり解説を始めます。

 _[MPNativeAdTableViewController](https://github.com/mopub/mopub-ios-sdk/blob/master/MoPubSampleApp/Controllers/MPNativeAdTableViewController.m)#viewDidLoad_ で、UITableViewのオブジェクトを[MPTableViewAdManager](https://github.com/mopub/mopub-ios-sdk/blob/master/MoPubSDK/Native%20Ads/MPTableViewAdManager.m)を生成し渡している。
これは _MPNativeAdTableViewController_ で実装した`UITableViewDataSource#tableView:cellForRowAtIndexPath:indexPath`内でセル表示時に、その行が広告行の場合はさきほど用意した _MPTableViewAdManager_ を呼び出し、その中であらかじめ渡しておいた、UITableViewのオブジェクトから`dequeueReusableCellWithIdentifier:indexPath`しています。

肝心の広告データは、`MPNativeAdTableViewController#viewDidLoad`で、 _[MPNativeAdRequest](https://github.com/mopub/mopub-ios-sdk/blob/master/MoPubSDK/Native%20Ads/MPNativeAdRequest.m)_ を用意し発射！
bloksで取得した広告をデータソース元となるNSArrayに突っ込んで`UITableView#reloadData`を呼びテーブルを更新した広告が表示されます。


とまぁ、比較的簡単な作り込みになっているわけですが、
_MPTableViewAdManager_ のコメントにこう書いてあります。ほんとかよw
>The MPTableViewAdManager class provides convenient functionality for adding advertisements
 * to a table view.

### MoPub SDKにケチをつけよう

この公開してくださっているSDK様に、 __ケチをつけてみたい__ と思います。
僕がユーザーなら、このSDKが便利だとは思いません。
 __広告データを自分で取得して、自分でデータソース元につめて、表示しています。__
全然、便利でもなんでもないし、SDK導入コストはそこそこ高いと思います。

この程度のSDKを提供されるぐらいなら、
広告データ取得のAPI公開と、インプレッションなど広告配信側が考えるタイミング・頻度で何かをするものがあるなら、それは広告データのモデルクラスを提供してもらい、例えばインプレッションならその中でプロキシパターン的なやつで広告配信側に返してあげる仕組みとかが、あればいいんじゃないかなって思います。

Twitter様が絡んでいるから、多少、導入しにくくても、使っちゃいますよ！って感じですよね。

~~個人的にManagerって名前のクラスって、ホント何してんだよ。なにニヤニヤしてんだよ。この名前って、なんなんだよ。~~

## さいごに

2015年もネイティブアドに振り回されながら __「儲かるネイティブアド」__、 __「作っていて/利用していてネイティブアド」__ とかを見つけて、もっと楽しくお仕事が楽しくできたらなーと思っています。


#### エンジニアのネイティブ広告のアドテク社交場ってどこかあれば、おしえてください(T ^ T)