Ad Exchange アプリ内広告の導入 - united-adstir/AdStir-Integration-Guide-iOS GitHub Wiki

対応OS

adstir SDK 2.12.0以降をお使いの場合はiOS 8.0以上の端末に配信されます。 adstir SDK 2.12.0未満をお使いの場合はiOS 6.0以上の端末に配信されます。

Google Mobile Ads SDKは7.28.0以上をご利用ください

iPhoneXへの対応について

以下のリンクを参考に、バナー広告をSafe Area内に表示していただくようお願いします。

https://developers.google.com/mobile-ads-sdk/docs/dfp/ios/x-ad-rendering

プロジェクトへのSDKの追加

CocoaPodsの利用(推奨)

CocoaPodsを利用すると、adstir SDKを簡単プロジェクトに追加できます。 まだCocoaPodsを利用されていない場合は、CocoaPodsのサイトをご覧頂き、導入してください。

既存、もしくは新規に生成したPodfileを開き、下段の2行を追加し、adstir SDKを利用するように設定します。

platform :ios, "6.0"

# 省略

pod 'AdStir-Ads-SDK'
pod 'AdStir-Ads-SDK/AdMobMediationAdapter'

新規にadstir SDKを追加する場合は、下記のターミナルアプリケーションを開き、プロジェクトのディレクトリコマンドを実行します。

$ pod install

adstir SDKを更新、または削除する場合は、下記のコマンドを実行します。

$ pod update

新規にCocoaPodsを導入した場合、プロジェクト名.xcworkspaceというファイルが生成されますので、今までのプロジェクトファイルではなく、こちらのファイルを開いて開発を進めてください。 すでに利用していた場合は、引き続き開発を進めてください。

手動でのプロジェクトへの追加

以前のバージョンのSDKを利用されている場合は、必ず関連するファイルを全て削除してください。

  1. GoogleMobileAds.frameworkAdstirAds.frameworklibAdMobMediationAdapter-AdstirAds.aを、プロジェクト内の任意の箇所にドラッグ&ドロップします。
  2. Copy items if neededにチェックを入れます。
  3. Add to targets欄で、adstir SDKを利用するすべてのターゲットにチェックを入れます。
  4. Finishをクリックします。

依存Framework/Libraryの追加

名前 ステータス
CoreMotion.framework Required
GLKit.framework Required
SafariServices.framework Optional

iOS 10以降では、CoreMotionをリンクする場合、Info.plistにPrivacy - Motion Usage Description(NSMotionUsageDescription)キーを追加し、使用理由を説明する必要があります。

ビルド設定の変更

  1. プロジェクトファイル設定画面を開きます
  2. 動画広告を組み込むビルドターゲットを選択します
  3. `Build Target“タブを選択します
  4. 画面右側の検索窓にOther Linker Flagsと入力し、検索します
  5. Other Linker Flags欄に、-ObjCと設定します
    adstirのSDKを呼び出すためにはこの設定が必須となり、設定がされていない場合は、案件切れ扱いとなってしまいます
  6. 組み込む対象の全てのビルドターゲットに、同じ設定を行います
    もしくは、この設定はプロジェクト単位で設定することも可能です

Amazonモバイル広告を利用される場合

こちらをご覧ください。

MoPub広告を利用される場合

こちらをご覧ください。

広告の設置

SDKの実装

Swift

  • ViewController.swift
import UIKit
import GoogleMobileAds

class ViewController: UIViewController, GADBannerViewDelegate {
    var bannerView: DFPBannerView!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        
        // ここでは、320x50サイズのバナー広告を表示します。
        // サイズについての詳細は、営業担当者からお知らせ致します。
        bannerView = DFPBannerView.init(adSize: kGADAdSizeBanner, origin: CGPoint(x:0.0, y:UIApplication.shared.statusBarFrame.size.height))
        bannerView.validAdSizes = [NSValueFromGADAdSize(kGADAdSizeBanner)]
        
        // 実際に配信に使用するAd Unit IDは、営業担当者から別途お知らせ致します。
        // こちらはテスト用のIDになります。
        bannerView.adUnitID = "/34264398/adstir_5358_39604_130929"
        bannerView.rootViewController = self
        
        // デリゲートは必要に応じて実装してください
        // See also: https://developers.google.com/mobile-ads-sdk/docs/dfp/ios/ad-events
        bannerView.delegate = self
        
        let request : DFPRequest! = DFPRequest.init()
        
        bannerView.load(request)
        
        self.view.addSubview(bannerView)
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
    
    deinit {
        self.bannerView.delegate = nil
        self.bannerView = nil
    }
    
    // MARK: -
    // MARK: GADBannerViewDelegate
    
    func adViewDidReceiveAd(_ bannerView: GADBannerView!) {
        // 広告取得完了時の動作を実装
        
        NSLog("Loaded!")
        NSLog("%@", bannerView.adNetworkClassName!)
    }
    
    func adView(_ bannerView: GADBannerView!, didFailToReceiveAdWithError error: GADRequestError!) {
        // 広告取得失敗時の動作を実装
        NSLog("Failed!")
    }
}

Objective-C

  • ViewController.m
@import GoogleMobileAds;

@interface ViewController () <GADBannerViewDelegate>

@property (nonatomic, strong) DFPBannerView *bannerView;

@end

@implementation ViewController

- (void)viewDidLoad
{
    // ここでは、320x50サイズのバナー広告を表示します。
    // サイズについての詳細は、営業担当者からお知らせ致します。
    DFPBannerView *bannerView = [[DFPBannerView alloc] initWithAdSize:kGADAdSizeBanner origin:CGPointMake(0, UIApplication.sharedApplication.statusBarFrame.size.height)];
    bannerView.validAdSizes = @[NSValueFromGADAdSize(kGADAdSizeBanner)];

    // 実際に配信に使用するAd Unit IDは、営業担当者から別途お知らせ致します。
    // こちらはテスト用のIDになります。
    bannerView.adUnitID = @"/34264398/adstir_5358_39604_130929";
    bannerView.rootViewController = self;
    // デリゲートは必要に応じて実装してください
    // See also: https://developers.google.com/mobile-ads-sdk/docs/dfp/ios/ad-events
    bannerView.delegate = self;

    DFPRequest *request = DFPRequest.new;

    [bannerView loadRequest:request];
    [self.view addSubview:bannerView];

    self.bannerView = bannerView;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

- (void)dealloc {
    self.bannerView.delegate = nil;
    self.bannerView = nil;
}

#pragma mark -
#pragma mark GADBannerViewDelegate

- (void)adViewDidReceiveAd:(GADBannerView *)bannerView {
    // 広告取得完了時の動作を実装
}

- (void)adView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(GADRequestError *)error {
    // 広告取得失敗時の動作を実装
}

@end

対応している広告サイズ

  • バナー広告
    • 320x50
    • 320x100
    • 300x250

よくある質問

AppStoreの審査が通りません

v2.7.1以前にバンドルされているGoogleMobileAds.frameworkをご利用の場合、下記のようなメッセージが来る場合があります。
担当者から最新のSDKを受け取っていただくか、こちらから最新のSDKをダウンロードしていただき、GoogleMobileAds.frameworkを差し替えてください。

This app attempts to access privacy-sensitive data without a usage description.
The app's Info.plist must contain an NSCalendarsUsageDescription key 
with a string value explaining to the user how the app uses this data.