VAMP iOS Integration Guide - AdGeneration/VAMP-iOS-SDK GitHub Wiki

Integration Guide

  • 最新ReleaseNote
  • 対象OSバージョン:iOS 9.0以降
  • 対象Xcodeバージョン:Xcode 9.2以降

SDKの動作確認環境

ver.
Xcode 12.0

SDKインストール手順

開発環境としてXcodeを利用し、iOSアプリケーション開発に必要な環境がインストールされていることを前提としています。

1. 動画リワード用SDKのインストール

SDKを以下よりダウンロードしてください。
https://github.com/AdGeneration/VAMP-iOS-SDK/releases

アドネットワーク各社のSDKも併せてダウンロードしてください。
AdMobを使用される場合はVAMP_iOS_v[VERSION].zip、使用されない場合はVAMP_iOS_v[VERSION]_no_admob.zipをご使用ください。

ダウンロードしたVAMP.embeddedframeworkとアドネットワーク各社のSDKをXcodeのプロジェクトナビゲータにドラッグ&ドロップします。
"Copy items if needed"にチェックがついていることを確認して、Finishを押します。

SDKのインポート

2. 接続先アドネットワークSDKのインストール

2.1 手動でインストール

VAMP以外に以下のアドネットワークはCocoaPodsでのインストールがサポートされていないため、手動でインストールする必要があります。

  • LINEAds (FIVE)
    • FiveAd.xcframework

2.2 CocoaPodsでインストール

Podfileの生成

プロジェクト([プロジェクト名].xcodeproj)のあるディレクトリで以下のコマンドを実行します。

$ pod init

このコマンドでPodfileが生成されます。

Podfileを編集

各アドネットワークSDKのバージョンについてはリリースノートをご確認ください。

  • AppLovin
pod 'AppLovinSDK', '[VERSION]'
  • AdMob
pod 'Google-Mobile-Ads-SDK', '[VERSION]'
  • Facebook Audience Network
pod 'FBAudienceNetwork', '[VERSION]'
  • maio
pod 'MaioSDK', '[VERSION]'
  • nend
pod 'NendSDK_iOS', '[VERSION]'
  • Tapjoy
pod 'TapjoySDK', '[VERSION]'
  • UnityAds
pod 'UnityAds', '[VERSION]'
  • Pangle (TikTok Audience Network)
pod 'Bytedance-UnionAD', '[VERSION]'

ライブラリのインストール

  • 初回のインストール

    $ pod install
    
  • Podsファイルの更新(ライブラリの追加、更新)

    $ pod update
    

動作確認

podのコマンドを実行したディレクトリ配下に[プロジェクト名].xcworkspaceというファイルが生成されます。 [プロジェクト名].xcodeprojを開くのではなく、[プロジェクト名].xcworkspaceというファイルを開いて実行します。

3. その他frameworkの追加

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

"(Optional)"と記載しているものは、StatusをOptionalにしてください。

VAMP.framework

  • AdSupport.framework
  • AVFoundation.framework
  • CoreMedia.framework
  • CoreTelephony.framework
  • MediaPlayer.framework
  • SafariServices.framework
  • StoreKit.framework
  • SystemConfiguration.framework
  • UIKit.framework
  • WebKit.framework

上記frameworkに加え、以下の各接続先アドネットワークに必要なframeworkを追加してください。

AppLovinSDK.framework

  • AdSupport.framework
  • Audiotoolbox.framework
  • AVFoundation.framework
  • CoreGraphics.framework
  • CoreMedia.framework
  • CoreMotion.framework
  • CoreTelephony.framework
  • Foundation.framework
  • MessageUI.framework
  • SafariServices.framework
  • StoreKit.framework
  • SystemConfiguration.framework
  • SafariServices.framework
  • UIKit.framework
  • WebKit.framework
  • libz.tbd

FBAudienceNetwork.framework

なし

FBSDKCoreKit.framework

  • Accelerate.framework
  • Accounts.framework
  • CoreLocation.framework
  • Social.framework
  • Security.framework
  • QuartzCore.framework
  • CoreGraphics.framework
  • UIKit.framework
  • Foundation.framework
  • AudioToolbox.framework

Maio.framework

  • AdSupport.framework
  • AVFoundation.framework
  • CoreMedia.framework
  • Foundation.framework
  • MobileCoreServices.framework
  • SystemConfiguration.framework
  • StoreKit.framework
  • UIKit.framework
  • WebKit.framework
  • libz.tbd

NendAd.framework

  • AdSupport.framework
  • Security.framework
  • ImageIO.framework
  • AVFoundation.framework
  • CoreMedia.framework
  • SystemConfiguration.framework
  • WebKit.framework
  • AVKit.framework
  • StoreKit.framework
  • libxml2.tbd

Tapjoy.framework

  • AdSupport.framework
  • CFNetwork.framework
  • CoreGraphics.framework
  • CoreTelephony.framework (古いバージョンのiOSと互換性が必要な場合はオプション)
  • Foundation.framework
  • ImageIO.framework (SDK 11.10 以降)
  • libc++
  • libz
  • MediaPlayer.framework
  • MobileCoreServices.framework
  • PassKit.framework(古いバージョンのiOSと互換性が必要な場合はオプション)
  • QuartzCore.framework
  • Security.framework
  • StoreKit.framework (古いバージョンのiOSと互換性が必要な場合はオプション)
  • SystemConfiguration.framework
  • UIKit.framework
  • WebKit.framework

UnityAds.framework

なし

BUAdSDK.framework

  • StoreKit.framework
  • MobileCoreServices.framework
  • WebKit.framework
  • MediaPlayer.framework
  • CoreMedia.framework
  • AVFoundation.framework
  • CoreTelephony.framework
  • SystemConfiguration.framework
  • AdSupport.framework
  • CoreMotion.framework
  • Accelerate.framework
  • libresolv.9.tbd
  • libc++.tbd
  • libz.tbd
  • libsqlite3.tbd
  • libbz2.tbd
  • libxml2.tbd
  • libiconv.tbd
  • libc++abi.tbd (newly required from sdk v3.5.0.0)
  • Security.framework
  • Detailed Steps:
  • Add the ImageIO.framework if the above dependency library is still reporting errors.

FiveAd.xcframework

  • AdSupport.framework
  • AppTrackingTransparency.framework
  • AVFoundation.framework
  • CoreMedia.framework
  • CoreTelephony.framework
  • SystemConfiguration.framework
  • AudioToolbox.framework
  • WebKit.framework
  • StoreKit.framework

Build Settingsの修正

Build SettingsのLinking > Other Linker Flagsに"-ObjC"を指定してください。

Other Linker Flagsの設定

info.plistの設定

iOS14でデフォルトのブラウザAppをChromeに切り替えた際に正しく遷移できなくなるケースがあるため、info.plistに↓追記必須となります

<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>http</string>
        <string>https</string>
    </array>

AdMobの設定

AdMob v7.42.0からはAdMobのapp IDをInfo.plistに追加する必要があります。

<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>

AdMobのAppIDの設定

※上記のIDはTest IDなので実際のapp IDを使用してください。 もし追加していない場合は以下のメッセージがログに出力され、クラッシュします。
"The Google Mobile Ads SDK was initialized incorrectly."

※使用されない場合はVAMP_iOS_v[VERSION]_no_admob.zipをご使用ください。

Pangle(TikTok Audience Network)の設定

プロジェクトplistファイルでApp Transport Security Settingsを追加するには、まず左側の展開矢印をクリックし、さらに右側のプラスマークをクリックすると、自動的にAllow Arbitrary Loadsオプションが追加され、値がYESに変更されます。
Pangle SDK APIは全HTTPSをサポートしていますが、広告主のクリエイティブが非HTTPSの場合もあります。

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

Swiftでの実装

プロジェクト直下に、以下の一行を追記したhファイルを作成します(例ではHeader.h)。

#import <VAMP/VAMP.h>

Build Settingsの「SwiftCompiler-Code Generation」内の「Objective-C Bridging Header」にHeader.hを設定します。

Objective-C Bridging Headerの設定

4-1. 広告表示の実装

VAMP.frameworkをインポートして、VAMPデリゲートをセットしてください。

import VAMP

class VideoSingleViewController:UIViewController, VAMPDelegate {

5-1. 実装方法

初期設定
    let pubId:String! = "*****" // 広告枠IDを設定してください

    override func viewDidLoad() {
        super.viewDidLoad()
        self.adReward = VAMP()
        self.adReward.setPlacementId(self.pubId)
        self.adReward.delegate = self
    }

AdGeneration管理画面で発行された広告枠IDを*****に設定します。

広告の読み込み
    self.adReward.load()

広告の読み込み完了時にはvampDidReceiveが通知されます。

表示(再生)
    self.adReward.show(from: self)
広告枠ID
    self.adReward.setPlacementId(self.pubId)

AdGenerationの管理画面から取得してください。

各メソッドの仕様やオプションについては、iOSリファレンスをご参照ください。

https://github.com/AdGeneration/VAMP-iOS-SDK/wiki/VAMP-iOS-API-Reference

Objective-Cでの実装

4-2. 広告表示の実装

VAMP.frameworkをインポートして、VAMPデリゲートをセットしてください。

#import <VAMP/VAMP.h>

@interface VideoSingleViewController : UIViewController<VAMPDelegate>

5-2. 実装方法

初期設定
  static NSString * const pubId = @"*****"; // 広告枠IDを設定してください

  - (void)viewDidLoad {
      [super viewDidLoad];

      self.adReward = [[VAMP alloc] init];
      [self.adReward setPlacementId:pubId];
      self.adReward.delegate = self;
  }

AdGeneration管理画面で発行された広告枠IDを*****に設定します。

広告の読み込み
    [self.adReward load];

広告の読み込み完了時にはvampDidReceiveが通知されます。

表示(再生)
    [self.adReward showFromViewController:self];
広告枠ID
    [self.adReward setPlacementId:pubId];

AdGenerationの管理画面から取得してください。

各メソッドの仕様やオプションについては、iOSリファレンスをご参照ください。

https://github.com/AdGeneration/VAMP-iOS-SDK/wiki/VAMP-iOS-API-Reference

デリゲート

広告表示準備完了

- (void)vamp:(VAMP *)vamp didReceiveAd:(VAMPAd *)ad;

広告のロードが成功したタイミングで呼び出されます。
※v3.1.6からdidReceiveAdは非推奨です。

失敗

vampDidFailはv3.0.0からdeprecated

// 全アドネットワークにおいて広告が取得できなかったときに通知  
- (void)vamp:(VAMP *)vamp didFailToLoadWithError:(VAMPError *)error withAd:(VAMPAd *)ad;
  

// 広告の表示に失敗したときに通知  
- (void)vamp:(VAMP *)vamp didFailToShowWithError:(VAMPError *)error withAd:(VAMPAd *)ad;

失敗した際に呼び出されます。

  • VAMPErrorCodeUnknown:不明なエラー(起動元アプリと接続できなくなった場合など)
  • VAMPErrorCodeServerError:サーバー間通信エラー
  • VAMPErrorCodeNoAdnetwork:配信可能なアドネットワークがない
  • VAMPErrorCodeNeedConnection:通信不通
  • VAMPErrorCodeMediationTimeout:タイムアウト
  • VAMPErrorCodeUserCancel:ユーザ都合の途中終了
  • VAMPErrorCodeNoAdStock:広告在庫がない or アドネットワーク側のエラー
  • VAMPErrorCodeAdnetworkError:アドネットワーク側のエラー
  • VAMPErrorCodeAdnetworkError:アドネットワーク側のエラー
  • VAMPErrorCodeNotSupportedOsVersion:非対応OSバージョン
  • VAMPErrorCodeInvalidParameter:パラメーターが不正
  • VAMPErrorCodeFrequencyCapped:キャップにかかっている

広告を閉じる

- (void)vamp:(VAMP *)vamp didCloseAd:(VAMPAd *)ad adClicked:(BOOL)adClicked;

広告を閉じたタイミングで呼び出されます。

インセンティブ付与通知

- (void)vamp:(VAMP *)vamp didCompleteAd:(VAMPAd *)ad;

動画再生完了時、または広告が閉じられた際にインセンティブ付与が可能な状態であれば呼び出されます。
動画の再生を途中でキャンセルした場合は、本デリゲートは呼び出されません。

アドネットワーク毎の広告取得 開始

- (void)vamp:(VAMP *)vamp loadStartAd:(VAMPAd *)ad;

アドネットワーク毎の広告取得が開始されたときに通知します。

アドネットワーク毎の広告取得 結果

- (void)vamp:(VAMP *)vamp loadResultAd:(VAMPAd *)ad success:(BOOL)success message:(nullable NSString *)message;

アドネットワーク毎の広告取得結果を、success,failedのどちらの場合でも通知します。
失敗しても次のアドネットワークがある場合、広告取得を実行します。
最終的に全てのアドネットワークの広告在庫がない場合は、
vampDidFailedToLoadのNO_ADSTOCKが通知されるため、ここで処理を止めないでください。
この通知をもとにshowしないようご注意ください。showする判定は、onReceiveを受け取ったタイミングで判断ください。

期限切れ

- (void)vamp:(VAMP *)vamp didExpireWithPlacementId:(NSString *)placementId;

didReceiveAdを受けてからの有効期限(55分)が切れた際に通知されます。
広告を表示するためには、再度ロードを行う必要があります。

6. テストモード

テストモードをONにすることで、テスト広告による表示確認が可能です。
(アプリをリリースするときは必ず本コードは削除してください)

Objective-C

[VAMP setTestMode:YES];

Swift

VAMP.setTestMode(true);

7. デバッグモード

デバッグモードをONにすることで、詳細なログが出力されます。
(アプリをリリースするときは必ず本コードは削除してください)

Objective-C

[VAMP setDebugMode:YES];

Swift

VAMP.setDebugMode(true)

8. 注意事項

  • 通信状況や動画広告によってはロードに時間がかかる場合があります。特に各アドネットワークの初回のロードは時間がかかる傾向にありますのでご注意ください。
  • 自社広告・純広告でLINEスタンプ、LINE着せかえ機能を使う場合は、info.plistに以下を追記する必要があります。
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>line</string>
</array>
  • iOS14でデフォルトのブラウザAppをChromeに切り替えた際に正しく遷移できなくなるケースがあります。以下をinfo.plistに追記することで回避することができます。
 <key>LSApplicationQueriesSchemes</key>
  <array>
   <string>http</string>
   <string>https</string>
  </array>

9. FAQ

その他不明点や、各アドネットワークの最新の対応OSバージョンは下記からご確認ください。
https://ad-generation.jp/support/adg-help/ad-type/rewarded-video-ad

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