iOSアプリにnend広告を実装する方法(インタースティシャル広告編)
ヘッポコプログラマーゆえ、iOSアプリにnend広告を実装するだけで苦労してしまいました。
全国に50人はいるだろうヘッポコ同志と、この情報を共有したいと思います。
最初は簡単だからって理由でiAd広告を実装してたんですけど、この広告ってマジでセンスないんですよね。配信されてる広告内容が最悪です。しかもAppleが撤退するとかなんとか。
AppleがiOS端末向けのモバイル広告プラットフォーム「iAd」から撤退 - GIGAZINE
そんなわけで我らがnendに乗り換えることを決めました。
やっぱnendはいいでしょう。nend、ネンド、粘土さんは。
スマートフォン広告なら日本最大級のnend(スマホweb広告/アプリ広告/アイコン広告/インターステーシャル広告対応)
まずはnend登録して、SDKっていうのを発行してもらうんですが、僕はこのサイトを見ました。
登録して広告枠作成して、SDKのダウンロードをするんですが、まあここまでは簡単でした。多分迷わないはずです。
んで、引っかかりだしたのは、ここから。NendAd-Bridging-Header の追加からですね。
SDKを手動で追加する · fan-ADN/nendSDK-iOS Wiki · GitHub
まず通すべきパスが2つあることに気を付けてください。PROJECTとTARGETの2つあります。
これが片方しか通ってなかったために、結構足止めくらいましたから。
それでAllとCombinedを選ぶって点も注意してくださいね。
当たり前のようにLevelsって方を選んだら、どうも具合の悪い事態に陥りますよ。
んで肝心のパスですが、これがなかなか通らなかったんですよ。
$(SRCROOT)/$(PRODUCT_NAME)/NendAd-Bridging-Header.h
こう書けば通るって書いてんのに、全然通りません。
んで、何事かと調べてたらあれですよ。肝心のフォルダに、そのファイルがありませんでした。
こうやって、通したパスの先に、ちゃんと入れておきましょう。
(ちなみにこれはNeatフォルダの中に入れています)
ここまで来たら、やっと広告をロード、そして表示する段取りに移ります。
当然のようにここでも苦労しました。
これを見ながらやってたんですが、それでも大変でしたよ。ヘッポコだから。
インタースティシャル広告実装手順 · fan-ADN/nendSDK-iOS Wiki · GitHub
まず広告のロードですが、これはAppDelegate.swiftの中に記述します。
import UIKit @UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Override point for customization after application launch.
NADInterstitial.sharedInstance().loadAdWithApiKey("管理画面より発行された apiKey", spotId: "[管理画面より発行されたspotID]")
return true
}
//〜省略〜
}
こう書くわけですが、実際に追記するのは1行だけですね。
NADInterstitial.sharedInstance().loadAdWithApiKey("管理画面より発行された apiKey", spotId: "[管理画面より発行されたspotID]")
これだけです。
さあ、ここまで書けたら、次は広告の表示ですね。
てかここがゴールです。これ出来れば全てOK。
import UIKit
class YourOriginalClass: UIViewController {
//〜省略〜
func showButtonClicked(sender: UIButton) {
var showResult: NADInterstitialShowResult
showResult = NADInterstitial.sharedInstance().showAd()
switch(showResult.rawValue){
case AD_SHOW_SUCCESS.rawValue:
print("広告の表示に成功しました。")
break
case AD_SHOW_ALREADY.rawValue:
print("既に広告が表示されています。")
break
case AD_FREQUENCY_NOT_REACHABLE.rawValue:
print("広告のフリークエンシーカウントに達していません。")
break
case AD_LOAD_INCOMPLETE.rawValue:
print("抽選リクエストが実行されていない、もしくは実行中です。")
break
case AD_REQUEST_INCOMPLETE.rawValue:
print("抽選リクエストに失敗しています。")
break
case AD_DOWNLOAD_INCOMPLETE.rawValue:
print("広告のダウンロードが完了していません。")
break
default:
break
}
}
}
こう書けば表示されるってあるんですけど、これがサッパリ表示されないんですよ。マジで3日3晩悩みました。
あーでもない、こーでもないとやるんですが、全然解決しません。
そこで気付いたんです。
これ関数やん
これ関数やんかって気が付きました。
func showButtonClicked(sender: UIButton)
ここからのくだりって、関数の宣言ですよね。多分。
関数をよく分かってないんですが、多分そうでしょう。
なのでコードをこうやって変えました。
func showButtonClicked() {
var showResult: NADInterstitialShowResult
showResult = NADInterstitial.sharedInstance().showAd()
switch(showResult.rawValue){
case AD_SHOW_SUCCESS.rawValue:
print("広告の表示に成功しました。")
break
case AD_SHOW_ALREADY.rawValue:
print("既に広告が表示されています。")
break
case AD_FREQUENCY_NOT_REACHABLE.rawValue:
print("広告のフリークエンシーカウントに達していません。")
break
case AD_LOAD_INCOMPLETE.rawValue:
print("抽選リクエストが実行されていない、もしくは実行中です。")
break
case AD_REQUEST_INCOMPLETE.rawValue:
print("抽選リクエストに失敗しています。")
break
case AD_DOWNLOAD_INCOMPLETE.rawValue:
print("広告のダウンロードが完了していません。")
break
default:
break
}
}
sender: UIButtonっていう引数がよく分からなかったんで、ここは空にしました。
だから普通にあれですね。showButtonClickedっていう関数を定義しただけです。
んで、override func viewDidLoad() の中にshowButtonClicked()って書いて、その関数を実行。
override func viewDidLoad() {
〜 省略 〜
showButtonClicked()
}
するとビックリ。
広告が表示されますがな
されますガーナですよ。ガーナミルクチョコレート。
だからこの関数だけ定義しといて、あとは条件に合わせて、その中で関数を実行すれば、どこでも広告出せますね。
はい。iOSアプリにnendのインタースティシャル広告を実装するのに、つまづいた箇所は以上です。
てかこれあれですね。
ほぼ全箇所でつまづいてますね
ヘッポコ同志の参考になれば幸いです。
【追記】2016.04.06
なんかインタースティシャル広告の表示方法が変わったとかで、前のコードだとエラーになるようになりましたね。
スマートフォン広告なら日本最大級のnend(スマホweb広告/アプリ広告/アイコン広告/インターステーシャル広告対応)
showResult = NADInterstitial.sharedInstance().showAd()
このshowAd()がダメなんですよ。SKSceneに表示しようとすると。
let showResult = NADInterstitial.sharedInstance().showAdFromViewController(self)
こう書けって話なんですが、SpriteKitのSKSceneに表示させるにはどうしたらいいのか。なんか分かりません。。selfがエラーになっちゃって。
とりあえず前のSDKを使えば表示されるんですけどね。いずれshowAd()のメソッドが廃止されるとかで、ヤキモキしています。
ひとまずnendさんに問い合わせたんですが、回答やいかに。
【追記2】2016.04.14
nendさんに丁寧に教えていただきました。インタースティシャル広告の表示方法を。
ザックリ書くとこれです。
func showButtonClicked() {
let showResult = NADInterstitial.sharedInstance().showAdFromViewController(UIApplication.sharedApplication().keyWindow?.rootViewController)
switch(showResult){
case AD_SHOW_SUCCESS:
print("広告の表示に成功しました。")
break
case AD_SHOW_ALREADY:
print("既に広告が表示されています。")
break
case AD_FREQUENCY_NOT_REACHABLE:
print("広告のフリークエンシーカウントに達していません。")
break
case AD_LOAD_INCOMPLETE:
print("抽選リクエストが実行されていない、もしくは実行中です。")
break
case AD_REQUEST_INCOMPLETE:
print("抽選リクエストに失敗しています。")
break
case AD_DOWNLOAD_INCOMPLETE:
print("広告のダウンロードが完了していません。")
break
case AD_CANNOT_DISPLAY:
print("指定されたViewControllerに広告が表示できませんでした。")
break
default:
break
}
}
これでバッチリ表示されますよ。判定するswitch文は余計かもしれませんけど。
(2通りの方法を教えてもらって、本当はもうひとつの方が王道だったんですが、それはエラーで使えなかったです)