Skip to content

Banner_Ad_iOS

AdGeneration edited this page May 9, 2019 · 30 revisions

iOS SDK Getting Started / バナー広告

はじめに

開発環境にXcodeを使用することを前提とします。

対応バージョン

iOS 8.0以降

導入の流れ

  1. SDKをダウンロードします
  2. 例を参考に広告表示の実装を行います

App Transport Security(ATS)対応については「iOS SDK導入時のApp Transport Security(ATS)対応について」を御覧ください。

1. SDKをダウンロードする

CocoaPodsを使用する

  1. 次の行をプロジェクトのPodfileに追加します。
    pod 'AdGeneration'
  2. pod install を実行します。

手動でインストールする

ⅰ. ダウンロードする

こちらからダウンロードしてください。
ダウンロード
(Downloads > ADG.framework.zip )

プロジェクトにSDKを追加する

ダウンロードしたZIPファイルを解凍し、ADG_iOSSDKフォルダの中に入っている"ADG.framework"をプロジェクトナビゲータの任意の場所にドラッグ&ドロップするか、右クリック > Add Files to ... を選択し、"Copy items if needed"にチェックがついていることを確認して、Finishを押します。

img

ⅱ. Ad Generation SDKが参照しているframeworkを追加する

Xcodeのプロジェクトナビゲータからプロジェクトファイルを選択し、 "TARGETS" > アプリケーションスキーマ > "General"タブ > "Linked Frameworks and Libraries" の+ボタンから、各SDKが使用するframeworkの追加をしてください。

  • SystemConfiguration.framework
  • CoreTelephony.framework
  • CoreLocation.framework
  • AVFoundation.framework
  • CoreMedia.framework
  • MediaPlayer.framework
  • SafariServices.framework
  • WebKit.framework
  • AdSupport.framework (※)

(※)はOptionalで追加

img

ⅲ. リソースファイルをプロジェクトに追加する

ADG.framework/ResourcesにあるADG-Resources.bundleをXcodeのプロジェクトナビゲータの任意の場所にドラッグ&ドロップするか、右クリック > Add Files to ... を選択し、"Copy items if needed"にチェックがついていることを確認して、Finishを押します。

img

img

ⅳ. Other Linker Flagsの設定

Xcodeのプロジェクトナビゲータからプロジェクトファイルを選択し、
"TARGETS" > アプリケーションスキーマ > "Build Settings"タブ > "Linking" > "Other Linker Flags"に"-ObjC"を追加してください。

IMG

2. 広告表示を実装する

広告を配置するViewを作成します。以下の例では下部中央を指定しています。
AutoLayoutの制約は、広告のサイズに合わせて設定して下さい。

img

  1. 広告を表示するViewやViewController等でADG/ADGManagerViewController.hをインポートします。
  2. 広告表示用のView(サンプルコードだと self.adView が該当します)をself.viewにaddSubViewして追加 または StoryBoardにて追加していただき、広告リクエストをする前に配置させておきます。
  3. ADGManagerViewControllerクラスのインスタンスを生成します。
  4. 広告リクエストを行います。
  5. viewDidAppearで広告のローテーション再開を行います。
    画面切り替えで本処理を走らせたくない場合はバックグラウンドからの復帰時に行ってください。
  6. ViewControllerのdeallocで、インスタンスの破棄をします。
    delegateへのnilセットを忘れないようご注意ください。
  7. delegateメソッドを実装してください。
#import "BannerAdsObjCViewController.h"
#import <ADG/ADGManagerViewController.h>

@interface BannerAdsObjCViewController () <ADGManagerViewControllerDelegate>

@property (weak, nonatomic) IBOutlet UIView *adView;
@property (nonatomic) ADGManagerViewController *adg;

@end

@implementation BannerAdsObjCViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    /*
     locationID:  管理画面から払い出された広告枠ID
     adType:      枠サイズ
                  kADG_AdType_Sp:320x50, kADG_AdType_Large:320x100,
                  kADG_AdType_Rect:300x250, kADG_AdType_Tablet:728x90,
                  kADG_AdType_Free:自由設定
     rootViewController: 広告を配置するViewController
     */
    self.adg = [[ADGManagerViewController alloc] initWithLocationID:@"48547"
                                                             adType:kADG_AdType_Sp
                                                 rootViewController:self];
    [self.adg addAdContainerView:self.adView]; // 広告Viewを配置するViewを指定
    self.adg.delegate = self;
    [self.adg loadRequest]; // 広告リクエスト
}

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    // 画面復帰時のローテーション再開
    [self.adg resumeRefresh];
}

- (void)dealloc {
    // インスタンスの破棄
    self.adg.delegate = nil;
    self.adg = nil;
}

- (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController {
    NSLog(@"Received an ad.");
}

- (void)ADGManagerViewControllerFailedToReceiveAd:(ADGManagerViewController *)adgManagerViewController
                                             code:(kADGErrorCode)code {
    NSLog(@"Failed to receive an ad.");
    // エラー時のリトライは特段の理由がない限り必ず記述するようにしてください。
    switch (code) {
        case kADGErrorCodeNeedConnection:   // ネットワーク不通
        case kADGErrorCodeExceedLimit:      // エラー多発
        case kADGErrorCodeNoAd:             // 広告レスポンスなし
            break;
        default:
            [adgManagerViewController loadRequest];
            break;
    }
}

- (void)ADGManagerViewControllerDidTapAd:(ADGManagerViewController *)adgManagerViewController{
    NSLog(@"Did tap ad.");
}

@end

各メソッドの仕様やオプションについて

iOSリファレンスをご参照ください。

Delegateについて

広告受信
- (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController

SDKからの広告リクエストが成功したタイミングで呼び出されます。
また、ローテーションによる広告取得成功の際にも呼び出されます。

広告受信失敗
- (void)ADGManagerViewControllerFailedToReceiveAd:(ADGManagerViewController *)adgManagerViewController code:(kADGErrorCode)code

広告読込みが失敗した際に呼び出されます。

  • kADGErrorCodeUnknown……不明なエラーが発生しました。
  • kADGErrorCodeCommunicationError……アドサーバー間通信/連携しているアドネットワークSDKとの接続等でエラーが発生しました。
  • kADGErrorCodeReceivedFiller……白板検知されました。
  • kADGErrorCodeNoAd……接続先アドネットワーク全て広告在庫切れが返却されました。
  • kADGErrorCodeNeedConnection……デバイスがネットワークに接続されていません。
  • kADGErrorCodeExceedLimit……エラー回数が上限に達しました。
広告タップ
- (void)ADGManagerViewControllerDidTapAd:(ADGManagerViewController *)adgManagerViewController

広告がタップされた際に呼び出されます。
(ブラウザやストア起動の成否は問いません)

注意事項

バナー広告Viewの配置位置について

adOriginに広告Viewを配置する際の親Viewに対する相対位置を指定してください。

フリーサイズについて

adtypekADG_AdType_Freeを指定し、adSizeに表示サイズを指定してください。

広告の拡大縮小について

adtypekADG_AdType_Freeを指定し、adSizeに表示サイズを指定してください。
adScaleに拡大倍率を指定してください。
以下は300x250を1.2倍に指定した場合の例です。

self.adg = [[ADGManagerViewController alloc] initWithLocationID:@"xxxxx"
                                                         adType:kADG_AdType_Free
                                             rootViewController:self];
[self.adg addAdContainerView:self.adView];
self.adg.adSize = CGSizeMake(360, 300);
self.adg.adScale = 1.2;
審査完了前の稼働確認について

審査完了前に広告の掲載イメージをご確認頂く際は、以下のIDに置き換えご確認ください。
このIDをセットしたままアプリをリリースしないようご注意ください。

サイズ テストID 配信広告
320×50 48547 テスト広告
320×100 48548 テスト広告
300×250 48549 テスト広告
728×90 48550 テスト広告
位置情報の扱いについて

ユーザーが位置情報に関する権限をアプリに付与かつ、Ad Generation SDKにて位置データ付与の設定をONにしている場合、位置情報を広告リクエストに付与します。
位置データ付与のデフォルト設定に関しては、SDKバージョンにより異なります。
v2.13.0より、位置データ付与の設定がデフォルトOFFに変更になりました。
有効にする方法等、詳しくはこちらをご覧ください。位置情報の扱いについて

また、位置情報サービスを使用される場合には、マーケットの規約に従い、ユーザーへの通知及び同意をお願いいたします。
詳しくはこちらをご覧ください。位置情報を利用した広告配信について

Swiftでの実装

"3. Ad Generation SDKが参照しているframeworkを追加する"まで行ってください。

広告の呼び出しを実装します。

以下コード例です。
UIViewControllerインスタンスの破棄が行われる際は、広告の破棄やdelegateへのnilセットも必ず行ってください。

import UIKit
import ADG

class BannerAdsSwiftViewController: UIViewController {

    @IBOutlet weak var adView: UIView!
    private var adg: ADGManagerViewController?

    override func viewDidLoad() {
        super.viewDidLoad()

        /*
         locationID:  管理画面から払い出された広告枠ID
         adType:      枠サイズ
                      adType_Sp:320x50, adType_Large:320x100,
                      adType_Rect:300x250, adType_Tablet:728x90,
                      adType_Free:自由設定
         rootViewController: 広告を配置するViewController
         */
        adg = ADGManagerViewController(locationID: "48547", adType: .adType_Sp, rootViewController: self)
        adg?.addAdContainerView(self.adView) // 広告Viewを配置するViewを指定
        adg?.delegate = self
        adg?.loadRequest() // 広告リクエスト
    }

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        // 画面復帰時のローテーション再開
        adg?.resumeRefresh()
    }

    deinit {
        // インスタンスの破棄
        adg = nil
    }
}

extension BannerAdsSwiftViewController: ADGManagerViewControllerDelegate {

    func adgManagerViewControllerReceiveAd(_ adgManagerViewController: ADGManagerViewController) {
        print("Received an ad.")
    }

    func adgManagerViewControllerFailed(toReceiveAd adgManagerViewController: ADGManagerViewController, code: kADGErrorCode) {
        print("Failed to receive an ad.")
        // エラー時のリトライは特段の理由がない限り必ず記述するようにしてください。
        switch code {
        case .adgErrorCodeNeedConnection, // ネットワーク不通
            .adgErrorCodeExceedLimit, // エラー多発
            .adgErrorCodeNoAd: // 広告レスポンスなし
            break
        default:
            adgManagerViewController.loadRequest()
        }
    }

    func adgManagerViewControllerDidTapAd(_ adgManagerViewController: ADGManagerViewController) {
        print("Did tap ad.")
    }
}

Home

導入マニュアルのドキュメントはコチラに移行しました。

お手数ですがリンクから遷移してください。 https://docs.sdk.ad-generation.jp/

Clone this wiki locally