バナー型広告_実装手順 - fan-ADN/nendSDK-iOS GitHub Wiki

事前準備

まだ広告枠作成、SDKダウンロードを行っていない場合、下記リンク先を参照してください。

SDKの組み込み

プロジェクトにSDKを追加していない場合、以下のいずれかの方法でSDKを追加してください。

広告サイズ

表示する広告サイズについては以下を参照してください。

ここでは最もシンプルな構造を例にしてNADViewの実装方法について説明します。それ以外の詳しい実装についてはサンプルソースをご参照ください。

Interface Builderを使用しての実装については、Interface_Builderを使用した実装手順を参照ください。

(1) delegate 準拠

広告ビューを保持するクラスでNADViewをインポートしてNADViewDelegateに準拠します。

Swift
import UIKit
import NendAd

class YourAppViewController: UIViewController, NADViewDelegate {

    private var nadView: NADView!

}
Objective-C
#import <UIKit/UIKit.h>
#import <NendAd/NADView.h>

@interface YourAppViewController : UIViewController <NADViewDelegate>

@property (nonatomic, strong) NADView *nadView;

@end

注意:複数画面で構成されるアプリケーションで、各 ViewController ごとにインスタンス生成するような実装方法の場合には、画面ごとに必ず後述の(7)定期ロードの管理を行ってください。

例) NADView生成からロードまで

Swift
import UIKit
import NendAd

class YourAppViewController: UIViewController, NADViewDelegate {

    private var nadView: NADView!

    override func viewDidLoad() {
        super.viewDidLoad()
        // NADViewクラスを生成
        nadView = NADView(frame: CGRect(x: 0, y: 0, width: 320, height: 50))
        // 広告枠のspotIDとapiKeyを設定(必須)
        nadView.setNendID(spotID, apiKey: "apiKey")
        // delegateを受けるオブジェクトを指定(必須)
        nadView.delegate = self
        // 読み込み開始(必須)
        nadView.load()
        // 通知有無にかかわらずViewに乗せる場合
        self.view.addSubview(nadView)
    }

}
Objective-C
@implementation YourAppViewController

- (void)viewDidLoad
{
    [super viewDidLoad];

    // (2) NADView の作成
    self.nadView = [[NADView alloc] initWithFrame:CGRectMake(0, 0, 320, 50)];
    // (3) set spotID, apiKey.
    [self.nadView setNendID:spotID apiKey:@"apiKey"];
    [self.nadView setDelegate:self]; //(4)
    [self.nadView load]; //(5)
    [self.view addSubview:self.nadView]; // 最初から表示する場合
}

@end

任意の位置、320x50サイズのCGRectを引数にインスタンスを生成します。

Swift
nadView = NADView(frame: CGRect(x: 0, y: 0, width: 320, height: 50))
Objective-C
self.nadView = [[NADView alloc] initWithFrame: CGRectMake(0, 0, 320, 50)];

(3) spotID, apiKeyの設定

nend管理画面で発行した、該当アプリの広告枠のspotID、apiKeyをセットします。

Swift
nadView.setNendID(spotID, apiKey: "apiKey")
Objective-C
[self.nadView setNendID:spotID apiKey:@"apiKey"];

※この時点で広告設定情報へのアクセスを開始します。
広告枠ステータスが「承認中」の場合、広告のロードをしても受信エラーになります。
nend 管理画面で該当アプリの広告枠ステータスが「アクティブ」であることを確認してください。
広告枠の申請は、承認済みになるとステータスが「アクティブ」に変わり、登録メールアドレス宛に広告枠承認のお知らせが届きます。
メール到着の数時間後には広告配信ができる状態になります。

単に実装方法の確認を行う場合は一時的に表示テスト用IDを利用するなどしてください。

(4) デリゲートオブジェクトの設定

NADViewが広告を受信開始した場合に指定されたデリゲートのnadViewDidFinishLoad:メソッドを呼んで通知を行います。指定するデリゲートはnadViewDidFinishLoad:メソッドを実装するNADViewDelegateプロトコルに準拠させたクラスを指定します。

Swift
nadView.delegate = self
Objective-C
[self.nadView setDelegate:self];

(5) 広告のロード

NADViewloadメソッドで広告のロードを開始します。

Swift
nadView.load()
Objective-C
[self.nadView load];

※リトライ間隔を標準値以外で指定したい場合には、以下のメソッドを利用してロードを開始します。

Swift
// 例) 問い合わせエラー時には60分間隔で再問い合わせする
nadView.load(["retry" : "3600"])
Objective-C
// 例) 問い合わせエラー時には60分間隔で再問い合わせする
[self.nadView load:@{@"retry": @"3600"}];

(6) Delegate 通知

広告のロードが完了すると(4)で指定したデリゲートのnadViewDidFinishLoad:メソッドに通知されます。ロードが完了してからNADViewを表示したい場合はここで行うこと ができます。

Swift
func nadViewDidFinishLoad(_ adView: NADView!) {
    print("delegate nadViewDidFinishLoad:")
}
Objective-C
- (void)nadViewDidFinishLoad:(NADView *)adView
{
    NSLog(@"delegate nadViewDidFinishLoad:");
}

【任意】広告バナークリック通知

表示されている広告バナーをクリックした際に通知されます。ただし、このイベントをカウントしてもネットワーク状況や環境により「実際に任意の広告表示ができた数 (サーバ側でのクリック数としてのカウント)」とは異なる場合がありますので注意してください。

Swift
func nadViewDidClickAd(_ adView: NADView!) {
    print("delegate nadViewDidClickAd")
}
Objective-C
- (void)nadViewDidClickAd:(NADView *)adView
{
    NSLog(@"delegate nadViewDidClickAd:");
}

【任意】インフォメーションボタンクリック通知

表示されている広告バナーのインフォメーションボタンをクリックした際に通知されます。

Swift
func nadViewDidClickInformation(_ adView: NADView!) {
    print("delegate nadViewDidClickInformation")
}
Objective-C
- (void)nadViewDidClickInformation:(NADView *)adView
{
    NSLog(@"delegate nadViewDidClickInformation:");
}

【任意】広告受信通知

広告の受信に成功した場合通知されます。広告を受信するたびに任意の処理を行いたい場合に利用します。

Swift
func nadViewDidReceiveAd(_ adView: NADView!) {
    print("delegate nadViewDidReceiveAd")
}
Objective-C
- (void)nadViewDidReceiveAd:(NADView *)adView
{
    NSLog(@"delegate nadViewDidReceiveAd:");
}

【任意】広告受信エラー通知

広告の受信に失敗した場合に通知されます。通信エラー、広告在庫がなくなった場合など、何らかの理由で広告を表示できない場合に通知します。エラー時に広告を非表示にするなどの処理が必要な場合に利用します。

Swift
func nadViewDidFail(toReceiveAd adView: NADView!) {
    // エラーごとに処理を分岐する場合
    let error: NSError = adView.error as NSError

    switch (error.code) {
    case NADViewErrorCode.NADVIEW_AD_SIZE_TOO_LARGE.rawValue:
        // 広告サイズがディスプレイサイズよりも大きい
        break
    case NADViewErrorCode.NADVIEW_INVALID_RESPONSE_TYPE.rawValue:
        // 不明な広告ビュータイプ
        break
    case NADViewErrorCode.NADVIEW_FAILED_AD_REQUEST.rawValue:
        // 広告取得失敗
        break
    case NADViewErrorCode.NADVIEW_FAILED_AD_DOWNLOAD.rawValue:
        // 広告画像の取得失敗
        break
    case NADViewErrorCode.NADVIEW_AD_SIZE_DIFFERENCES.rawValue:
        // リクエストしたサイズと取得したサイズが異なる
        break
    default:
        break
    }
}
Objective-C
- (void)nadViewDidFailToReceiveAd:(NADView *)adView
{
    NSLog(@"delegate nadViewDidFailToLoad:");
    // エラーごとに分岐する場合
    NSError* error = adView.error;
    NSString* domain = error.domain;
    NADViewErrorCode errorCode = error.code;
    // domain を利用してアプリ側で任意出力が可能
    NSLog(@"%@",[NSString stringWithFormat: @"code=%ld, message=%@", (long)errorCode, domain]);
    switch (errorCode) {
        case NADVIEW_AD_SIZE_TOO_LARGE:
            // 広告サイズがディスプレイサイズよりも大きい
            break;
        case NADVIEW_INVALID_RESPONSE_TYPE:
            // 不明な広告ビュータイプ
            break;
        case NADVIEW_FAILED_AD_REQUEST:
            // 広告取得失敗
            break;
        case NADVIEW_FAILED_AD_DOWNLOAD:
            // 広告画像の取得失敗
            break;
        case NADVIEW_AD_SIZE_DIFFERENCES:
            // リクエストしたサイズと取得したサイズが異なる
            break;
        default:
            break;
    }
}

NADViewErrorCode (NADView.NSError.code) の内容

NADViewErrorCode エラー内容
NADVIEW_FAILED_AD_REQUEST 広告取得失敗 (ネットワークエラー、サーバエラー、在庫切れなど)
NADVIEW_AD_SIZE_TOO_LARGE 広告サイズがディスプレイサイズよりも大きい
NADVIEW_AD_SIZE_DIFFERENCES リクエストしたサイズと取得したサイズが異なる※
NADVIEW_INVALID_RESPONSE_TYPE 不明な広告ビュータイプ※
NADVIEW_FAILED_AD_DOWNLOAD 広告画像の取得失敗
※基本的に発生することは稀です

(7) 定期ロードの管理

広告のロードを開始した後に画面内に表示しないケースがある場合には、 必ず以下の処理を行ってください。 これには、

  • 複数画面で構成された画面遷移が発生するアプリケーションにおいて各画面で個別に広告のインスタンスを生成している場合
  • 複数広告の切り替え処理(広告スイッチングSDKの利用含む)を行う場合などが該当します。

定期ロードの中断

広告を画面内に表示しない、もしくは画面遷移等でView自体が表示されない場合にはpauseメッセージを送信、広告の定期ロードを中断します。

例) 画面が隠れたら定期ロードを中断

Swift
override func viewWillDisappear(_ animated: Bool) {
    nadView.pause()
}
Objective-C
- (void)viewWillDisappear:(BOOL)animated
{
    [self.nadView pause];
}

定期ロードの再開

広告を再び画面内に表示、または画面遷移等でView自体を表示する場合にはresumeメッセージを送信、広告の定期ロードを再開します。

例) 画面が表示されたら定期ロードを再開

Swift
override func viewWillAppear(_ animated: Bool) {
    nadView.resume()
}
Objective-C
- (void)viewWillAppear:(BOOL)animated
{
    [self.nadView resume];
}

検証

⚠️ **GitHub.com Fallback** ⚠️