# Ad Generation / VAMP SDK インテグレーションガイド > Supership の広告 SDK (Ad Generation / VAMP) の公開インテグレーションガイド This file contains all documentation content in a single document following the llmstxt.org standard. ## APIリファレンス Ad Generation SDK APIリファレンス ---- このページではAd Generation SDKのAPIリファレンスについて説明します。 ## プラットフォーム別APIリファレンス - [iOS APIリファレンス](/ad-generation/api-reference/reference_ios) - [Android APIリファレンス](/ad-generation/api-reference/reference_android) --- ## Android APIリファレンス ## ADG FrameLayout └ ADG ### Constructors #### ADG(Context ct) ```java public ADG(Context ct) ``` コンストラクタ **Parameters** - *ct* 広告を表示する画面のActivity ### Methods #### getNativeMediationView() ```java public View getNativeMediationView(View view) ``` メディア側で構築した他社SDKの連携ネイティブ広告(View)を引数として受け取り、ADGeneration SDK内の内部処理用にラッピング処理をおこなったViewを返却します。 **Parameters** - *view* メディア側で構築した他社SDKの連携ネイティブ広告 **Return** ネイティブ広告View --- #### getLocationId() ```java public String getLocationId() ``` 広告枠IDを取得します。 --- #### setLocationId() ```java public void setLocationId(String locationId) ``` 広告枠IDを設定します。 **Parameters** - *locationId* 広告枠ID --- #### ~~isEnableTestMode()~~ ```java public boolean isEnableTestMode() ``` :::warning[非推奨] 代わりに `isTestModeEnabled` メソッドを使用してください。 ::: --- #### ~~setEnableTestMode(boolean enableTestMode)~~ ```java public void setEnableTestMode(boolean enableTestMode) ``` :::warning[非推奨] 代わりに `setTestModeEnabled` メソッドを使用してください。また、デバッグログを出力する場合は `ADGSettings.setDebugLogging` メソッドを使用してください。 ::: --- #### isTestModeEnabled() ```java public boolean isTestModeEnabled() ``` テストモードが有効かどうかを返します。 **Return** テストモードが有効な場合はtrue、そうでない場合はfalse #### setTestModeEnabled(boolean enabled) ```java public void setTestModeEnabled(boolean enabled) ``` trueを指定した場合、テストモードが有効になります。 :::warning テストモードのままリリースしないようにご注意ください。配信する広告によっては収益が発生しない場合があります。 ::: **Parameters** - *enabled* テストモードを有効にする場合はtrue、そうでない場合はfalse --- #### getAdListener() ```java public ADGListener getAdListener() ``` ※ v2.28.0〜 Nullableアノテーションを追加 Listenerを取得します。 **Return** ADGListener --- #### getResponseInfo() ```java @Nullable public ADGResponseInfo getResponseInfo() ``` 広告レスポンスのメタ情報を取得します。SDK 2.34.0 で追加されました。広告レスポンス未取得時は `null` を返します。 **Return** ADGResponseInfo(未取得時はnull) **Usage** ```java ADGResponseInfo info = adg.getResponseInfo(); if (info != null) { Log.d("ADG", info.toString()); // JSON文字列で出力されます } ``` --- #### setAdListener(ADGListener listener) ```java public void setAdListener(ADGListener listener) ``` ※ v2.28.0〜 Nullableアノテーションを追加 Listenerを設定します。 **Parameters** - *listener* ADGListener --- #### setAdBackGroundColor(int color) ```java public void setAdBackGroundColor(int color) ``` 背景色を指定します。 **Parameters** - *color* Colorクラスの定数 --- #### ~~setPreLoad(boolean preLoad)~~ ```java public void setPreLoad(boolean preLoad) ``` :::warning[非推奨] このメソッドを呼んでも何もしません。また、代替もありません。 ::: --- #### setAdFrameSize(AdFrameSize adFrameSize) ```java public void setAdFrameSize(AdFrameSize adFrameSize) ``` 広告のサイズを指定します。 **Parameters** - *adFrameSize* 広告枠サイズ AdFrameSizeの定数(SP/TABLET/LARGE/RECT)のいずれかを指定頂けます。 管理画面で設定した広告枠の設定に合わせてご選択ください。 ```java adg.setAdFrameSize(AdFrameSize.SP); ``` FREEを指定することで上記以外のサイズにすることも可能です。 その場合はサイズ指定(横幅,縦幅)が必要となります。 ```java adg.setAdFrameSize(AdFrameSize.FREE.setSize(57, 57)); ``` 個数指定アイコンの場合のサイズは下記の通りです。 - テキストあり:横幅 80 × 個数 / 縦幅 80 - テキストなし:横幅 57 × 個数 / 縦幅 57 --- #### setAdScale(double scale) ```java public void setAdScale(double scale) ``` 広告の表示倍率を指定します。 **Parameters** - *scale* 表示倍率 adFrameSizeとセットでご使用ください。 adFrameSizeは表示領域、adScaleは広告自体のサイズの指定となります。 例:横320×縦50の広告を2.0倍に拡大 ```java adg.setAdFrameSize(AdFrameSize.FREE.setSize(640, 100)); adg.setAdScale(2.0); ``` --- #### setReloadWithVisibilityChanged(boolean reloadWithVisibilityChanged) ```java public void setReloadWithVisibilityChanged(boolean reloadWithVisibilityChanged) ``` アプリ画面が切り替わるタイミングで`stop()`と`start()`を自動で行うかどうかを指定します。 **Parameters** - *reloadWithVisibilityChanged* 自動:true 手動:false これをfalseにした場合は適切なタイミング(通常はonResume/onPause)での`start()/stop()`の呼び出しが必須となります。 また、ADGインスタンス生成時も`start()`の呼び出しが必要になります。 --- #### ~~setFillerRetry(boolean retry)~~ ```java public void setFillerRetry(boolean retry) ``` :::warning[非推奨] このメソッドを呼んでも何もしません。また、代替もありません。 ::: --- #### setUsePartsResponse(boolean usePartsResponse) ```java public void setUsePartsResponse(boolean usePartsResponse) ``` RTBのようにHTMLタグの広告とネイティブ広告(`ADGNativeAd`のAPIで各項目が取得できる)の両方取得できる場合、どちらを優先するかを指定します。 **Parameters** - *usePartsResponse* true:ネイティブ広告を優先する false:HTMLタグ広告を優先する #### start() ```java public void start() ``` 広告のロードを開始します。ロードに成功した場合、広告が表示されます。Activity#onResume()で呼び出してください。 --- #### stop() ```java public void stop() ``` 広告を破棄します。Activity#onPause()で呼び出してください。 --- #### ~~pause()~~ ```java public void pause() ``` :::warning[非推奨] 代わりに `stop` メソッドを使用してください。 ::: #### ~~resumeRefreshTimer()~~ ```java public void resumeRefreshTimer() ``` :::warning[非推奨] 代わりに `start` メソッドを使用してください。 ::: #### setAutomaticallyRemoveOnReload(View view) ```java public void setAutomaticallyRemoveOnReload(View view) ``` ローテーション時に自動的に削除するViewを指定します。 **Parameters** - *view* ネイティブ広告を配置しているView --- #### insertADGLabelTargetingWithCustomKey (String key, String value) ```java public void insertADGLabelTargetingWithCustomKey (String key, String value) ``` ラベルターゲティングを利用するためのKey/Valueを広告リクエストに付与します。 例えば、 ```java adg.insertADGLabelTargetingWithCustomKey("user_attributes", "beauty1"); adg.insertADGLabelTargetingWithCustomKey("user_attributes", "beauty2"); ``` or ```java adg.insertADGLabelTargetingWithCustomKey("user_attributes", "beauty1,beauty2"); ``` と実装した際、`label_user_attributes=beauty1,beauty2`というKey/Valueを付与します。 **Parameters** - *key* ラベル - *value* ラベルに付与するvalue #### removeADGLabelTargetingWithCustomKey(String key) ```java public void removeADGLabelTargetingWithCustomKey(String key) ``` 設定されているラベルターゲティング内のより指定したKeyよりKey/Valueを削除します。 **Parameters** - *key* ラベル #### getADGLabelTargetingWithCustomKeyValues() ```java @Nullable public Map getADGLabelTargetingWithCustomKeyValues() ``` 設定されているラベルターゲティング用のKey/Valueを返却します。該当するパラメータが存在しない場合はnullを返却します。 **Return** 設定されているラベルターゲティング用のKey/Value #### ~~addADGLabelTargetingWithCustomKey (String key, String value)~~ ```java public void addADGLabelTargetingWithCustomKey (String key, String value) ``` :::warning **v2.24.0** で削除されました。 今後は[insertADGLabelTargetingWithCustomKey](/ad-generation/api-reference/reference_android#insertadglabeltargetingwithcustomkey-string-key-string-value)を利用してください。 ::: #### ~~delegateViewManagement(View view)~~ ```java public void delegateViewManagement(View view) ``` :::warning[非推奨] ネイティブ広告配置時に、ネイティブ広告のViewをADGのライフサイクルで管理します。 ネイティブ広告のクリックやローテーションの制御に必要となります。 ADGNativeAd以外のネイティブ広告を配置する場合に使用します。 ::: **Parameters** - *view* ネイティブ広告を配置しているView --- #### ~~delegateViewManagement(View view, ADGNativeAd adgNativeAd)~~ ```java public void delegateViewManagement(View view, ADGNativeAd adgNativeAd) ``` :::warning[非推奨] ネイティブ広告配置時に、ネイティブ広告のViewをADGのライフサイクルで管理します。 ネイティブ広告のクリックやローテーションの制御に必要となります。 ADGNativeAdのネイティブ広告を配置する場合に使用します。 ::: **Parameters** - *view* ネイティブ広告を配置しているView(タップ領域となります) - *adgNativeAd* ADGNativeAdのインスタンス --- #### setInformationIconViewDefault(boolean informationIconViewDefault) ```java public void setInformationIconViewDefault(boolean informationIconViewDefault) ``` インフォメーションアイコンのデフォルト表示を設定します。 デフォルトの表示位置は`setAutomaticallyRemoveOnReload(View view)`で指定したViewの右上に表示されます。 表示位置を変更したい場合は、`false`を設定し`ADGInformationIconView`を生成してください。 **Parameters** - *informationIconViewDefault* インフォメーションアイコンのデフォルト表示 ## ADGResponseInfo 広告レスポンスのメタデータを保持する不変オブジェクトです。SDK 2.34.0 で追加されました。各フィールドはレスポンスに値が無い場合、空文字が格納されます。 **Fields** | フィールド名 | 説明 | | :--- | :--- | | `adId` | メディエーション広告ID | | `className` | メディエーションのクラス名 | | `creativeId` | クリエイティブID | | `adNetworkId` | アドネットワークID | | `dspId` | DSP ID | | `seat` | Seat | **取得例** ```java ADGResponseInfo info = adg.getResponseInfo(); if (info != null) { String creative = info.getCreativeId(); String dsp = info.getDspId(); } ``` ## ADGListener ### Constructors #### ADGListener() ```java public ADGListener() ``` コンストラクタ ### Fields #### failedLimit ```java public int failedLimit = 5 ``` 広告取得失敗後の自動リトライ上限回数を設定します。 デフォルト値は `5` です。 ### Methods #### onReceiveAd() ```java abstract public void onReceiveAd() ``` 広告の取得が成功した場合に呼び出されます。 --- #### onReceiveAd(Object mediationNativeAd) ```java public void onReceiveAd(Object mediationNativeAd) ``` HTMLタグではない項目ごとに取得可能なネイティブ広告の取得が成功した場合に呼び出されます。 **Parameters** - *mediationNativeAd* ネイティブ広告のインスタンス --- #### onFailedToReceiveAd(ADGErrorCode code) ```java public void onFailedToReceiveAd(ADGErrorCode code) ``` ※ v2.28.0〜 NonNullアノテーションを追加 広告の取得が失敗した場合に呼び出されます。 **Parameters** - *code* エラーコード --- #### onClickAd() ```java public void onClickAd() ``` 広告タップ時に呼び出されます。 ただし一部SDK連携や広告フォーマットによっては、呼び出せない場合もあるため、 すべてのケースにおける広告タップ時のコールバックを保証するものではありません。 バナー広告、インタースティシャル広告、HTMLテンプレートのネイティブ広告のみ対応します。 `ADGNativeAd`などのパーツ配置実装のネイティブ広告(SDK連携を含む)においては使用できません。 --- #### onAdExpired() ```java public void onAdExpired() ``` ロードされた広告のインプレッションが有効期限内に発生しませんでした。 このメソッドが呼ばれた場合、広告を再リクエストしてください。 --- ### Deprecated :::warning 将来的に停止予定となっております。 ::: ```java public void onReceiveAd(Object[] mediationNativeAds) public void onReadyMediation(Object mediation) public void onOpenUrl() ``` ## ADGNativeAd Object └ ADGNativeAd ### Constructors #### ADGNativeAd(ADGNativeAdModel model) ```java public ADGNativeAd(ADGNativeAdModel model) ``` コンストラクタ :::warning このコンストラクタはSDK内部で使用されるものであり、メディア側での直接利用は想定しておりません。 `ADGNativeAd` のインスタンスは `ADGListener#onReceiveAd(Object)` コールバックで取得してください。 ::: **Parameters** - *model* SDK内部で生成されるネイティブ広告モデル ### Methods #### getTitle() ```java public ADGTitle getTitle() ``` タイトルを取得します。 **Return** タイトル #### getMainImage() ```java public ADGImage getMainImage() ``` メインイメージを取得します。 **Return** メインイメージ #### getIconImage ```java public ADGImage getIconImage() ``` アイコンイメージを取得します。 **Return** アイコンイメージ #### getSponsored ```java public ADGData getSponsored() ``` 広告主の情報を取得します。 **Return** 広告主情報 #### getDesc() ```java public ADGData getDesc() ``` リード文を取得します。 **Return** リード文 --- #### getCtatext() ```java public ADGData getCtatext() ``` CTA(Call To Action)のテキストを取得します。ボタンのキャプションなどに使用します。 **Return** CTA --- #### canLoadMedia() ```java public boolean canLoadMedia() ``` メイン画像または動画が利用できるかどうかを取得します。 **Return** メイン画像または動画が利用できる場合はtrueを返します。 --- #### ~~setClickEvent(View v)~~ ```java public void setClickEvent(View v) ``` :::warning[非推奨] クリックイベントを設定します。 ::: **Parameters** - *v* クリックイベントを設定するView --- #### setClickEvent(Context context, View view, ADGNativeAdOnClickListener listener) ```java public void setClickEvent(Context context, View view, ADGNativeAdOnClickListener listener) ``` クリックイベントを設定します。 **Parameters** - *context* コンテキスト - *view* クリックイベントを設定するView - *listener* ADGNativeAdOnClickListener ## AdFrameSize 広告サイズ - SP (320×50) - TABLET (728×90) - LARGE (320×100) - RECT (300×250) - FREE ### Methods #### getWidth() ```java public int getWidth() ``` 幅を取得します。 **Return** 幅 --- #### getHeight() ```java public int getHeight() ``` 高さを取得します。 **Return** 高さ --- #### setSize(int width, int height) ```java public AdFrameSize setSize(int width, int height) ``` 広告サイズを設定します。FREEの場合のみ有効です。 **Parameters** - *width* 幅 - *height* 高さ **Return** AdFrameSize ## ADGErrorCode | エラーコード | 説明 | | :------------------ | :--------------------------------------------------------------- | | UNKNOWN | 不明なエラーが発生しました。 | | COMMUNICATION_ERROR | アドサーバー間通信/連携しているアドネットワークSDKとの接続等でエラーが発生しました。 | | RECEIVED_FILLER | 白板検知されました。 | | NO_AD | 接続先アドネットワークすべて広告在庫切れが返却されました。 | | NEED_CONNECTION | デバイスがネットワークに接続されていません。 | | EXCEED_LIMIT | エラー回数が上限に達しました。 | | TEMPLATE_FAILED | サイズ指定の誤りなどの要因により広告の形成に失敗しました。 | ## ADGInformationIconView LinearLayout └ ADGInformationIconView ### Factory Methods #### create(Context context, ADGNativeAd nativeAd) ```java public static ADGInformationIconView create(Context context, ADGNativeAd nativeAd) ``` ADGInformationIconViewのインスタンスを生成します。引数が不正な場合は `null` を返します。 **Parameters** - *context* コンテキスト - *nativeAd* ADGNativeAdのオブジェクトを設定します **Return** ADGInformationIconViewのインスタンス、または生成できない場合は `null` --- #### create(Context context, ADGNativeAd nativeAd, boolean expandable, Corner corner, BackgroundType backgroundType) ```java public static ADGInformationIconView create(Context context, ADGNativeAd nativeAd, boolean expandable, Corner corner, BackgroundType backgroundType) ``` ADGInformationIconViewのインスタンスを生成します。引数が不正な場合は `null` を返します。 **Parameters** - *context* コンテキスト - *nativeAd* ADGNativeAdのオブジェクトを設定します - *expandable* 拡張できるアイコンのみ表示した状態にするかどうかを設定します - *corner* 配置したViewのどの位置に表示させるか決定します - *backgroundType* 背景色を設定します **Return** ADGInformationIconViewのインスタンス、または生成できない場合は `null` --- ### Constructors (Deprecated) #### ~~ADGInformationIconView(Context context, ADGNativeAd nativeAd)~~ ```java @Deprecated public ADGInformationIconView(Context context, ADGNativeAd nativeAd) ``` > **非推奨**: `create(Context, ADGNativeAd)` を使用してください。このコンストラクタは将来のバージョンで削除されます。 --- #### ~~ADGInformationIconView(Context context, ADGNativeAd nativeAd, boolean expandable, Corner corner, BackgroundType backgroundType)~~ ```java @Deprecated public ADGInformationIconView(Context context, ADGNativeAd nativeAd, boolean expandable, Corner corner, BackgroundType backgroundType) ``` > **非推奨**: `create(Context, ADGNativeAd, boolean, Corner, BackgroundType)` を使用してください。このコンストラクタは将来のバージョンで削除されます。 ### Methods #### getOptOutUrl() ```java public String getOptOutUrl() ``` オプトアウトURLを取得します。 ### ADGInformationIconView.Corner - TOP_LEFT - TOP_RIGHT - BOTTOM_LEFT - BOTTOM_RIGHT ### ADGInformationIconView.BackgroundType - WHITE - BLACK ## ADGMediaView RelativeLayout └ ADGVideoView ### Constructors #### ADGMediaView(Context context) ```java public ADGMediaView(Context context) ``` コンストラクタ **Parameters** - *context* Context --- #### ADGMediaView(Context context, AttributeSet attr) ```java public ADGMediaView(Context context, AttributeSet attr) ``` コンストラクタ **Parameters** - *context* Context - *attr* The attributes of the XML tag --- #### ADGMediaView(Context context, AttributeSet attr, int defStyleAttr) ```java public ADGMediaView(Context context, AttributeSet attr, int defStyleAttr) ``` コンストラクタ **Parameters** - *context* Context - *attr* The attributes of the XML tag - *defStyleAttr* An attribute in the current theme --- #### ADGMediaView(Context context, AttributeSet attr, int defStyleAttr, int defStyleRes) ```java public ADGMediaView(Context context, AttributeSet attr, int defStyleAttr, int defStyleRes) ``` コンストラクタ **Parameters** - *context* Context - *attr* The attributes of the XML tag - *defStyleAttr* An attribute in the current theme - *defStyleRes* A resource identifier of a style resource ### Methods #### setAdgNativeAd(ADGNativeAd nativeAd) ```java public void setAdgNativeAd(ADGNativeAd nativeAd) ``` ADGNativeAdオブジェクトを設定します。 **Parameters** - *nativeAd* ADGNativeAdオブジェクト --- #### load() ```java public void load() ``` メイン画像または動画のロードを開始します。 ### destroy() ```java public void destroy() ``` メイン画像または動画をViewから破棄します。 とくに、複数の動画を配置する場合や、アプリ側でMediaPlayerを扱い、動画や音声を再生している場合、不要になったものから適宜破棄を行う必要があります。 破棄されないままMediaPlayerの生成を繰り返すとクラッシュを引き起こす場合があります。 ## ADGSettings ### Methods #### isGeolocationEnabled() ```java public static boolean isGeolocationEnabled() ``` 位置情報取得が有効かどうか取得します。 #### setGeolocationEnabled(boolean enable) ```java public static void setGeolocationEnabled(boolean enable) ``` 位置情報取得を有効にするかどうか設定します。 **Parameters** - *enable* 位置情報取得を有効にする場合はtrue --- #### getVideoAudioType() ```java public static VideoAudioType getVideoAudioType() ``` 動画広告の音声の設定を取得をします。 #### setVideoAudioType(VideoAudioType type) ```java public static void setVideoAudioType(VideoAudioType type) ``` 動画広告の音声の設定をします。 **Parameters** - *type* VideoAudioType.MIX: バックグラウンド音声再生中は、バックグラウンド音声に混ざって広告音声が再生されます。 VideoAudioType.SOLO: バックグラウンド音声再生中は、バックグラウンド音声を停止して広告音声が再生されます。 --- #### ~~setIsSSL(boolean ssl)~~ ```java public static void setIsSSL(boolean ssl) ``` :::warning[非推奨] バナー広告表示の際のリクエスト時のベースURLをhttpsに切り替えます。この設定のデフォルト値はtrueです。 ::: **Parameters** - *ssl* httpsを有効にする場合はtrue --- #### setChildDirected(boolean enable) ```java public static void setChildDirected(boolean enable) ``` childDirectedの設定をします。 **parameters** - *enable* childDirectedを有効にする場合はtrue SDK連携時にchildDirectedを明示的に無効にしたい場合はfalseを設定してください。 --- #### setDebugLogging(boolean enabled) ```java public static void setDebugLogging(boolean enabled) ``` trueを指定するとデバッグログを出力します。 :::warning[非推奨] リリース時は必ずfalseに設定してください。 ::: **parameters** - *enabled* デバッグログを出力する場合はtrue、そうでない場合はfalse --- #### isDebugLogging ```java public static boolean isDebugLogging() ``` デバッグログを出力する設定になっているかどうかを返します。 **Return** デバッグログを出力する設定になっている場合はtrue、そうでない場合はfalse #### ~~setHyperIDMode (useHyperID Boolean)~~ ```java public static void setHyperIDMode(useHyperID Boolean) ``` :::warning[非推奨] **v2.28.0** で削除されました。 setHyperIDModeをSDKバージョン2.26.0〜2.27.1で利用継続する場合は、setHyperIDModeをfalseに設定してください。 ::: --- ## iOS APIリファレンス ## ADGManagerViewController UIViewController └ ADGManagerViewController ### Properties #### locationID ```objectivec @property (nonatomic, copy, nullable, readonly) NSString *locationID ``` 広告枠IDを取得します。 #### ~~locationid~~ ```objectivec @property (nonatomic, strong) NSString *locationid ``` :::warning[非推奨] 広告枠IDを取得・設定します。代わりに locationID プロパティ(readonly)を使用してください。 広告枠IDの設定は initWithLocationID:adType:rootViewController: イニシャライザを使用してください。 ::: #### delegate ```objectivec @property (nonatomic, weak, nullable) id delegate ``` デリゲートのインスタンスを取得・設定します。 #### rootViewController ```objectivec @property (nonatomic, weak) UIViewController *rootViewController ``` 画面上の一番基底となるViewControllerを取得・設定します。 :::warning[非推奨] `rootViewController` を設定するためには、`initWithLocationID:adType:rootViewController:` イニシャライザを使用してください。 ::: #### adType ```objectivec @property (nonatomic) ADGAdType adType ``` 広告サイズタイプを指定します。 --- #### adSize ```objectivec @property (nonatomic) CGSize adSize ``` 広告サイズを指定します。 #### adOrigin ```objectivec @property (nonatomic) CGPoint adOrigin ``` 広告の表示位置を設定します。 #### adScale ```objectivec @property (nonatomic) float adScale ``` 広告の拡大縮小比率を設定します。 --- #### usePartsResponse ```objectivec @property (nonatomic) BOOL usePartsResponse ``` 広告フォーマットの優先順位を設定します。 **値** - `YES`: ネイティブ広告( ADGNativeAd )を優先 - `NO`: HTMLタグ広告を優先 **説明** RTB配信時など、複数の広告フォーマットが利用可能な場合の優先順位を指定します。 --- #### informationIconViewDefault ```objectivec @property (nonatomic) BOOL informationIconViewDefault ``` インフォメーションアイコンのデフォルト表示を設定します。 デフォルトの表示位置は`setTapEvent:handler:`で指定したViewの右上に表示されます。 表示位置を変更したい場合は、`NO`を設定し、`ADGInformationIconView`を生成してください。 --- #### testModeEnabled ```objectivec @property (nonatomic, getter = isTestModeEnabled) BOOL testModeEnabled ``` テストモードが有効かどうかを表します。trueを指定した場合、テストモードが有効になります。 :::warning テストモードのままリリースしないようにご注意ください。配信する広告によっては収益が発生しない場合があります。 ::: --- #### responseInfo ```objectivec @property (nonatomic, readonly, nullable) ADGResponseInfo *responseInfo ``` 広告レスポンスのメタ情報を取得します。SDK 2.34.0 で追加されました。広告レスポンス未取得時は `nil` を返します。 **Return** ADGResponseInfo(未取得時はnil) **Usage** ```objectivec ADGResponseInfo *info = adgManagerViewController.responseInfo; if (info) { NSLog(@"responseInfo: %@", info); // 各プロパティの値を含む辞書形式で出力されます } ``` ### Methods #### initWithLocationID:adType:rootViewController: ```objectivec - (instancetype) initWithLocationID:(NSString *)locationID adType:(ADGAdType)adType rootViewController:(UIViewController *)rootViewController ``` イニシャライザ **Parameters** - *locationID* 広告枠ID - *adType* 広告種別 - *rootViewController* 広告を配置するViewController **Return** ADGManagerViewControllerのインスタンス --- #### getNativeMediationView: ```objectivec - (UIView *) getNativeMediationView:(UIView *)view ``` メディア側で構築した他社SDKの連携ネイティブ広告(UIView)を引数として受け取り、 ADGeneration SDK内の内部処理用にラッピング処理をおこなったUIViewを返却します。 **Parameters** - *view* メディア側で構築した他社SDKの連携ネイティブ広告 **Return** ネイティブ広告View --- #### setFrame: ```objectivec - (void) setFrame:(CGRect)rect ``` 広告のサイズを設定します。 **Parameters** - *rect* 広告サイズ --- #### ~~setEnableTestMode:~~ ```objectivec - (void) setEnableTestMode:(BOOL) isTest ``` :::warning[非推奨] 代わりに `testModeEnabled` プロパティを使用してください。 ::: --- #### setIsUnifiedNativeAd ```objectivec - (void) setIsUnifiedNativeAd:(BOOL)isUnifiedNativeAd ``` AdMob(Google Mobile Ads)を呼び出し時に`GADUnifiedNativeAd`を利用するかどうかを設定します。 **Parameters** - *isUnifiedNativeAd* 有効にする場合はYES YESを設定した場合、AdMob(Google Mobile Ads)にて、`GADUnifiedNativeAd`を利用可能となります。 `GADNativeContentAd`または`GADNativeAppInstallAd`を利用する場合は、NOに設定をしてください。 --- #### addAdContainerView: ```objectivec - (void) addAdContainerView:(UIView *)adContainerView ``` 広告Viewを設置するViewを設定します。 **Parameters** - *adContainerView* バナー広告の場合はここで渡したViewの上に広告Viewが配置されます。 ネイティブ広告の場合はHTMLテンプレートを使用したネイティブ広告を表示するためのViewを指定します。 --- #### loadRequest ```objectivec - (void) loadRequest ``` 広告のロードを開始します。 --- #### pauseRefresh ```objectivec - (void) pauseRefresh ``` 広告のローテーションを停止します。 --- #### resumeRefresh ```objectivec - (void) resumeRefresh ``` 広告のローテーション、および計測処理を再開します。 :::warning[v2.30.1以降] このメソッド内部で広告のリロードを行いません 広告を読み込み直す必要がある場合は、[`loadRequest`](#loadrequest) メソッドを使用してください ::: --- #### resumeRefreshTimer ```objectivec - (void) resumeRefreshTimer ``` 広告のローテーションを再開します。 :::warning[v2.28.0以降] **[非推奨]** 代わりに [`resumeRefresh`](#resumerefresh) メソッドを使用してください ::: ---- #### setAutomaticallyRemoveOnReload: ```objectivec - (void) setAutomaticallyRemoveOnReload:(UIView *)view ``` ローテーション時に自動的に削除するViewを指定します。 **Parameters** - *view* ネイティブ広告を配置しているView --- #### insertADGLabelTargetingWithCustomKey:value: ```objectivec - (void) insertADGLabelTargetingWithCustomKey:(NSString *)key value:(NSString *)value ``` Ad Generationのリクエストパラメータにラベルターゲティング用のKey/Valueを追加します。 例えば、 ```objectivec [adg insertADGLabelTargetingWithCustomKey:@"user_attributes" value:@"beauty1"]; [adg insertADGLabelTargetingWithCustomKey:@"user_attributes" value:@"beauty2"]; ``` と実装した際`label_user_attributes=beauty1,beauty2`というKey/Valueを付与します。 **Parameters** - *key* ターゲティングのKey - *value* ターゲティングのValue #### removeADGLabelTargetingWithCustomKey: ```objectivec - (void) removeADGLabelTargetingWithCustomKey:(NSString *)key ``` 現在Ad Generationに指定されているラベルターゲティング用のパラメータから指定されたKeyのパラメータを削除します。 **Parameters** - *key* 削除対象のKey #### getADGLabelTargetingWithCustomKeyValues ```objectivec - (nullable NSDictionary *) getADGLabelTargetingWithCustomKeyValues ``` 現在Ad Generationに指定されているラベルターゲティング用のKey/Valueを返却します。 該当するパラメータが存在しない場合は、nilを返却します。 **Return** 指定されているラベルターゲティング用のKey/Value ## ADGResponseInfo 広告レスポンスのメタデータを保持する不変オブジェクトです。SDK 2.34.0 で追加されました。各フィールドはレスポンスに値が無い場合、空文字が格納されます。 **Properties** | プロパティ名 | 説明 | | :--- | :--- | | `adID` | メディエーション広告ID | | `className` | メディエーションのクラス名 | | `creativeID` | クリエイティブID | | `adNetworkID` | アドネットワークID | | `dspID` | DSP ID | | `seat` | Seat | **取得例** ```objectivec ADGResponseInfo *info = adgManagerViewController.responseInfo; if (info) { NSString *creative = info.creativeID; NSString *dsp = info.dspID; } ``` ## ADGManagerViewControllerDelegate ### Method #### ADGManagerViewControllerReceiveAd: ```objectivec - (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController; ``` 広告の取得が成功した場合に呼び出されます。また、ローテーションによる広告の取得が成功した場合も呼び出されます。 **Parameters** - *adgManagerViewController* ADGManagerViewControllerのインスタンス --- #### ADGManagerViewControllerReceiveAd:mediationNativeAd: ```objectivec - (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController mediationNativeAd:(id)mediationNativeAd; ``` HTMLタグではない項目ごとに取得可能なネイティブ広告の取得が成功した場合に呼び出されます。 **Parameters** - *adgManagerViewController* ADGManagerViewControllerのインスタンス - *mediationNativeAd* ネイティブ広告のインスタンス --- #### ADGManagerViewControllerFailedToReceiveAd:code ```objectivec - (void)ADGManagerViewControllerFailedToReceiveAd:(ADGManagerViewController *)adgManagerViewController code:(kADGErrorCode)code; ``` 広告の取得が失敗した場合に呼び出されます。 **Parameters** - adgManagerViewController ADGManagerViewControllerのインスタンス - code [エラーコード](#kadgerrorcode) --- #### ADGManagerViewControllerDidTapAd: ```objectivec - (void)ADGManagerViewControllerDidTapAd:(ADGManagerViewController *)adgManagerViewController; ``` 広告がタップされたときに呼び出されます。 **対応広告フォーマット** - バナー広告 - インタースティシャル広告 - HTMLテンプレートのネイティブ広告 **注意事項** - 一部のSDK連携や広告フォーマットでは呼び出されない場合があります - `ADGNativeAd` などのパーツ配置実装のネイティブ広告(SDK連携含む)では使用できません - すべての広告タップ時のコールバックを保証するものではありません **Parameters** - *adgManagerViewController* ADGManagerViewControllerのインスタンス --- #### ADGManagerViewControllerDidExpire: ```objectivec - (void)ADGManagerViewControllerDidExpire:(ADGManagerViewController *)adgManagerViewController; ``` ロードされた広告のインプレッションが有効期限内に発生しませんでした。 このメソッドが呼ばれた場合、広告を再リクエストしてください。 **Parameters** - *adgManagerViewController* ADGManagerViewControllerのインスタンス --- ### Deprecated ```objectivec - (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController mediationNativeAds:(NSArray *)mediationNativeAds; - (void)ADGManagerViewControllerFinishImpression:(ADGManagerViewController *)adgManagerViewController; - (void)ADGManagerViewControllerFailInImpression:(ADGManagerViewController *)adgManagerViewController; - (void)ADGManagerViewControllerReadyMediation:(ADGManagerViewController *)adgManagerViewController mediation:(id)mediation; ``` ## ADGNativeAd NSObject └ ADGNativeAd ### Properties #### title ```objectivec @property (nonatomic, readonly, nullable) ADGTitle *title ``` タイトルを取得します。 --- #### mainImage ```objectivec @property (nonatomic, readonly, nullable) ADGImage *mainImage ``` メインイメージを取得します。 #### iconImage ```objectivec @property (nonatomic, readonly, nullable) ADGImage *iconImage ``` アイコンイメージを取得します。 --- #### sponsored ```objectivec @property (nonatomic, readonly, nullable) ADGData *sponsored ``` 広告主の情報を取得します。 --- #### desc ```objectivec @property (nonatomic, readonly, nullable) ADGData *desc ``` リード文を取得します。 --- #### ctatext ```objectivec @property (nonatomic, readonly, nullable) ADGData *ctatext ``` CTA(Call To Action)のテキストを取得します。ボタンのキャプションなどに使用します。 --- #### canLoadMedia ```objectivec @property (nonatomic, readonly, getter = canLoadMedia) BOOL canLoadMedia ``` メイン画像または動画がロードできるかどうかを返します。 --- #### informationIconViewDefault ```objectivec @property (nonatomic) BOOL informationIconViewDefault ``` インフォメーションアイコンのデフォルト表示を設定します。 デフォルトの表示位置は`setTapEvent:handler:`で指定したViewの右上に表示されます。 表示位置を変更したい場合は、`NO`を設定し、`ADGInformationIconView`を生成してください。 ### Methods #### setTapEvent:handler: ```objectivec - (void) setTapEvent:(UIView *)view handler:(nullable void (^)(void))block ``` タップイベントを設定します。 **Parameters** - *view* タップイベントを設定するView - *handler* タップイベントハンドラ #### ADGAdType |広告サイズタイプ|サイズ| |:--|:--| |kADG_AdType_Sp|320×50| |kADG_AdType_Large|320×100| |kADG_AdType_Rect|300×250| |kADG_AdType_Tablet|728×90| |kADG_AdType_Free|任意| #### kADGErrorCode |エラーコード|説明| |:--|:--| |kADGErrorCodeUnknown|不明なエラーが発生しました| |kADGErrorCodeCommunicationError|アドサーバー間通信/連携しているアドネットワークSDKとの接続等でエラーが発生しました| |kADGErrorCodeReceivedFiller|白板検知されました| |kADGErrorCodeNoAd|接続先アドネットワークすべて広告在庫切れが返却されました| |kADGErrorCodeNeedConnection|デバイスがネットワークに接続されていません| |kADGErrorCodeExceedLimit|エラー回数が上限に達しました| |kADGErrorCodeTemplateFailed|サイズ指定の誤りなどの要因により広告の形成に失敗しました| ## ADGInformationIconView UIView └ ADGInformationIconView ### Properties #### optoutURL ```objectivec @property (nonatomic, copy, readonly, nullable) NSString *optoutURL ``` オプトアウトURLを取得します。 --- #### backgroundType ```objectivec @property (nonatomic, getter = getBackgroundType, setter = setBackgroundType:) kADGInformationIconViewBackgroundType backgroundType ``` 背景の種類を取得・設定します。 ### Methods #### initWithNativeAd: ```objectivec - (instancetype) initWithNativeAd:(ADGNativeAd *)nativeAd ``` イニシャライザ **Parameters** - nativeAd ADGNativeAdAのオブジェクトを設定します。 **Return** インスタンス --- #### initWithNativeAd: expandable: ```objectivec - (instancetype) initWithNativeAd:(ADGNativeAd *)nativeAd expandable:(BOOL)expandable ``` イニシャライザ **Parameters** - *nativeAd* ADGNativeAdAのオブジェクトを設定します。 - *expandable* 拡張できるアイコンのみ表示した状態にするかどうかを設定します **Return** インスタンス --- #### updateFrameFromSuperview: ```objectivec - (void) updateFrameFromSuperview:(UIRectCorner)corner ``` 任意のViewにaddViewしたあとで、配置したViewのどの位置に表示させるか決定します。 **Parameters** - *corner* 配置したViewのどの位置に表示するか設定します。 #### kADGInformationIconViewBackgroundType |インフォメーションアイコン背景種類|説明| |:--|:--| |kADGInformationIconViewBackgroundTypeWhite|白背景| |kADGInformationIconViewBackgroundTypeBlack|黒背景| ## ADGMediaView UIView └ ADGMediaView ### Properties #### nativeAd ```objectivec @property (nonatomic, weak, nullable) ADGNativeAd *nativeAd ``` ADGNativeAdオブジェクト #### ~~viewController~~ ```objectivec @property (nonatomic, weak, nullable) UIViewController *viewController ``` UIViewControllerオブジェクト :::warning[v2.29.0以降] [非推奨] このメソッドを呼んでも何もしません。代替はありません。 また、以下は [削除] されました。 - `ADGMediaView.fullscreenVideoPlayerEnabled` プロパティ - `ADGAdWebView.loadHTMLString:baseURL:ratio:duration:` メソッド ::: ### Methods #### load ```objectivec - (void) load ``` メディアファイルの読み込みを開始します。 ## ADGSettings NSObject └ ADGSettings ### Properties #### videoAudioType ```objectivec @property (class, nonatomic) ADGVideoAudioType videoAudioType ``` 動画広告の音声の設定をします。 |定数|説明| |:--|:--| |ADGVideoAudioTypeMix|バックグラウンド音声再生中は、バックグラウンド音声に混ざって広告音声が再生されます| |ADGVideoAudioTypeSolo|バックグラウンド音声再生中は、バックグラウンド音声を停止して広告音声が再生されます| |ADGVideoAudioTypeSoloForce|バックグラウンド音声再生中は、バックグラウンド音声を停止して広告音声が再生されます。サイレントモード中も、音声が流れます| |ADGVideoAudioTypeNone|iOSのAudioSessionを操作せずデフォルトの挙動をおこないます| #### location ```objectivec @property (class, nonatomic, nullable) ADGLocation *location ``` 位置情報。有効な値がセットされている場合、広告のリクエストに位置情報が付与されます。 nilをセットすると、位置情報は付与されません。この設定のデフォルトはnilです。 #### debugLogging ```objectivec @property (class, nonatomic, getter = isDebugLogging) BOOL debugLogging ``` デバッグログを出力する設定になっているかどうかを表します。 trueを指定するとデバッグログを出力します。 :::warning リリース時は必ずfalseに設定してください。 ::: ### Methods #### ~~isGeolocationEnabled~~ ```objectivec + (BOOL) isGeolocationEnabled ``` :::warning[v2.27.0以降] [非推奨] このメソッドを呼んでも何もしません。falseのみ返します。 ::: 位置情報取得が有効かどうか取得します。 #### ~~setGeolocationEnabled:~~ ```objectivec + (void) setGeolocationEnabled:(BOOL)enable ``` :::warning[v2.27.0以降] [非推奨] このメソッドを呼んでも何もしません。代わりに location クラスプロパティを使用してください。 ::: 位置情報取得を有効にするかどうか設定します。 **Parameters** - *enable* 位置情報取得を有効にするかどうか設定します。 #### enableInAppBrowser ```objectivec + (BOOL) enableInAppBrowser ``` 広告がタップされた際にアプリ内ブラウザで表示されるかどうか取得します。 - YES の場合も全ケースでアプリ内ブラウザが使われるわけではありません。 - NO の場合もSDK連携ではアプリ内ブラウザの使用ケースがあります。 #### setEnableInAppBrowser: ```objectivec + (void) setEnableInAppBrowser:(BOOL)enable ``` 広告がタップされた際にアプリ内ブラウザで表示するかどうか設定します。 - YES にしても全ケースでアプリ内ブラウザが使われるわけではありません。 - NO にしてもSDK連携では場合によってアプリ内ブラウザが使用されます。 **Parameters** - *enable* アプリ内ブラウザで表示にするかどうか設定します。 #### setChildDirectedEnabled: ```objectivec + (void) setChildDirectedEnabled:(BOOL)enabled ``` trueを指定すると、Child Directedに `ADGChildDirectedTypeYes` を設定し有効にします。 falseを指定すると、 `ADGChildDirectedTypeNo` を設定し無効にします **Parameters** - *enable* childDirectedを有効にする場合はtrue SDK連携時にchildDirectedを明示的に無効にしたい場合はfalseを設定してください。 #### ~~isHyperIdEnabled~~ ```objectivec + (BOOL) isHyperIdEnabled ``` trueならばHyper ID機能が有効です。 #### ~~setHyperIdEnabled:~~ ```objectivec + (void) setHyperIdEnabled:(BOOL)enable ``` :::warning v2.28.0で削除されました。 setHyperIdEnabledをSDKバージョン2.22.1〜2.27.1で利用継続する場合は、setHyperIdEnabledをfalseに設定してください。 (ObjC)[ADGSettings setHyperIdEnabled:NO]; (Swift)ADGSettings.setHyperIdEnabled(false) ::: trueを指定するとHyper ID機能を有効にします **Parameters** - *enable* ~~Hyper IDを生成して利用する場合はtrueを指定してください。~~ ## ADGLocation NSObject └ ADGLocation ### Properties #### latitude ```objectivec @property (nonatomic, readonly) double latitude ``` 緯度 #### longitude ```objectivec @property (nonatomic, readonly) double longitude ``` 経度 #### Methods #### locationWithLatitude:longitude: ```objectivec + (nullable instancetype) locationWithLatitude:(double)latitude longitude:(double)longitude ``` インスタンスを生成します。無効な位置情報を指定した場合は nil を返します **Parameters** - latitude 緯度。 -90 から 90 の範囲で指定します - longitude 経度。 -180 から 180 の範囲で指定します --- ## FAQ(共通) ## 全般 * Ad Generation全般に関する疑問は[ヘルプセンター](https://ad-generation.jp/support/adg-help/)をご参照ください。 ## iOS * iOS向けのFAQは[こちらに集約](/support/faq/faq_ios)しておりますので、あわせてご参照ください。 ## Android * Android向けのFAQは[こちらに集約](/support/faq/faq_android)しておりますので、あわせてご参照ください。 --- ## FAQ(Android) ## よくある質問 ### SDKの導入について **Q: Gradleでリポジトリが見つからないエラーが出ます** **A:** build.gradleにAd Generation SDKのリポジトリを正しく追加してください。 ```gradle allprojects { repositories { google() mavenCentral() // Ad Generation SDKリポジトリを追加 maven { url "https://adgeneration.github.io/ADG-Android-SDK/repository" } } } ``` **Q: LAP連携時にアプリがクラッシュするのですが?** **エラー:** `java.lang.IllegalArgumentException: Cannot add a null child view to a ViewGroup` **A:** 広告を表示するViewをActivityにaddViewする前に広告リクエストをおこなっていた場合、類似した事象が発生することが確認されております。 **解決方法:** 1. 広告Viewの初期化とレイアウトへの追加を適切な順序で行う 2. 広告リクエストの成功コールバック内でViewの追加を行う ```kotlin // 正しい実装例 class MainActivity : AppCompatActivity() { private lateinit var adView: ADG override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // 1. 広告Viewの初期化 adView = ADG(this) adView.setLocationId("YOUR_LOCATION_ID") adView.setAdFrameSize(ADG.AdFrameSize.BANNER) // 2. リスナー設定 adView.setAdListener(object : ADGListener() { override fun onReceiveAd() { // 3. 広告取得成功時にレイアウトに追加 val container = findViewById(R.id.ad_container) if (adView.parent == null) { container.addView(adView) } } override fun onFailedToReceiveAd(error: ADGConsts.ADGErrorCode) { Log.e("ADG", "Failed to load ad: $error") } }) // 4. 広告リクエスト開始 adView.start() } } ``` **Q: ProGuardを使用するとアプリがクラッシュします** **A:** Ad Generation SDKに必要なProGuard設定を追加してください。 ```proguard # Ad Generation SDK -keep class jp.supership.adgeneration.** { *; } -keep interface jp.supership.adgeneration.** { *; } # Google Play Services(広告ID取得用) -keep class com.google.android.gms.ads.identifier.** { *; } -dontwarn com.google.android.gms.ads.identifier.** ``` ### 広告表示について **Q: 広告が表示されません** **A:** 以下の項目を確認してください: 1. **ネットワーク接続の確認** - インターネット接続が有効か確認 - AndroidManifest.xmlに必要な権限が追加されているか確認 ```xml ``` 2. **広告枠IDの確認** - 正しい広告枠IDが設定されているか確認 - テスト用と本番用のIDが適切に使い分けられているか確認 3. **レイアウトの確認** - 広告Viewがレイアウトに適切に追加されているか確認 - 広告Viewのサイズが適切に設定されているか確認 **Q: テスト広告が表示されません** **A:** テスト環境の設定を確認してください: ```kotlin // デバッグビルドでテストモードを有効化 if (BuildConfig.DEBUG) { ADG.setDebugMode(true) } // テスト用広告枠IDを使用 adView.setLocationId("TEST_LOCATION_ID") ``` **Q: 広告のクリックが反応しません** **A:** ADGListenerのonClickAdメソッドが正しく実装されているか確認してください: ```kotlin adView.setAdListener(object : ADGListener() { override fun onClickAd() { Log.d("ADG", "広告がクリックされました") // クリック処理をここに記述 } }) ``` ### パフォーマンスについて **Q: アプリの起動が遅くなりました** **A:** 広告SDKの初期化を最適化してください: ```kotlin // Application クラスで初期化 class MyApplication : Application() { override fun onCreate() { super.onCreate() // バックグラウンドスレッドで初期化 Thread { // SDKの事前初期化処理 }.start() } } ``` **Q: メモリリークが発生します** **A:** 適切なライフサイクル管理を実装してください: ```kotlin class MainActivity : AppCompatActivity() { private var adView: ADG? = null override fun onDestroy() { super.onDestroy() // 広告リソースの解放 adView?.stop() adView = null } override fun onPause() { super.onPause() adView?.pause() } override fun onResume() { super.onResume() adView?.resume() } } ``` ### エラーハンドリング **Q: エラーコードの意味を教えてください** **A:** 主要なエラーコードと対処法: | エラーコード | 意味 | 対処法 | |------------|------|-------| | `NO_AD` | 配信する広告がない | 正常な状態、リトライ不要 | | `NEED_CONNECTION` | ネットワークエラー | ネットワーク接続を確認 | | `EXCEED_LIMIT` | リクエスト上限超過 | 時間をおいてリトライ | | `AD_SIZE_ERROR` | 広告サイズエラー | サイズ設定を確認 | **Q: リトライ処理はどう実装すべきですか?** **A:** エラーコードに応じて適切なリトライ処理を実装してください: ```kotlin override fun onFailedToReceiveAd(errorCode: ADGConsts.ADGErrorCode) { when (errorCode) { ADGConsts.ADGErrorCode.EXCEED_LIMIT, ADGConsts.ADGErrorCode.NEED_CONNECTION, ADGConsts.ADGErrorCode.NO_AD -> { // リトライしない Log.d("ADG", "リトライ不要なエラー: $errorCode") } else -> { // その他のエラーはリトライ Log.d("ADG", "リトライ実行: $errorCode") Handler(Looper.getMainLooper()).postDelayed({ adView?.start() }, 5000) // 5秒後にリトライ } } } ``` ### 開発・デバッグ **Q: デバッグログを有効にする方法は?** **A:** デバッグビルドでのみログを有効化してください: ```kotlin if (BuildConfig.DEBUG) { ADG.setDebugMode(true) ADG.setLogLevel(ADG.LogLevel.VERBOSE) } ``` **Q: 本番リリース前の確認事項は?** **A:** 以下をリリース前に必ず確認してください: 1. **本番用広告枠IDの設定** 2. **デバッグ機能の無効化** 3. **ProGuard設定の確認** 4. **権限設定の確認** 5. **パフォーマンステスト** ## その他の質問 ご不明な点がございましたら、[お問い合わせ](https://supership.jp/contact/)よりお問い合わせください。 --- ## FAQ(iOS) **Q: Ad Generation SDKが収集するデータについて知りたいのですが?** **A:** - [Ad Generation管理画面のFAQ](https://ad-generation.jp/support/adg-help/Implementation-guide/data-collection#data-collection-adgeneration)に記載しておりますので、こちらをご参照ください。 **Q: Ad Generation SDKをインストールした状態でビルドはできたが、デバイスインストールができないのですが? : Could not inspect the application package** **A:** 〜v2.22.2までのバージョンをご利用の場合、Xcodeの`Embed`の指定による問題の可能性がございます。 1. Xcodeのプロジェクト設定画面を開いてください 2. 該当のアプリのターゲットを選択してください 3. `General` タブを選択し、`Frameworks, Libraries, and Embedded Content` までスクロールしてください 4. リンクしている `ADG.framework` または `ADG.xcframework` の `Embed` を `Do Not Embed` を選択し、再度ビルドをおこなってください なお、v2.23.0以降のバージョンをご利用の場合は、`Do Not Embed` を指定した場合アプリ起動時にクラッシュいたしますので、`Embed` を `Embed & Sign` をご選択ください。 こちらの手順をおこなっても解消されない場合は、お手数ですが[お問い合わせフォーム](https://docs.google.com/forms/d/e/1FAIpQLScYROjUpoEQGERI5T9Ii9pZ-LHlsqZYKJgsPBZcHHCZIO0S8w/viewform)までご連絡をいただけますと幸いです。 **Q: SKAdNetwork IDは何を記述すればいいですか?** **A:** - [Ad Generation管理画面のFAQ](https://ad-generation.jp/support/adg-help/Implementation-guide/skadnetworkid)に記載しておりますので、こちらをご参照ください。 --- ## よくある質問 (FAQ) # Ad Generation SDK - よくある質問 (FAQ) Ad Generation SDKの実装や運用に関するよくある質問と回答をまとめています。 ## 📚 FAQカテゴリ ### 全般・共通 Ad Generation SDKに関する一般的な質問と、プラットフォーム共通の質問をまとめています。 - [共通FAQ](/support/faq/faq_common) ### プラットフォーム別FAQ 各プラットフォーム固有の質問と回答です。 - [iOS SDK FAQ](/support/faq/faq_ios) - [Android SDK FAQ](/support/faq/faq_android) ## 💡 FAQ活用方法 1. **まずは共通FAQを確認**: プラットフォームに関わらず、多くの疑問は共通FAQで解決できます 2. **プラットフォーム固有の問題**: iOS/Android特有の問題は、各プラットフォームのFAQをご覧ください 3. **解決しない場合**: サポートチームにお問い合わせください ## 🔍 よく検索される質問 - 広告が表示されない - テスト用のIDが知りたい - iOS 14以降の対応方法 - targetSDKVersionの設定 - ATS (App Transport Security) 対応 ## 📋 関連ドキュメント - [プラットフォーム実装ガイド](/ad-generation/) - [APIリファレンス](/ad-generation/api-reference/) - [Ad Generationトップ](/ad-generation) --- ## Ad Generation インテグレーションガイド import WhatsNewList from '@site/src/components/WhatsNew/WhatsNewList'; import WhatsNewCount from '@site/src/components/WhatsNew/WhatsNewCount'; import Link from '@docusaurus/Link'; import MediationTable from '@site/src/components/SDKVersions/MediationTable'; export const newsnum = 5; # Ad Generation(アドジェネ)インテグレーションガイド :::warning[サイト統合のお知らせ] Ad Generation SDKとVAMP SDKのドキュメントを 2025年12月 に統合しました。 より充実したコンテンツと改善されたナビゲーションで開発をサポートします。 ::: {(count) => ( <> 📢 最新情報({count}件) )} すべての更新情報を見る → ### iOS対応一覧 ### Android対応一覧 ## バナー広告 一般的なバナー広告をアプリやWebサイトに組み込むことができます。 Web iOS Android ## ネイティブ広告 ネイティブ広告は、広告を他のコンテンツと同様に機能させることで、より統一感のあるユーザー体験を提供できます。 Web iOS Android :::tip Webはバナー広告と同様の実装方法になります ::: ## 各アドネットワーク提供のSDK連携について 提携しているアドネットワークからネイティブアプリ向けSDKを提供している場合、Ad GenerationのSDKに加え、アドネットワークのSDKや各種必要となるライブラリを参照する必要があります。 アドネットワークのSDKと連携するための注意事項や共通して対応いただく必要がございます。各アドネットワークのSDKを導入する前に以下をご確認ください。 [アドネットワークのSDKと連携する際の注意事項および共通手順](/ad-generation/mediation/sdk_mediation_notes) ### Amazon Publisher Servicesとの連携方法 「[Amazon Publisher Services](https://aps.amazon.com/aps/index.html)」は、Amazonによるパブリッシャー向けマネタイズソリューションです。 iOS Android Web ### AdMobとの連携方法 「[AdMob](https://www.google.co.jp/admob/)」は、Googleの運営する広告配信プラットフォームです。 iOS Android #### AdMobメディエーションでAd Generationを配信する場合 AdMobから他社の配信元の広告をアプリに配信できる「AdMobメディエーション(カスタムイベント)」の機能を使用してAd Generationを連携させる場合はこちらを参照ください。 iOS Android ### Prebid.jsとの連携方法 「[Prebid.js](http://Prebid.org/)」は、パブリッシャーがヘッダービディングを実装するためのオープンソースライブラリです。 Web Web + APS併用 ## リファレンス iOS リファレンス Android リファレンス ## その他 * [テスト用の広告枠ID一覧](/ad-generation/test_id) * [iOS SDK導入時のSKAdNetwork対応について](/ad-generation/other/ios14_skadnetwork) * [iOS SDK導入時のApp Transport Security(ATS)対応について](/ad-generation/other/ios_ats) * [AndroidアプリにてtargetSDKVersionが28以上でビルドする場合のSDK導入時の対応について](/ad-generation/other/android_http_block) * [AndroidアプリにてtargetSDKVersionが31以上でビルドする場合のSDK導入時の対応について](/ad-generation/other/android_targetsdkversion_31) * [iOS/Android 位置情報の扱いについて](/ad-generation/other/location) * [Supershipポリシー及びオプトアウトリンク掲載について](https://ad-generation.jp/support/adg-help/more/optout) * * * ## 動画リワード広告 動画リワード広告とは、ユーザーに15秒~30秒ほどの動画広告を完全視聴してもらい、その報酬(インセンティブ)を与える広告フォーマットです。 SDKの導入手順はこちらをご確認ください。 * [VAMP SDKのドキュメント](/vamp) * * * お問い合わせ 広告実装に関することや、その他 Ad Generation(アドジェネ)に関する全般的なお問い合わせはこちらからお願いいたします。 * [お問い合わせ](https://docs.google.com/forms/d/e/1FAIpQLScYROjUpoEQGERI5T9Ii9pZ-LHlsqZYKJgsPBZcHHCZIO0S8w/viewform) --- ## ADGカスタム連携AdMob(Android) import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # ADGカスタム連携AdMob(Android) ## はじめに Ad Generationの「カスタムタグ」設定にて、Ad Generation SDKからAdMobのSDKを呼び出し、AdMobの広告を表示できます。 ## 更新情報 - 2026-07-27 AdMob v25.4.0対応バージョン [ADGAdMob アダプター 25.4.0](https://adgeneration.github.io/ADG-Android-SDK/repository/com/socdm/d/adgeneration/adg-admob-adapter/25.4.0/adg-admob-adapter-25.4.0.aar)をリリースしました。 - 2026-05-18 AdMob v25.2.0対応バージョン [ADGAdMob アダプター 25.2.0](https://adgeneration.github.io/ADG-Android-SDK/repository/com/socdm/d/adgeneration/adg-admob-adapter/25.2.0/adg-admob-adapter-25.2.0.aar)をリリースしました。 - 2025-12-18 AdMob v24.9.0対応バージョン [ADGAdMob アダプター 24.9.0](https://adgeneration.github.io/ADG-Android-SDK/repository/com/socdm/d/adgeneration/adg-admob-adapter/24.9.0/adg-admob-adapter-24.9.0.aar)をリリースしました。 - 2025-06-05 AdMob v24.3.0対応バージョン ADGAdMob アダプター 24.3.0をリリースしました。 ## 前提条件 - Android Studio 2024.3.*以降 - minSdkVersion 23以降 - compileSdkVersion 34以降 - AndroidX移行済み - Ad Generation SDK 2.34.0以降 (2.26.0以前のバージョンから更新する際に、引き続きAdMobを利用するにはGradleでのインストールに切り替える必要があります) ## 実装の流れ 1. Ad Generation SDKをプロジェクトに追加します。 1. AdMob Adapterをプロジェクトに追加します。 1. AndroidManifest.xmlの設定を行います。 1. Ad Generationの広告表示の実装をします。 1. SDK連携にあたっての共通作業を行います。 ## 1. Ad Generation SDKをプロジェクトに追加する 追加方法は[Android SDK Getting Started / バナー広告](/ad-generation/platforms/android/banner_ad_android)をご参照ください。 ## 2. AdMob Adapterをプロジェクトに追加する アプリレベルのbuild.gradleファイルを開き、dependencies配下に以下のステートメントを追加します。 ``` dependencies { implementation 'com.socdm.d.adgeneration:adg:+' // ver.2.26.2以降 // 以下を追加 implementation 'com.socdm.d.adgeneration:adg-admob-adapter:+' } ``` :::warning[注意] 既にADG-GoogleAds-Extra.aarをインポートしている場合、プロジェクトからADG-GoogleAds-Extra.aarを削除してください。 ::: ## 3. AndroidManifest.xmlの設定をする Google Mobile Ads SDKのv17.0.0以降はAndroidManifest.xmlに以下を追加してください。 この手順はv17.0.0以降必須になります。 下記をAndroidManifest.xmlに記述していない場合、アプリ起動時にクラッシュが発生いたしますのでご注意ください。 - APPLICATION_ID ``` ``` - AD_MANAGER_APP ``` ``` 詳細はこちらを確認してください。 - [APPLICATION_ID](https://developers.google.com/admob/android/quick-start#update_your_androidmanifestxml) - [AD_MANAGER_APP](https://developers.google.com/ad-manager/mobile-ads-sdk/android/quick-start#update_your_androidmanifestxml) ## 4. Ad Generationの広告表示の実装をする - [Android SDK Getting Started / バナー広告](/ad-generation/platforms/android/banner_ad_android) - [Android SDK Getting Started / ネイティブ広告](/ad-generation/platforms/android/native_ad_android) ## 5. SDK連携にあたっての共通作業を行う アドネットワークのSDKと連携するための注意事項や共通してご対応いただく作業がございます。各アドネットワークのSDKを導入する前に以下をご確認ください。 - [アドネットワークのSDKと連携する際の注意事項および共通手順](/ad-generation/mediation/sdk_mediation_notes)
AdMob SDK version 19.8.0以前のフォーマット ### ネイティブ広告(アドバンス)について AdMobの公式リファレンスは以下になります。 - [AdMob Android ネイティブ広告](https://developers.google.com/admob/android/native/start?hl=ja) `onReceiveAd(Object nativeAd)`のListenerのメソッドにて、ネイティブ広告オブジェクトが取得できます。 ネイティブ広告オブジェクトのクラスは下記3パターンです。 - コンテンツ広告(NativeContentAd) `com.google.android.gms.ads.formats.NativeContentAd` - アプリインストール広告(NativeAppInstallAd) `com.google.android.gms.ads.formats.NativeAppInstallAd` - 統合広告(UnifiedNativeAd) `com.google.android.gms.ads.formats.UnifiedNativeAd` 参照するために、該当クラスにimportを追加してください。 ネイティブ広告オブジェクト取得後、お客様側でレイアウトを構築していただいた後、Ad Generation SDKに対して、構築したネイティブ広告のViewを登録するために `ADG.getNativeMediationView()` を実行してください。 その後、画面へのaddなど表示処理を適宜おこなってください。 #### 実装例 ```java override fun onReceiveAd(_nativeAd: Any) { var nativeAdView: ViewGroup? = null when(_nativeAd) { // コンテンツ広告のView構築処理 is NativeContentAd -> nativeAdView = createAdView(_nativeAd, this@MyActivity) // アプリインストール広告のView構築処理 is NativeAppInstallAd -> nativeAdView = createAdView(_nativeAd, this@MyActivity) // 統合広告のView構築処理 is UnifiedNativeAd -> nativeAdView = createAdView(_nativeAd, this@MyActivity) } nativeAdView?.let { // Ad Generation SDKにViewをセットして登録する val mediationView = adg!!.getNativeMediationView(it) // ローテーション時に自動的にViewを削除します adg!!.setAutomaticallyRemoveOnReload(mediationView) } } ``` ```java @Override public void onReceiveAd(Object nativeAd) { View nativeAdView = null; if (nativeAd instanceof NativeContentAd) { NativeContentAd nativeContentAd = (NativeContentAd) nativeAd; // コンテンツ広告のView構築処理 nativeAdView = createAdView(nativeContentAd); } if (nativeAd instanceof NativeAppInstallAd) { NativeAppInstallAd nativeAppInstallAd = (NativeAppInstallAd) nativeAd; // アプリインストール広告のView構築処理 nativeAdView = createAdView(nativeAppInstallAd); } if (nativeAd instanceof UnifiedNativeAd) { UnifiedNativeAd unifiedNativeAd = (UnifiedNativeAd) nativeAd; // 統合広告のView構築処理 nativeAdView = createAdView(unifiedNativeAd); } if (nativeAdView != null) { // Ad Generation SDKにViewをセットして登録する nativeAdView = adg.getNativeMediationView(nativeAdView); // ローテーション時に自動的にViewを削除します adg.setAutomaticallyRemoveOnReload(nativeAdView); } } ``` ※統合広告をご利用の場合は、UnifiedNativeAdクラス以外の返却はございませんので、コンテンツ広告のView構築処理、アプリインストール広告のView構築処理は省略いただいてかまいません。 #### 統合広告(UnifiedNativeAd)の実装方法 `UnifiedNativeAd`を受け取るために以下をご確認いただき、実装をしてください。 - Google Mobile Ads SDKがv15.0.0以降であること - 広告リクエスト(start())コール前にsetEnableUnifiedNativeAdフラグにtrueを設定していること ### スマートバナーについて スマートバナーとは、AdMobで提供されているバナー広告の幅を端末幅まで自動で拡大する機能です。 Ad Generation SDKからスマートバナーを有効にするには以下のように`setExpandframe()`で`true`に指定してください。 ```java var adg: ADG = ADG(this) adg.setExpandFrame(true) ``` ```java ADG adg = new ADG(MyActivity.this); adg.setExpandFrame(true); ```
## Google Mobile Ads SDK version 20.0.0以降のネイティブ広告について ネイティブ広告オブジェクトは`NativeAd` クラスです。 参照するために、該当クラスに `com.google.android.gms.ads.nativead` のimportを追加してください。 ネイティブ広告オブジェクト取得後、お客様側でレイアウトを構築していただき、Ad Generation SDKに対してネイティブ広告のViewを登録するために `ADG#getNativeMediationView(View view)` を実行してください。 `ADG#getNativeMediationView(View view)` にて返却されたViewを、広告を表示したい画面に `addView` してください。 ### 実装例 弊社広告枠のカスタム配信設定にて、AdMobのネイティブ広告を設定済みの広告枠IDをセットしてリクエストしていることを前提とし、 AdMobのネイティブ広告が正常に受信した場合、下記デリゲートに通知されます。 ```java override fun onReceiveAd(_nativeAd: Any) { var nativeAdView: ViewGroup? = null when(_nativeAd) { // ネイティブ広告のレイアウト作成処理 is UnifiedNativeAd -> nativeAdView = createAdView(_nativeAd, this@MyActivity) } nativeAdView?.let { // Ad Generation SDKにViewをセットして登録する val mediationView = adg!!.getNativeMediationView(it) // ローテーション時に自動的にViewを削除します adg!!.setAutomaticallyRemoveOnReload(mediationView) } } ``` ```java @Override public void onReceiveAd(Object nativeAd) { View nativeAdView = null; if (nativeAd instanceof com.google.android.gms.ads.NativeAd) { com.google.android.gms.ads.NativeAd googleSdkNativeAd = (com.google.android.gms.ads.NativeAd) nativeAd; // ネイティブ広告のレイアウト作成処理 nativeAdView = createAdView(googleSdkNativeAd); } if (nativeAdView != null) { // Ad Generation SDKにViewをセットして登録する nativeAdView = adg.getNativeMediationView(nativeAdView); // ローテーション時に自動的にViewを削除します adg.setAutomaticallyRemoveOnReload(nativeAdView); } } ``` #### 広告View構築時の注意 広告のレイアウトにつきまして、AdMobのレギュレーションがございます。 公式の[ネイティブ広告のポリシーとガイドライン](https://support.google.com/admob/answer/6329638?ref_topic=7384666?ref_topic=7384666)にて、広告レイアウトやタップ領域についての記述がございますので、ご確認ください。 ## コンテンツ マッピングの設定 コンテンツ マッピングを導入すると、コンテンツに基づくターゲティングを実施できます。 詳細はこちらを確認してください。 [アプリ向けコンテンツ マッピング](https://support.google.com/admob/answer/6270563?hl=ja) Ad Generation SDKからコンテンツマッピングを有効にするには以下のように setContentUrl()にURLを指定してください。 ```java var adg: ADG = ADG(this) adg.setContentUrl("URL") ``` ```java ADG adg = new ADG(MyActivity.this); adg.setContentUrl("URL"); ``` :::note[App Content URL(atp)としての送信について(SDK v2.41.0以降)] ADG Android SDK v2.41.0以降では、`setContentUrl` に設定したURLはAdMobのコンテンツ マッピングに加えて、Ad Generationの広告リクエストの `atp` パラメータとしても送信されます。従来から `setContentUrl` を設定している場合、SDKをv2.41.0へ更新するとAd Generationサーバーへの `atp` 送信が開始されます。上限長などの仕様は[バナー広告ガイドのApp Content URLの設定](/ad-generation/platforms/android/banner_ad_android#app-content-urlの設定)を参照してください。 ::: ## proguardの設定 proguardを設定する場合は設定ファイルに以下を追加してください。 ```java -keep public class com.socdm.d.adgeneration.** { *; } -keep public interface com.socdm.d.adgeneration.** { *; } -keep public class com.google.android.gms.ads.** { public *; } -keep public class com.google.ads.** { public *; } ``` ## テスト用ID テスト広告の表示に使用するAd Genrationの広告枠IDです。 このIDをセットしたままアプリをリリースしないようご注意ください。 サイズ | テストID | 配信広告1 | 配信広告2 ---- | ---- | ---- | ---- バナー | 43469 | AdMob | テスト広告 ネイティブ(Advanced/Content/Unified ※1) | 46155 | AdMob | テスト広告 ネイティブ(Advanced/AppInstall/Unified ※1) | 46156 | AdMob | テスト広告 ネイティブ(Advanced/Contents/AppInstall/Unified ※1) | 46471 | AdMob | テスト広告 ※1:`setEnableUnifiedNativeAd`フラグをtrueにしていれば統合広告が返却されます --- ## ADGカスタム連携AdMob(iOS) import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # ADGカスタム連携AdMob(iOS) ## はじめに Ad Generationの「カスタムタグ」設定にて、Ad Generation SDKからAdMobのSDKを呼び出し、AdMobの広告を表示できます。 ## 更新履歴 - 2026-08-21 [ADGAdMob.xcframework 13.8.0](https://github.com/AdGeneration/ADG-AdMob-iOS-Adapter/releases/tag/13.8.0)をリリース - AdMob 13.8.0対応 - 2026-08-03 [ADGAdMob.xcframework 13.7.0](https://github.com/AdGeneration/ADG-AdMob-iOS-Adapter/releases/tag/13.7.0)をリリース - AdMob 13.7.0対応 - 2026-07-27 [ADGAdMob.xcframework 13.6.0](https://github.com/AdGeneration/ADG-AdMob-iOS-Adapter/releases/tag/13.6.0)をリリース - AdMob 13.6.0対応 - 2026-03-17 [ADGAdMob.xcframework 13.1.0](https://github.com/AdGeneration/ADG-AdMob-iOS-Adapter/releases/tag/13.1.0)をリリース - AdMob 13.1.0対応 - 2025-12-18 [ADGAdMob.xcframework 12.14.0](https://github.com/AdGeneration/ADG-AdMob-iOS-Adapter/releases/tag/12.14.0)をリリース - AdMob 12.14.0対応. 最小サポート Xcode 16.4〜 - 2025-10-16 ADGAdMob.xcframework 12.12.0をリリース - AdMob 12.12.0対応. 最小サポート Xcode 16.3〜 - 2025-10-01 ADGAdMob.xcframework 12.11.0をリリース - AdMob 12.11.0対応. 最小サポート Xcode 16.3〜 :::warning[注意事項] アップデートした際は、表示確認および、連携先の広告レポート数値などを確認し、問題がないことをご確認後にアプリのリリースをお願いいたします ::: ## 前提条件 - Xcode 16.4`+` - iOS 13.0`+` ## 実装の流れ 1. Ad Generation SDKをプロジェクトに追加します。 2. AdMob SDKをプロジェクトに追加します。 3. Info.plistの設定を行います。 4. Ad Generationの広告表示の実装をします。 5. SDK連携にあたっての共通作業を行います。 ## 1. Ad Generation SDKをプロジェクトに追加する ### 1-1. Swift Package Managerを使用する 1. XcodeのメニューからFile > Add Packages....を選択する。 2. ダイアログ右上にある検索窓にリポジトリのURLを入力して検索します。 次のURLを追加します。 https://github.com/AdGeneration/ADG-AdMob-iOS-Adapter.git https://github.com/googleads/swift-package-manager-google-mobile-ads.git 3-1. ADG-AdMob-iOS-Adapterは、Dependency Ruleの `Up to Next Major Version` は、13.8.0 < 14.0.0 の範囲で指定できます 3-2. またはバージョンを指定する場合は Dependency Ruleに `Exact Version 13.8.0` を指定します 3-3. 依存するADG SDKのバージョンは `2.30.2以上 3.0.0 未満` 3-4. 依存するGoogle Mobile Ads SDKのバージョンは `13.8.0` `【重要】`SPMでインストール後、`Other Linker Flags`に `-ObjC` を設定する必要があります。設定されていない場合、AdMob広告はロードされません 4. Add to Projectから追加するプロジェクトを選択して、右下のAdd Packageをクリック ### 1-2. CocoaPodsを使用する 1. 次の行をプロジェクトのPodfileに追加します。 ```ruby pod 'Google-Mobile-Ads-SDK', '13.8.0' pod 'AdGeneration' pod 'AdGeneration-Adapter-AdMob' ``` 2. `pod install` を実行します。
手動でインストールする場合 ### 手動でインストールする - Ad Generation SDK (ADG.xcframework) 追加方法は、[iOS SDK Getting Started/バナー広告](/ad-generation/platforms/ios/banner_ad_ios) をご参照ください。 - Ad Generation AdMob Adapter (ADGAdMob.xcframework) [AdMob Adapter ダウンロード](https://github.com/AdGeneration/ADG-iOS-Adapters/raw/master/AdMob/ADGAdMob.xcframework.zip)よりダウンロードし、プロジェクトに追加してください。 - AdMob SDK (GoogleMobileAds.xcframework) Google Mobile Ads SDKのv7.42.0以降は下記もあわせて追加が必要となります。 - GoogleAppMeasurement.xcframework - GoogleUtilities.xcframework - nanopb.xcframework 追加方法は、[AdMobドキュメント](https://developers.google.com/admob/ios/quick-start?hl=ja)をご参照ください。 手動で追加する場合は、以下のframeworkの参照追加が必要になります。 - AudioToolbox - AVFoundation - MessageUI - StoreKit - SafariServices - GLKit - OpenGLES - CoreMotion - CoreVideo
## 2. Info.plistの設定を行う Google Mobile Ads SDKのv7.42.0以降はInfo.plistに以下を追加してください。 この手順はv7.42.0以降必須になります。 下記をInfo.plistに記述していない場合、アプリ起動時にクラッシュが発生いたしますのでご注意ください。 - GADApplicationIdentifier ```xml GADApplicationIdentifier ca-app-pub-3940256099942544~1458002511 ``` ※上記の例に表示されているAdMobアプリIDではなく、実際のAdMobアプリIDを使用してください。 - GADIsAdManagerApp ```xml GADIsAdManagerApp ``` 詳細はこちらを確認してください。 - [GADApplicationIdentifier](https://developers.google.com/admob/ios/quick-start#update_your_infoplist) - [GADIsAdManagerApp](https://developers.google.com/ad-manager/mobile-ads-sdk/ios/quick-start#update_your_infoplist) ## 3. Ad Generationの広告表示の実装をする - [iOS SDK Getting Started / バナー広告](/ad-generation/platforms/ios/banner_ad_ios) - [iOS SDK Getting Started / ネイティブ広告](/ad-generation/platforms/ios/native_ad_ios) ## 4. SDK連携にあたっての共通作業を行う アドネットワークのSDKと連携するための注意事項や共通して対応いただく必要がございます。各アドネットワークのSDKを導入する前に以下をご確認ください。 [アドネットワークのSDKと連携する際の注意事項および共通手順](/ad-generation/mediation/sdk_mediation_notes)
AdMob SDK version 7.69.0以前のフォーマット ### ネイティブ広告(アドバンス)について AdMobの公式リファレンスは以下になります。 [AdMob iOS ネイティブ アドバンス広告](https://developers.google.com/admob/ios/native/start?hl=ja) `ADGManagerViewControllerReceiveAd:mediationNativeAd:` の delegate メソッドには `GADNativeAd` が返却されます(`GADNativeContentAd`/`GADNativeAppInstallAd` は v7.46.0 以降廃止されています)。 参照するために `GoogleMobileAds` の import を追加してください。 ネイティブ広告オブジェクトを取得後に任意のレイアウトを組み立て、`[ADGManagerViewController getNativeMediationView:]` を呼び出して Ad Generation SDK の拡張ビューを受け取ります。 戻り値のビューを画面に追加し、必要に応じて `setAutomaticallyRemoveOnReload:` などを使ってローテーション時に自動破棄されるようにしてください。 #### 実装例 ```swift func adgManagerViewControllerReceiveAd( _ adgManagerViewController: ADGManagerViewController, mediationNativeAd: Any ) { guard let nativeAd = mediationNativeAd as? GADNativeAd else { // 想定外のオブジェクトの場合は何もせず終了 return } // 受信したネイティブ広告を任意の nib / view でレイアウトする let nativeAdView = createGADNativeAdView(nativeAd) // Ad Generation SDKにViewを登録し、機能追加済みのViewを受け取る if let mediationView = adgManagerViewController.getNativeMediationView(nativeAdView) { adgManagerViewController.setAutomaticallyRemoveOnReload(mediationView) adContainerView.addSubview(mediationView) // adContainerViewは広告を配置する任意のUIView } } ``` ```objc - (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController mediationNativeAd:(id)mediationNativeAd { if (![mediationNativeAd isKindOfClass:[GADNativeAd class]]) { // 想定外のオブジェクトの場合は何もせず終了 return; } GADNativeAd *nativeAd = (GADNativeAd *)mediationNativeAd; // 受信したネイティブ広告を任意のUIViewにレイアウト UIView *nativeAdView = [self createGADNativeAdView:nativeAd]; // Ad Generation SDKの拡張ビューを取得してから画面に設置 UIView *mediationView = [adgManagerViewController getNativeMediationView:nativeAdView]; if (mediationView) { [adgManagerViewController setAutomaticallyRemoveOnReload:mediationView]; [self.adContainerView addSubview:mediationView]; // adContainerViewは広告を配置する任意のUIView } } ``` ※AdMobのネイティブ広告をご利用の場合は、返却されるのは `GADNativeAd` のみです。旧 `GADNativeContentAd` / `GADNativeAppInstallAd` を想定したコードは不要です。 #### ネイティブ広告(GADNativeAd)の実装方法 `GADNativeAd` を受け取るために以下をご確認いただき、実装をしてください。 - Google Mobile Ads SDK(GoogleMobileAds.xcframework)がv7.28.0以降であること - Ad Generation AdMob Adapter (ADGAdMob.xcframework)がv1.0.2以降であること - 広告リクエスト(`loadRequest()`)コール前に[`setIsUnifiedNativeAd`フラグ](/ad-generation/api-reference/reference_ios#setisunifiednativead)にYESを設定していること ### スマートバナーについて スマートバナーとは、AdMobで提供されているバナー広告の幅を端末幅まで自動で拡大する機能です。 Ad Generation SDKからスマートバナーを有効にするには以下のように`expandframe`を`YES`に指定してください。 また、 広告を表示する`adView`にしているViewは、水平方向が中央に配置されるよう実装してください。 ```swift adg.expandframe = YES ``` ```objc self.adg.expandframe = YES ```
### Google Mobile Ads SDK version 8.0.0以降のネイティブ広告について ネイティブ広告オブジェクトは`GADNativeAd` クラスです。 参照するために、該当クラスに `GoogleMobileAds` のimportを追加してください。 ネイティブ広告オブジェクト取得後、お客様側でレイアウトを構築していただき、 Ad Generation SDKに対してネイティブ広告のViewを登録するために `[ADGManagerViewController getNativeMediationView:]` を実行してください。 `[ADGManagerViewController getNativeMediationView:]` にて返却されたViewを、画面へaddいただき、広告の表示をおこなってください。 #### 実装例 弊社広告枠のカスタム配信設定にて、AdMobのネイティブ広告を設定済みの広告枠IDをセットしてリクエストしていることを前提とし、 AdMobのネイティブ広告が正常に受信した場合、下記デリゲートに通知されます。 ```objc - (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController mediationNativeAd:(id)mediationNativeAd { UIView *nativeAdView = nil; if ([mediationNativeAd isKindOfClass:[GADNativeAd class]]) { GADNativeAd *nativeAd = (GADNativeAd *)mediationNativeAd; //ネイティブ広告のレイアウト作成処理 nativeAdView = [self createGADNativeAd:nativeAd]; } if (nativeAdView) { //Ad Generation SDKにViewをセットして登録する [adg getNativeMediationView:nativeAdView]; } } ``` #### 広告View構築時のご注意 広告のレイアウト構築時につきまして、AdMobのレギュレーションがございます。 公式の[ネイティブ広告のポリシーとガイドライン](https://support.google.com/admob/answer/6329638)にて、 広告レイアウトやタップ領域についての記述がございますので、ご確認ください。 ### コンテンツ マッピングの設定 コンテンツ マッピングを導入すると、コンテンツに基づくターゲティングを実施できます。 詳細はこちらを確認してください。 [アプリ向けコンテンツ マッピング](https://support.google.com/admob/answer/6270563) Ad Generation SDKからコンテンツマッピングを有効にするには以下のように `setContentUrl`からURLを指定してください。 ```swift adg.contentUrl = "URL" ``` ```objc [self.adg setContentUrl:@"URL"]; ``` :::note[App Content URL(atp)としての送信について(SDK v2.41.0以降)] ADG iOS SDK v2.41.0以降では、`contentUrl` に設定したURLはAdMobのコンテンツ マッピングに加えて、Ad Generationの広告リクエストの `atp` パラメータとしても送信されます。従来から `contentUrl` を設定している場合、SDKをv2.41.0へ更新するとAd Generationサーバーへの `atp` 送信が開始されます。上限長などの仕様は[バナー広告ガイドのApp Content URLの設定](/ad-generation/platforms/ios/banner_ad_ios#app-content-urlの設定)を参照してください。 ::: ### テスト用ID テスト広告の表示に使用するAd Generationの広告枠IDです。 このIDをセットしたままアプリをリリースしないようご注意ください。 サイズ | テストID | 配信広告1 | 配信広告2 ---|---|---|--- バナー | 43468 | AdMob | テスト広告 ネイティブ(Advanced/Content/Unified ※1) | 46153 | AdMob | テスト広告 ネイティブ(Advanced/AppInstall/Unified ※1) | 46154 | AdMob | テスト広告 ネイティブ(Advanced/Contents/AppInstall/Unified ※1) | 46470 | AdMob | テスト広告 --- ## AdMobメディエーション連携(Android) ## はじめに 「AdMobメディエーション」の機能を使用してAd Generationの広告を表示できます。 AdMobの実装手順に従い、バナー広告を導入済みである必要があります。 開発環境としてAndroid Studioを利用し、インストール後の各種設定は準備されていることを前提にした手順となります。 ## 更新情報 - 2026-07-27 [AdMob v25.4.0対応の ADGAdMobMediation アダプター 2.40.0](https://adgeneration.github.io/ADG-Android-SDK/repository/com/socdm/d/adgeneration/adg-admob-mediation/2.40.0/adg-admob-mediation-2.40.0.aar)をリリースしました。 - ADG SDK 2.40.0に対応しました - 2026-05-18 [AdMob v25.2.0対応の ADGAdMobMediation アダプター 2.36.0](https://adgeneration.github.io/ADG-Android-SDK/repository/com/socdm/d/adgeneration/adg-admob-mediation/2.36.0/adg-admob-mediation-2.36.0.aar)をリリースしました。 - ADG SDK 2.36.0に対応しました - 2025-12-18 [AdMob v24.9.0対応の ADGAdMobMediation アダプター 2.34.0](https://adgeneration.github.io/ADG-Android-SDK/repository/com/socdm/d/adgeneration/adg-admob-mediation/2.34.0/adg-admob-mediation-2.34.0.aar)をリリースしました。 - ADG SDK 2.34.0に対応しました - 2025-09-30 [AdMob v24.6.0対応の ADGAdMobMediation アダプター 2.33.0](https://adgeneration.github.io/ADG-Android-SDK/repository/com/socdm/d/adgeneration/adg-admob-mediation/2.33.0/adg-admob-mediation-2.33.0.aar)をリリースしました。 - ADG SDK 2.33.0に対応しました - その他、内部処理を改善しました ### 対応バージョン - Android 6.0以降(API Level 23) ### 導入の流れ 1. Ad Generation SDKをプロジェクトに追加します 2. AdMobメディエーション用SDKをプロジェクトに追加します 3. AndroidManifest.xmlを修正します 4. AdMobの配信設定を行います 5. proguardを設定します ## 1. Ad Generation SDKをプロジェクトに追加する 追加方法は[Getting Started/バナー広告](/ad-generation/platforms/android/banner_ad_android)をご参照ください。 ## 2. AdMobメディエーション用SDKをプロジェクトに追加する ### Gradleを使用する場合 アプリレベルのbuild.gradleファイルを開き、dependencies配下に以下のステートメントを追加します。 ```gradle dependencies {   //以下を追加   implementation 'com.socdm.d.adgeneration:adg-admob-mediation:`+`' } ``` ### 手動でインストールする場合 AdMobメディエーション用SDK (adg-admob-mediation-x.x.x.aar) を下記リンクからダウンロードしてください。 [https://github.com/AdGeneration/ADG-AdMobMediation-Android-SDK/releases](https://github.com/AdGeneration/ADG-AdMobMediation-Android-SDK/releases) :::danger[ご注意] **adg-admobmediation-2.2.0.aar以降について** 本アダプタのv2.2.0以降は、AdMob v21系に対応したアダプタとなり、Ad Generation SDK v2.23.0以降との互換性があります。 本アダプタ v2.2.0以降をご利用の場合は、AdMob v21系 と Ad Generation SDK v2.23.0以降の組み合わせで実装してください。 ::: ## 3. AndroidManifest.xmlを修正する [Getting Started/バナー広告](/ad-generation/platforms/android/banner_ad_android)をご参照いただき、`AndroidManifest.xml` を修正してください。 ## 4. AdMobの配信設定を行う 1. 「メディエーション」を選択し、メディエーショングループを作成します 2. 広告のソースから「カスタム イベントを追加」を選択します ![](/img/sdk_admobmediation_01.9fe415ab.png) 3. カスタムイベントのラベルとeCPMを入力します (初期値としてAd GenerationのレポートからeCPMを確認し、1.2〜2倍程度を推奨します) ![img](/img/sdk_admobmediation_02.e8ebc0c0.png) 1. Class NameとParameterに以下の値を入力します ![img](/img/sdk_admobmediation_03.bb036ed5.png) ### バナー広告パラメータ Name | Value ---|--- Class Name | `com.socdm.d.adgeneration.ADGAdMobMediation` Parameter | AdGenerationの広告枠ID ## 5. proguardを設定する [Getting Started/バナー広告](/ad-generation/platforms/android/banner_ad_android)をご参照いただき、Ad Generationの設定を追加してください。 ## API Reference ### com.socdm.d.adgeneration.admobcustomevent.ADGCustomAdapter #### Methods **setDebugLogging(boolean enabled)** ``` public static void setDebugLogging(boolean enabled) ``` trueを指定するとデバッグログを出力します。 :::warning リリース時は必ずfalseに設定してください。 ::: - Parameters - _enabled_ デバッグログを出力する場合はtrue、そうでない場合はfalse **isDebugLogging()** ``` public static boolean isDebugLogging() ``` デバッグログを出力する設定になっているかどうかを返します。 - Return デバッグログを出力する設定になっている場合はtrue、そうでない場合はfalse **getVersion()** ``` public static String getVersion() ``` AdMobメディエーション用SDKのバージョン番号を取得します。 - Return AdMobメディエーション用SDKのバージョン番号 --- ## AdMobメディエーション連携(iOS) ## はじめに 「AdMobメディエーション」の機能を使用してAd Generationの広告を表示できます。 AdMobの実装手順に従い、バナー広告を導入済みである必要があります。 開発環境にXcodeを使用することを前提とします。 ### 更新履歴 #### 2026-08-03 [ADGAdMobMediation.xcframework v2.41.0](https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK/releases/tag/2.41.0) をリリース - ADG SDK 2.41.0 , AdMob 13.7.0 対応 #### 2026-07-27 [ADGAdMobMediation.xcframework v2.40.0](https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK/releases/tag/2.40.0) をリリース - ADG SDK 2.40.0 , AdMob 13.6.0 対応 #### 2026-03-17 [ADGAdMobMediation.xcframework v2.35.1](https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK/releases/tag/2.35.1) をリリース - ADG SDK 2.35.1 , AdMob 13.1.0 対応 - 最小サポート Xcode 16.4 〜 #### 2026-03-02 [ADGAdMobMediation.xcframework v2.35.0](https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK/releases/tag/2.35.0) をリリース - ADG SDK 2.35.0 , AdMob 12.14.0 対応 - 最小サポート Xcode 16.4 〜 #### 2026-01-29 [ADGAdMobMediation.xcframework v2.34.1](https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK/releases/tag/2.34.1) をリリース - ADG SDK 2.34.1 , AdMob 12.14.0 対応 - 最小サポート Xcode 16.4 〜 #### 2025-12-18 [ADGAdMobMediation.xcframework v2.34.0](https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK/releases/tag/2.34.0) をリリース - ADG SDK 2.34.0 , AdMob 12.14.0 対応 - 最小サポート Xcode 16.4 〜 #### 2025-10-16 [ADGAdMobMediation.xcframework v2.33.1](https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK/releases/tag/2.33.1) をリリース - ADG SDK 2.33.0 , AdMob 12.12.0 対応 - 最小サポート Xcode 16.3 〜 - 2025-10-01 [ADGAdMobMediation.xcframework v2.33.0](https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK/releases/tag/2.33.0)をリリース - ADG SDK 2.33.0 に対応しました - 出力されるバージョンの不整合を修正しました #### 2025-08-28 ADGAdMobMediation.xcframework v2.32.1をリリース  ※ 軽微な修正  ※ ADG iOS SDK v2.32.0 対応  ※ 最小サポート Xcode 16.3〜 ### 対応バージョン - Xcode 16.4+ - iOS 13.0+ ### 導入の流れ 1. Ad Generation SDKをプロジェクトに追加します 2. AdMobの配信設定を行います ## 1. Ad Generation SDKをプロジェクトに追加する ### CocoaPodsを使用する 1. 次の行をプロジェクトのPodfileに追加します ``` pod 'Google-Mobile-Ads-SDK', '13.7.0' pod 'AdGeneration' pod 'AdGeneration-Adapter-AdMobMediation' ``` 2. `pod install` を実行します ### Swift Package Managerを使用する 1. XcodeのメニューからFile > Add Packages....を選択する。 2. ダイアログ右上にある検索窓にリポジトリのURLを入力して検索します。 次のURLを追加します。 - https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK.git - https://github.com/googleads/swift-package-manager-google-mobile-ads.git 3. Dependency Ruleを設定します - 3-1. adg-admobmediation-ios-sdkは、Dependency Ruleに `Up to Next Major Version` を選択 - 3-2. またはバージョンを指定する場合は Dependency Ruleに `Exact Version 2.41.0` を指定する 4. Add to Projectから追加するプロジェクトを選択して、右下のAdd Packageをクリック ### 手動でインストールする 1. 最新版のADG iOS SDKをダウンロードします。ダウンロード方法は[iOS SDK Getting Started/バナー広告: 手動でインストールする](/ad-generation/platforms/ios/banner_ad_ios)をご確認ください 2. AdMobメディエーション用SDKをダウンロードします。下記リンクより最新版の `ADGAdMobMediation.xcframework.zip` をダウンロードしてください [AdMobMediation iOS SDK ダウンロード](https://github.com/AdGeneration/ADG-AdMobMediation-iOS-SDK/releases) 3. SDKをプロジェクトに追加します ダウンロードした `ADGAdMobMediation.xcframework.zip` ファイルを解凍し、 `ADGAdMobMediation.xcframework` をプロジェクトに追加してください。 追加方法は[iOS SDK Getting Started/バナー広告: 手動でインストールする](/ad-generation/platforms/ios/banner_ad_ios)をご確認ください。 `該当アプリのターゲット > General > Frameworks, Libraries, and Embedded Content > ADGAdMobMediation.xcframework` を"Embed & Sign"に設定してください。 4. Ad Generation SDKが参照しているframeworkを追加します 追加方法は[iOS SDK Getting Started/バナー広告: 手動でインストールする](/ad-generation/platforms/ios/banner_ad_ios)をご確認ください。 5. Other Linker Flagsを設定します `該当アプリのターゲット > Build Settings > Linking - General > Other Linker Flags` に"-ObjC"を追加してください。 ![](/img/sdk_ios_img001.9cf9d295.png) :::warning[警告] AdMob > Ad Generationのメディエーションをすでにご利用のメディアさまで、v2.1.5以前のアダプターをインストール済みの方は、不要となる下記のファイルを必ず削除してください。 - ADGAdMobMediation.h - ADGAdMobInterstitialMediation.h - libADGAdMobMediationX.X.X.a ::: :::warning[補足] ADGAdMobMediation.xcframework(v2.2.0)以降について ADGAdMobMediation v2.2.0以降は、Google-Mobile-Ads-SDK v9以降に対応しています。 ::: ## 2. AdMobの配信設定を行う 1. 「メディエーション」を選択し、メディエーショングループを作成します 2. 広告のソースから「カスタム イベントを追加」を選択します ![](/img/sdk_admobmediation_01.9fe415ab.png) 3. カスタムイベントのラベルとeCPMを入力します (初期値としてAd GenerationのレポートからeCPMを確認し、1.2〜2倍程度を推奨します) ![img](/img/sdk_admobmediation_02.e8ebc0c0.png) 4. Class NameとParameterに以下の値を入力します ![img](/img/sdk_admobmediation_03.bb036ed5.png) ### バナー広告パラメータ Name | Value ---|--- Class Name | `ADGAdMobMediation` Parameter | AdGenerationの広告枠ID (例: `48547` ) ## API Reference ### ADGAdMobCustomEventAdapter #### isDebugLogging ```swift static var isDebugLogging: Bool { get, set } ``` デバッグログを出力する設定になっているかどうかを表します。trueを指定するとデバッグログを出力します。 :::warning[WARNING] リリース時は必ずfalseに設定してください。 ::: #### versionString ```swift static var versionString: String { get } ``` AdMobメディエーション用SDKのバージョン番号を取得します。 --- ## Amazon Publisher Services - Ad Generation Integration [Android] import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # Amazon Publisher Services - Ad Generation Integration [Android] Amazon Publisher ServicesとAd Generation SDKをAndroidで連携するためのマニュアルとなります。 ## サービスご利用にあたって 本連携については、Amazon Publisher Servicesの登録がお済みのうえ、行って頂くようお願いいたします。 Amazon Publisher Servicesのドキュメント等、公式サイトよりご確認お願いいたいます。 ## 対応バージョン - Android 5.0 (API Level 21) - Amazon Publisher Services SDK v11.0.1(2025-07-30) :::warning[注意] - 広告のリフレッシュ(ローテーション)を行う場合はAmazon Publisher Servicesの機能を用いて実装してください。 - Ad Generationのローテーション及び、連携SDKのアドネットワークのローテーション設定はOFFにしてください。 - Amazon Publisher Services(DTB SDK)とAmazon Mobile Ad Network SDKの併用はサポート対象外となります。 ::: ## Ad Generation管理画面での広告枠設定 1. 対象枠でカスタムタグを作成する。 1. カスタムタグ認証情報として「Amazon Header Bidding」を選択する。 1. アドネットワーク名を入力する。こちらは表示にのみ使用されます。 1. Key/CPMをデフォルト値から変更したい場合は変更します。 ### Amazon Publisher Services SDKの導入 #### Gradleを使用する (推奨) Build.Gradleファイルを開き、 `repositories`と `dependencies`に以下を追記してください。 ``` repositories { ... mavenCentral() } ``` ``` dependencies { ... implementation ("com.amazon.android:aps-sdk:11.0.1") implementation (“com.iabtcf:iabtcf-decoder:2.0.10”) } ``` #### 手動でインストールする 1. [File] > [New] > [New Module] の順にクリックし、ポップアップダイアログボックスで[Import .JAR/.AAR Package] をクリックします。 1. 新しいダイアログボックスが開くので、 `aps-sdk.aar`または `DTBAndroidSDK­x.x.aar`をインポートします。 1. [File] > [Project Structure] > [app] > [Dependencies] と進み、対象のaar ファイルを依存関係として追加します。 #### アクセス権限とActivityのマニフェストへの追加 次のアクセス権限をマニフェストに追加します。 INTERNET / ACCESS_WIFI_STATE / ACCESS_NETWORK_STATE は必須です。 ``` ``` 位置情報ターゲティングをする場合は下記を追加してください ``` ``` ### Ad Generation SDKの導入 [Ad Generation AndroidSDKバナー導入マニュアル](/ad-generation/platforms/android/banner_ad_android)の[1. プロジェクトにSDKを追加する]から[3. Google Play Servicesを設定する]をご参照ください。 ### ProGuard ProGuardの設定ファイルに以下を追加してください。 ``` -keep class com.amazon.device.ads.** { *; } ``` ### Amazon Publisher Services SDK(DTB SDK)の初期設定 ```java val apsAppID = "YOUR_APP_KEY" val apsSlotID = "YOUR_SLOT_ID" // アプリケーションキーを設定する AdRegistration.getInstance(apsAppID, applicationContext) AdRegistration.setAdNetworkInfo(DTBAdNetworkInfo(DTBAdNetwork.AD_GENERATION)) // Ad Generationのアドサーバーを利用するために下記を追加してください // MRAIDのバージョンを 1.0, 2.0 のみセットする AdRegistration.setMRAIDSupportedVersions( arrayOf( "1.0", "2.0" ) ) // MRAIDのポリシーをCUSTOMとしてセットする AdRegistration.setMRAIDPolicy(MRAIDPolicy.CUSTOM) // 位置情報の取得を許容する場合はコメントアウトを解除してください // AdRegistration.useGeoLocation(true) // デバッグ時はログレベル変更とテストモードを有効化してください※有効にしたままアプリをリリースしないようご注意ください // AdRegistration.enableLogging(true) // ログ書き出し // AdRegistration.enableTesting(true) // テストモード ``` ```java public static final String APP_KEY = "YOUR_APP_KEY"; public static final String SLOT_ID = "YOUR_SLOT_ID"; // アプリケーションキーを設定する AdRegistration.getInstance(APP_KEY, getApplicationContext()); AdRegistration.setAdNetworkInfo(new DTBAdNetworkInfo(DTBAdNetwork.AD_GENERATION)); // Ad Generationのアドサーバーを利用するために下記を追加してください // MRAIDのバージョンを 1.0, 2.0 のみセット AdRegistration.setMRAIDSupportedVersions(new String[] {"1.0", "2.0"}); // MRAIDのポリシーをCUSTOMとしてセットする AdRegistration.setMRAIDPolicy(MRAIDPolicy.CUSTOM); // 位置情報の取得を許容する場合はコメントアウトを解除してください // AdRegistration.useGeoLocation(true); // デバッグ時はログレベル変更とテストモードを有効化してください※有効にしたままアプリをリリースしないようご注意ください // AdRegistration.enableLogging(true); // ログ書き出し // AdRegistration.enableTesting(true); // テストモード ``` ### バナー広告 #### DTBAdRequestの生成と広告リクエスト DTB SDKが生成するbid情報(DTBAdResponse)の有効期間は10分となります。 ```java val adLoader: DTBAdRequest = DTBAdRequest() adLoader.setSizes(DTBAdSize(320, 50, SLOT_ID)) // 320x50広告の場合 adLoader.loadAd(object : DTBAdCallback { override fun onSuccess(dtbAdResponse: DTBAdResponse) { android.util.Log.d("ADGSDK" , "APS ad load has succeeded") // Amazon広告リクエスト成功時は // DTBAdResponseのパラメーターを付与した上でAd Generationの広告のリクエストを行う。 loadADG(dtbAdResponse) } override fun onFailure(adError: AdError) { android.util.Log.e("ADGSDK", "APS ad load has failed: " + adError.message) // Amazon広告リクエスト失敗時は // DTBAdResponseのパラメーターを付与せずAd Generationの広告のリクエストを行う。 loadADG(null) } }) ``` ```java final DTBAdRequest loader = new DTBAdRequest(); loader.setSizes(new DTBAdSize(320, 50, SLOT_ID)); // 320x50広告の場合 loader.loadAd(new DTBAdCallback() { @Override public void onSuccess(DTBAdResponse dtbAdResponse) { android.util.Log.d("ADGSDK" , "APS ad load has succeeded"); // Amazon広告リクエスト成功時は // DTBAdResponseのパラメーターを付与した上でAd Generationの広告のリクエストを行う。 loadADG(dtbAdResponse); } @Override public void onFailure(AdError adError) { android.util.Log.e("ADGSDK", "APS ad load has failed: " + adError.message); // Amazon広告リクエスト失敗時は // DTBAdResponseのパラメーターを付与せずAd Generationの広告のリクエストを行う。 loadADG(null); } }); ``` #### Ad Generationの呼び出し DTBAdResponseパラメーターの付与以外は通常のAd Genrationの広告リクエストと同様です。 ```java fun loadADG(dtbAdResponse: DTBAdResponse?) { adg = ADG(this) // adgはADGクラスのインスタンスとして定義済みとする。 adg?.locationId = "YOUR_ADGENERATION_AD_ID" // 広告枠ID指定 adg?.setAdFrameSize(ADG.AdFrameSize.FREE.setSize(320, 50)) // サイズ指定 adg?.adListener = AdListener() // Listener定義 if (dtbAdResponse != null) { adg?.addHeaderBiddingParamsWithAmznAdResponse(dtbAdResponse) } // 表示 ad_container?.addView(adg!!) // 広告表示領域としてad_containerを定義済みとする。 adg?.start() } ``` ```java public void loadADG(DTBAdResponse dtbAdResponse) { ad_container = (LinearLayout) findViewById(R.id.ad_container); // 広告表示領域としてad_containerを定義済みとする。 adg = new ADG(this); // adgはADGクラスのインスタンスとして定義済みとする。 adg.setLocationId("YOUR_ADGENERATION_AD_ID"); // 広告枠ID指定 adg.setAdFrameSize(ADG.AdFrameSize.FREE.setSize(320, 50)); // サイズ指定 adg.setAdListener(new AdListener()); // Listener定義 if(dtbAdResponse != null) { adg.addHeaderBiddingParamsWithAmznAdResponse(dtbAdResponse); } // 表示 ad_container.addView(adg); adg.start(); } @Override protected void onPause() { super.onPause(); // Ad Generationの広告ローテーションをオフにし忘れた時のためにpause処理を記述しておく if (adg != null) { adg.pause(); } } @Override protected void onDestroy() { super.onDestroy(); if (adg != null) { // 広告を破棄する adg.stop(); } } // Ad Generationイベントリスナー class AdListener extends ADGListener { private static final String _TAG = "ADGListener"; @Override public void onReceiveAd() { Log.d(_TAG, "onReceiveAdOfBanner"); } @Override public void onFailedToReceiveAd(ADGConsts.ADGErrorCode code) { Log.d(_TAG, "onFailedToReceiveAd"); // 不通とエラー過多のとき以外はリトライ // エラー時のリトライは特段の理由がない限り必ず記述するようにしてください。 switch (code) { case EXCEED_LIMIT: case NEED_CONNECTION: case NO_AD: break; default: if (adg != null) { adg.start(); } break; } } @Override public void onClickAd() { Log.d(_TAG, "onClickAd"); } } ``` #### オートリフレッシュ(ローテーション)の実装 広告のオートリフレッシュ(ローテーション)はAd Generationの機能を使わずにDTB SDKの DTBAdRequest( DTBAdLoader)に設定してください。 Ad Generationのローテーション及び、連携SDKのアドネットワークのローテーション設定はOFFにしてください。 ```java loader.setAutoRefresh(45) // 45秒毎にリフレッシュを行う ``` ```java loader.setAutoRefresh(45); // 45秒毎にリフレッシュを行う ``` 自動更新を必ず停止してください。停止の推奨場所はActivityのonStop()およびonDestroy()です。実装によってはonPause()も推奨場所になります。自動更新処理を不適切に使用するとインプレッション数に矛盾が生じる恐れがあります。 ```java loader.stop() ``` ```java loader.stop(); ``` :::warning[注意] - 広告の自動更新処理を停止し、DTBAdLoaderで使用されているリソースを解放することは、重要です。広告の自動更新処理は、明示的に停止しない限り続行されます。その場合、想定外の挙動になり、またインプレッション数が少なくなります。 - loadAdを呼び出す前に自動更新のプロパティを設定します。loadAdを1回呼び出す際、DTBAdLoaderのインスタンスを1つだけ使用してください。また、stop()が呼び出さるとインスタンスを再使用することはできません。 - `onSuccess`や `onFailure`コールバック等で、Viewの上に重ねてViewを生成しないでください。新しいViewを作る場合、以前のViewをクリアするようにしてください。 - オートリフレッシュは60秒がデフォルト値であり、20秒未満で設定した場合、自動的に60秒に上書きされます。 - `DTBAdRequest` クラスの `setAutoRefresh` メソッドを利用せず、インスタンスの再生成などで独自にローテーションをおこなうことはお控えください - 独自にローテーションをおこなうことが避けられない場合は、Amazon Publisher Services SDKに対してローテーションのための再リクエストであることを通知する実装が別途必要となりますので、弊社へお問い合わせ、またはAmazon社へお問い合わせください。 ::: ### テストモード テストモードを有効にするには、以下のコードを広告リクエストより前に実行してください。 ```java AdRegistration.enableLogging(true) AdRegistration.enableTesting(true) ``` ```java AdRegistration.enableLogging(true); AdRegistration.enableTesting(true); ``` :::warning テスト広告は属性の資格がないため、本番ではテストコードを忘れずに削除してください。 ::: #### 通信の検証 通信の検証を行う場合は、下記の公式サイトを参考に検証を行ってください。 - [Sending Artifacts to APS for Verification](https://ams.amazon.com/webpublisher/uam/docs/mobile-integration-documentation/sending-artifacts-to-aps-to-check.html) - [Mobile Integration Self-Check Guide](https://ams.amazon.com/webpublisher/uam/docs/mobile-integration-documentation/integration-verification-guide.html) --- ## Amazon Publisher Services - Ad Generation Integration [iOS] import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # Amazon Publisher Services - Ad Generation Integration [iOS] Amazon Publisher ServicesとAd Generation SDKをiOSで連携するためのマニュアルとなります。 ## サービスご利用にあたって 本連携については、Amazon Publisher Servicesの登録がお済みのうえ、行って頂くようお願いいたします。 Amazon Publisher Servicesのドキュメント等、公式サイトよりご確認お願いいたいます。 ## 対応バージョン * iOS 13.0 * Xcode 16.2 * Ad Generation SDK 2.31.0 * Amazon Publisher Services SDK v5.2.0(2025-07-30) :::warning[注意] - 広告のリフレッシュ(ローテーション)を行う場合はAmazon Publisher Servicesの機能を用いて実装してください。 - Ad Generationのローテーション及び、連携SDKのアドネットワークのローテーション設定はOFFにしてください。 - Amazon Publisher Services(DTB SDK)とAmazon Mobile Ad Network SDKの併用はサポート対象外となります。 ::: ## Ad Generation管理画面での広告枠設定 1. 対象枠でカスタムタグを作成する。 2. カスタムタグ認証情報として「Amazon Header Bidding」を選択する。 3. アドネットワーク名を入力する。こちらは表示にのみ使用されます。 4. Key/CPMをデフォルト値から変更したい場合は変更します。 ## Amazon Publisher Services SDKの導入 ### CocoaPodを使用する(推奨) 1. 以下の行をプロジェクトのPodfileに追加します。 `pod 'AmazonPublisherServicesSDK', '5.2.0'` 2. `pod install`を実行します ### 手動でインストールする - 下記のフレームワークを追加してください。 - DTBiOSSDK.xcframework - AdSupport - CoreGraphics - CoreTelephony - SystemConfiguration - CoreLocation ### APS向けのSKAdNetworkIDを追加する `Info.plist` に対して、下記のIDを追加お願いいたします。 ```xml SKAdNetworkItems SKAdNetworkIdentifier vhf287vqwu.skadnetwork ``` [amazon publisher services SKAdNetwork ID List](https://ams.amazon.com/webpublisher/uam/docs/aps-mobile/skadnetwork-ids) ## Ad Generation SDKの導入 - Ad Generation iOSSDKバナー導入マニュアルの[1. SDKをダウンロードする]をご参照ください。 ## Amazon Publisher Services SDK(DTB SDK)の初期設定 AppDelegate.mのdidFinishLaunchingWithOptionsにて初期設定を行います。 ```swift import DTBiOSSDK func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { // アプリケーションキーを設定する DTBAds.sharedInstance().setAppKey("YOUR_APP_KEY") // アドネットワーク設定 DTBAds.sharedInstance().setAdNetworkInfo(DTBAdNetworkInfo(networkName: DTBADNETWORK_AD_GENERATION)) // Ad Generationのアドサーバーを利用するために下記を追加してください DTBAds.sharedInstance().mraidPolicy = CUSTOM_MRAID DTBAds.sharedInstance().mraidCustomVersions = ["1.0", "2.0"] // 位置情報を収集して活用する場合は下記を追加してください // DTBAds.sharedInstance().useGeoLocation = true // デバッグ時はログレベル変更とテストモードを有効化してください※アプリリリース時は呼び出さないでください // DTBAds.sharedInstance().setLogLevel(DTBLogLevelAll) // ログレベル // DTBAds.sharedInstance().testMode = true // テストモード return true } ``` ```objc @import DTBiOSSDK; - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // アプリケーションキーを設定する [[DTBAds sharedInstance] setAppKey: @"YOUR_APP_KEY"]; // アドネットワーク設定 DTBAdNetworkInfo *dtbAdNetworkInfo = [[DTBAdNetworkInfo alloc] initWithNetworkName: DTBADNETWORK_AD_GENERATION]; [[DTBAds sharedInstance] setAdNetworkInfo: dtbAdNetworkInfo]; // Ad Generationのアドサーバーを利用するために下記を追加してください [DTBAds sharedInstance].mraidPolicy = CUSTOM_MRAID; [DTBAds sharedInstance].mraidCustomVersions = @ [@"1.0", @"2.0"]; // 位置情報を収集して活用する場合は下記を追加してください // [[DTBAds sharedInstance] setUseGeoLocation:YES]; // デバッグ時はログレベル変更とテストモードを有効化してください※アプリリリース時は呼び出さないでください // [[DTBAds sharedInstance] setLogLevel:DTBLogLevelAll]; // ログレベル // [[DTBAds sharedInstance] setTestMode:YES]; // テストモード return YES; } ``` DTB SDKの初期設定は必ずメインスレッド上で行う必要があります。 ## バナー広告 ### importとdelegate protocolの定義 ```swift import DTBiOSSDK import ADG class ViewController: UIViewController, DTBAdCallback, ADGManagerViewControllerDelegate ``` ```objc @import DTBiOSSDK; @import ADG; @interface ViewController () ``` ### DTBAdLoaderの生成と広告リクエスト ```swift // width,height,slotidの指定 var size = [DTBAdSize]() size.append(DTBAdSize(bannerAdSizeWithWidth: 320, height: 50, andSlotUUID: "your_dtb_slot_id")) let adLoader = DTBAdLoader.init() adLoader.setAdSizes(size) adLoader.loadAd(self) ``` ```objc // width,height,slotidの指定 DTBAdSize *size = [[DTBAdSize alloc] initBannerAdSizeWithWidth:320 height:50 andSlotUUID:@"your_dtb_slot_id"]; DTBAdLoader *adLoader = [DTBAdLoader new]; [adLoader setSizes:size, nil]; [adLoader loadAd:self]; ``` ### 広告リクエスト結果処理 - DTBSDKが生成するbid情報(DTBAdResponse)の有効期間は10分となります。 - DTBAdResponseパラメーターの付与以外は通常のAd Genrationの広告リクエストと同様です。 ```swift // Amazon広告リクエスト成功時 func onSuccess(_ adResponse: DTBAdResponse!) { // Amazon広告リクエスト成功時は // DTBAdResponseのパラメーターを付与した上でAd Generationの広告のリクエストを行います。 self.loadADG(adResponse) } // Amazon広告リクエスト失敗時 func onFailure(_ error: DTBAdError) { // Amazon広告リクエスト失敗時は // DTBAdResponseのパラメーターを付与せずAd Generationの広告のリクエストを行います。 self.loadADG(nil) } func loadADG(_ adResponse: DTBAdResponse?) { // ADGManagerViewControllerクラスのインスタンスとしてself.adgが定義されているものとする // self.adViewが広告表示領域であるとする。 adg = ADGManagerViewController(locationID: "YOUR_ADGENERATION_AD_ID", adType: .adType_Sp, rootViewController: self) adg?.addAdContainerView(self.adView) // 広告Viewを配置するViewを指定 // Amazon広告パラメーターのセット if let param = adResponse { adg?.addHeaderBiddingParams(withAmznAdResponse: param) } adg?.delegate = self adg?.loadRequest() // Ad Generation広告リクエスト } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) } deinit { // インスタンスの破棄 adg = nil } 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.") } ``` ```objc // Amazon広告リクエスト成功時 - (void)onSuccess: (DTBAdResponse *)adResponse { // Amazon広告リクエスト成功時は // DTBAdResponseのパラメーターを付与した上でAd Generationの広告のリクエストを行います。 [self loadAdg:adResponse]; } // Amazon広告リクエスト失敗時 - (void)onFailure: (DTBAdError)error { // Amazon広告リクエスト失敗時は // DTBAdResponseのパラメーターを付与せずAd Generationの広告のリクエストを行います。 [self loadAdg:nil]; } - (void)loadAdg: (DTBAdResponse *)adResponse { // ADGManagerViewControllerクラスのインスタンスとしてself.adgが定義されているものとする // self.adViewが広告表示領域であるとする。 self.adg = [[ADGManagerViewController alloc] initWithLocationID:@"YOUR_ADGENERATION_AD_ID" adType:kADG_AdType_Sp rootViewController:self]; [self.adg addAdContainerView:self.adView]; // 広告Viewを配置するViewを指定 // Amazon広告パラメーターのセット if (adResponse) { [self.adg addHeaderBiddingParamsWithAmznAdResponse:adResponse]; } self.adg.delegate = self; [self.adg loadRequest]; // Ad Generation広告リクエスト } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; } - (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."); } ``` ### オートリフレッシュ(ローテーション)の実装 - 広告のオートリフレッシュ(ローテーション)はAd Generationの機能を使わずにDTB SDKの `DTBAdLoader`に設定ください。 Ad Generationのローテーションおよび、連携SDKのアドネットワークのローテーション設定はOFFにしてください。 ```swift adLoader.setAutoRefresh(45) // 45秒毎にリフレッシュを行う ``` ```objc [adLoader setAutoRefresh:45]; // 45秒毎にリフレッシュを行う ``` - 自動更新を必ず停止してください。自動更新を停止する際の推奨場所はviewDidDisappearです。自動更新処理を不適切に使用してしまうと、インプレッション数に矛盾の可能性が発生します。 ```swift adLoader.stop() ``` ```objc [adLoader stop]; ``` :::warning[注意] - 広告の自動更新処理を停止し、DTBAdLoaderで使用されているリソースを解放することは、重要です。広告の自動更新処理は、明示的に停止しない限り続行されます。その場合、想定外の挙動になり、またインプレッション数が少なくなります。 - loadAd を呼び出す前に自動更新のプロパティを設定します。loadAdを1回呼び出す際、DTBAdLoader のインスタンスを1つだけ使用してください。また、stop()が呼び出さるとインスタンスを再使用することはできません。 - `onSuccess`や `onFailure`コールバック等で、Viewの上に重ねてViewを生成しないでください。新しいViewを作る場合、以前のViewをクリアするようにしてください。 - オートリフレッシュは60秒がデフォルトであり、20秒未満に設定した場合、自動的に60秒に上書きされます。 - `DTBAdLoader` クラスの `setAutoRefresh` メソッドを利用せず、インスタンスの再生成などで独自にローテーションをおこなうことはお控えください - 独自にローテーションをおこなうことが避けられない場合は、Amazon Publisher Services SDKに対してローテーションのための再リクエストであることを通知する実装が別途必要となりますので、弊社へお問い合わせ、またはAmazon社へお問い合わせください。 ::: ### DTBAdLoaderの破棄 - DTBAdLoaderインスタンスが不要になったタイミングでnilのセットをしてください。 ```swift adLoader = nil ``` ```objc self.adLoader = nil; ``` ## テストモード テストモードを有効にするには、以下のコードを広告リクエストより前に実行してください。 ```swift DTBAds.sharedInstance().setLogLevel(DTBLogLevelAll) DTBAds.sharedInstance().testMode = true ``` ```objc [[DTBAds sharedInstance] setLogLevel:DTBLogLevelAll]; [[DTBAds sharedInstance] setTestMode:YES]; ``` :::warning[注意] テスト広告は属性の資格がないため、本番ではテストコードを忘れずに削除してください。 ::: ### 通信の検証 通信の検証を行う場合は、下記の公式サイトを参考に検証を行ってください。 - [Sending Artifacts to APS for Verification](https://ams.amazon.com/webpublisher/uam/docs/mobile-integration-documentation/sending-artifacts-to-aps-to-check.html) - [Mobile Integration Self-Check Guide](https://ams.amazon.com/webpublisher/uam/docs/mobile-integration-documentation/integration-verification-guide.html) --- ## Amazon Publisher Services - Ad Generation Integration [Web] import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # Amazon Publisher Services - Ad Generation Integration [Web] Amazon Publisher Services(APS)とAd Generation SDKをWebで連携するためのマニュアルとなります。 ## サービスご利用にあたって 本連携については、Amazon Publisher Servicesの登録がお済みのうえ、行って頂くようお願いいたします。 Amazon Publisher Servicesのドキュメント等、公式サイトよりご確認お願いいたいます。 ## Ad Generation管理画面での広告枠設定 1. 対象枠でカスタムタグを作成します。 2. カスタムタグ認証情報として「Amazon Header Bidding」を選択します。 3. アドネットワーク名を入力する。こちらは表示にのみ使用されます。 4. Key/CPMを設定します。 ## Amazon Publisher Services SDKの導入 1. Amazon Publisher ServicesのJavaScriptライブラリ(`apstag`)をロードし、 `apstag.init()` を実行します。 2. `apstag.fetchBids()`でを実行します。 3. `apstag.fetchBids()`のコールバック内で、Ad GenerationのJavaScriptタグの生成を行います。 ```html ... ... ...
... ``` ## Google Ad Managerとの併用 `apstag.fetchBids()` の実行までは同様で、リクエストパラメーターにGoogle Ad Manager用のパラメーターを追加し、コールバック内の任意のタイミングでGoogle Ad Manager用のコードを実行してください。 ```js apstag.fetchBids({ slots: [ ... { slotID: 'div-gpt-ad-1475102693815-0', slotName: '12345/box-1', sizes: [[300, 250], [300, 600]] }, { slotID: 'div-gpt-ad-1475185990716-0', slotName: '12345/leaderboard-1', sizes: [[728 ,90]] }, ... ], timeout: 2e3 }, function(bids) { ... /* Set apstag targeting on googletag, then trigger the first googletag request in googletag's disableInitialLoad integration */ googletag.cmd.push(function(){ apstag.setDisplayBids(); googletag.pubads().refresh(); }); ... }); ``` ## Prebid.jsとの併用 Prebid.jsとの併用については[Prebid.js + Amazon Publisher Services](/ad-generation/platforms/prebid/prebid_aps_banner_ad_web)をご確認ください。 --- ## メディエーション・連携 Ad Generationと他のアドネットワークSDKとの連携方法についてのガイド ---- このページではAd Generationと他のアドネットワークSDKの連携方法について説明します。 ## 共通手順 - [アドネットワークのSDKと連携する際の注意事項及び共通手順](/ad-generation/mediation/sdk_mediation_notes) ## Amazon Publisher Services 連携 - [Amazon Publisher Services - Ad Generation Integration [iOS]](/ad-generation/mediation/amazon_publisher_services_ios) - [Amazon Publisher Services - Ad Generation Integration [Android]](/ad-generation/mediation/amazon_publisher_services_android) - [Amazon Publisher Services - Ad Generation Integration [Web]](/ad-generation/mediation/amazon_publisher_services_web) ## AdMob 連携 ### カスタムSDK連携 - [カスタムSDK連携 AdMob iOS](/ad-generation/mediation/admobadapter_ios_manual) - [ADGカスタムSDK連携 AdMob Android](/ad-generation/mediation/admobadapter_android_manual) ### AdMobメディエーション - [AdMobメディエーション iOS SDK バナー広告](/ad-generation/mediation/admobmediation_banner_interstitial_ad_ios) - [AdMobメディエーション Android SDK バナー広告](/ad-generation/mediation/admobmediation_banner_interstitial_ad_android) --- ## アドネットワークのSDKと連携する際の注意事項及び共通手順 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; import MediationTable from '@site/src/components/SDKVersions/MediationTable'; # アドネットワークのSDKと連携する際の注意事項及び共通手順 バナー広告、ネイティブ広告の実装において、提携しているアドネットワークが提供するネイティブアプリ向けSDKと連携する際の注意事項および共通手順となります。 ## iOS​ ### 1. rootViewControllerの設定 「広告タップ時のアプリ内ブラウザ起動」「動画のインビュー判定」のため、最前面にある`UIViewController`をinit時にセットしてください。 ```swift adg = ADGManagerViewController( locationID: "48547", adType: .adType_Sp, rootViewController: self ) ``` ```objc self.adg = [[ADGManagerViewController alloc] initWithLocationID:@"48547" adType:kADG_AdType_Sp rootViewController:self]; ``` ### 2. 失敗時の再リクエスト 広告のロードに失敗した場合は再リクエストや非表示等の処理を必ず実装し、在庫切れエラー時の再リクエストが行われることをご確認ください。 ```swift func adgManagerViewControllerFailed(toReceiveAd adgManagerViewController: ADGManagerViewController, code: kADGErrorCode) { print("Failed to receive an ad.") // エラー時のリトライは特段の理由がない限り必ず記述するようにしてください。 switch code { case .adgErrorCodeNeedConnection, // ネットワーク不通 .adgErrorCodeExceedLimit, // エラー多発 .adgErrorCodeNoAd: // 広告レスポンスなし break default: adgManagerViewController.loadRequest() } } ``` ```objc - (void)ADGManagerViewControllerFailedToReceiveAd:(ADGManagerViewController *)adgManagerViewController code:(kADGErrorCode)code { printf("Failed to receive an ad.") // エラー時のリトライは特段の理由がない限り必ず記述するようにしてください。 switch (code) { case kADGErrorCodeNeedConnection: // ネットワーク不通 case kADGErrorCodeExceedLimit: // エラー多発 case kADGErrorCodeNoAd: // 広告レスポンスなし break; default: [adgManagerViewController loadRequest]; break; } } ``` ## Android ### 1. 失敗時の再リクエスト 広告のロードに失敗した場合は再リクエストや非表示等の処理を必ず実装し、在庫切れエラー時の再リクエストが行われることをご確認ください。 ```java class AdListener : ADGListener() { override fun onFailedToReceiveAd(code: ADGConsts.ADGErrorCode) { Log.d(TAG, "Failed to receive an ad:$code") when (code) { // エラー時のリトライは特段の理由がない限り必ず記述するようにしてください。 ADGConsts.ADGErrorCode.EXCEED_LIMIT, ADGConsts.ADGErrorCode.NEED_CONNECTION, ADGConsts.ADGErrorCode.NO_AD -> { } else -> adg.start() } } } ``` ```java class AdListener extends ADGListener { @Override public void onFailedToReceiveAd(ADGErrorCode code) { Log.d(TAG, "Failed to receive an ad:$code"); // エラー時のリトライは特段の理由がない限り必ず記述するようにしてください。 switch (code) { case EXCEED_LIMIT: case NEED_CONNECTION: case NO_AD: break; default: if (adg != null) { adg.start(); } break; } } } ``` ## Ad Generation SDKでのメディエーションに関するサポート状況 ### iOS対応一覧 ### Android対応一覧 ## 注意事項 - 対応のOSバージョンはアドネットワーク毎に異なります。 - 連携SDKは弊社から配布しているもの、または、実装マニュアルにて案内しているサポートバージョンをご使用ください。連携バージョンが異なると意図しないエラー発生の可能性があります。 - 連携先によっては在庫切れが多いものもございます。 - 連携先SDKを参照から外した状態で動作させるとエラーを起こすことが可能です。 - 動画SDKの場合、ローテーション時間は動画の再生完了を基準とします。 - 連携SDKのアドネットワークのローテーション設定をOFFにしてください。 - 連携SDKでの実装後、広告の表示確認および、連携先の広告レポート数値などが正常であることをご確認いただいた上でアプリのリリースをお願いいたします。 --- ## targetSDKVersionが28以上のアプリでビルドする場合のAndroid HTTP通信ブロック対応 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # targetSDKVersionが28以上のアプリでビルドする場合のAndroid HTTP通信ブロック対応 ## Ad Generation Android SDK について AndroidではtargetSDKVersion 28以降でhttp通信に関する制限が加えられており、下記のケースでAndroid Pie(9.0)において広告の表示されないことが想定されます。(※1) - カスタムタグを含むタグ配信でhttpの呼び出しが発生する場合 - 連携先SDKが弊社ご案内のバージョンより過去のものをご利用の場合 :::info[参考] [フレームワーク セキュリティの変更](https://developer.android.com/about/versions/pie/android-9.0-changes-28?hl=JA#framework-security-changes) ::: (※1) Google社より、アプリの新規リリースおよびアップデートの際にtargetSDKVersionを28以上に指定することが必須化されております。 ## 対応方法について タグ配信でhttpの呼び出しが発生する広告IDをご利用のお客様や、各社の連携先SDKが弊社ご案内バージョンより過去のものをご利用のお客様(※2) は、`cleartextTrafficPermitted`を`true`に変更してhttp通信を許可していただくことで、`targetSDKVersion`を変更せずにhttp通信の事業社の広告配信が可能となります。 - AndroidManifest.xml ``` ... ``` - res/xml/network_security_config.xml ``` ``` (※2) 各社アドネットワークの弊社ご案内バージョン |アドネットワーク|バージョン|備考| |----|:--:|----| |FIVE| - |2019年10月30日以降のSDKをご利用ください| |AdMob|17.0.0|| |Amazon Mobile Ad Network|5.9.0 || |Amazon Publisher Services| - |各メディア様に個別DLしていただく提供方法が採用されているため、ご利用verのhttps対応可否についてはAmazon社へお問い合わせをお願い致します| |UnityAds|3.0.3|| |maio|1.1.7|| |Audience Network|5.0.1|| **対応表** 要件: targetSDKVersionが28以降 |変更対象|・アプリ&タグ配信・httpの呼び出し 「発生」|・アプリ& 各社連携先SDK・弊社ご案内 バージョン以外で ご利用|・アプリ&タグ配信・httpの呼び出し 「発生しない」・各社連携先SDKを 弊社ご案内 バージョンのみ ご利用| |----|----|----|----| |AndroidManifest.xml(cleartextTrafficPermitted)|有(true) |有(true) |無(false)| |Ad Generation SDK(setIsSSL)|無(false) |無(false) |有(true)| --- ## targetSDKVersionが31以上のアプリでビルドする場合の対応について ## Ad Generation Android SDK について AndroidではtargetSDKVersion 31以降のプロジェクトの場合に、AAID(広告ID)の取得に関する制限が2021年後半から2022年初めにかけて段階的に実施されるということがGoogle社から案内されております。 引き続き、targetSDKVersionを31以上に指定したプロジェクトにて、従来どおりAAID(広告ID)を取得したい場合は、以下のようにAndroidManifest.xmlで Google Play 開発者サービスの標準の権限について追加いただく必要があります。 ``` ``` [広告 ID - Play Console ヘルプ](https://support.google.com/googleplay/android-developer/answer/6048248?hl=ja) --- ## その他のドキュメント Ad Generation SDK導入時に役立つ追加情報やプラットフォーム固有の設定ガイドをまとめています。 ## 📱 プラットフォーム固有の設定 ### iOS関連 - [App Transport Security (ATS) 対応](/ad-generation/other/ios_ats) - [iOS 14+ AppTrackingTransparency対応](/ad-generation/other/ios14_apptrackingtransparency) - [SKAdNetwork対応](/ad-generation/other/ios14_skadnetwork) ### Android関連 - [Android HTTP通信ブロック対応 (targetSDK 28+)](/ad-generation/other/android_http_block) - [targetSDKVersion 31以上での対応](/ad-generation/other/android_targetsdkversion_31) ## 🌍 共通設定 ### 位置情報 - [iOS/Android 位置情報の扱いについて](/ad-generation/other/location) ## ❓ よくある質問 (FAQ) 実装時のよくある質問と回答をまとめています。 - [FAQ - よくある質問](/support/faq/faq_common) - [iOSに関するFAQ](/support/faq/faq_ios) - [Androidに関するFAQ](/support/faq/faq_android) ## 📋 関連リソース - [プラットフォーム実装ガイド](/ad-generation/) - [メディエーション・連携](/ad-generation/mediation/) - [APIリファレンス](/ad-generation/api-reference/) - [テスト用広告枠ID](/ad-generation/test_id) --- ## iOS SDKのAppTrackingTransparency対応について ## 概要 SDKでは、IDFAというApple社から提供されているIDを取得し、各広告事業者はターゲティングやコンバージョンの計測に利用しているケースがございます。 iOS14.5以降でIDFAを取得したい場合は、[AppTrackingTransparency](https://developer.apple.com/documentation/apptrackingtransparency)を用いて、ユーザー様にIDFAを取得するためのパーミッション要求が必須となります。 iOS14.5以降にてIDFA取得率低下の影響を緩和するために、必要に応じてIDFAを取得するためのパーミッション要求をご実装お願いいたします。 ## 対応SDK Ver Ad GenerationのiOS SDKはv2.18.4(2020年9月15日リリース)以降をご利用ください。(*1) :::info[補足] (*1) 後述のSKAdNetworkも対応する場合はv2.20.0以降をご利用ください。 ::: ## 対応内容 1. Ad Generation SDK v2.18.4〜以降をCocoaPodsまたは[DLページ](https://github.com/AdGeneration/ADG-iOS-SDK/releases)から導入してご利用ください。 2. AppTrackingTransparency.framework(*2) および、AdSupport.framework(*3) をアプリプロジェクトの参照に追加してください。 3. アプリ内のInfo.plistに `Privacy - Tracking Usage Description` Keyを追加いただき、Valueで権限リクエスト時に表示されるダイアログの文言を設定してください。 4. 適切なタイミングで[requestTrackingAuthorizationWithCompletionHandler](https://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/3547037-requesttrackingauthorizationwith?language=objc)を実行し権限のリクエストをおこなってください。(*4) 5. あわせて、IDFAを利用せずプライバシーに配慮してコンバージョン計測ができるよう、Apple社によって提供されている[SKAdNetwork対応について](/ad-generation/other/ios14_skadnetwork)もご参照のうえ、ご対応をお願いいたします。 :::info[補足] (*2) iOS14以降で有効なIDFAが取得可能であるか判定するために必要です。 (*3) IDFAの取得のために必要です。 (*4) 弊社で2020年にご案内させていただいております、[iOS14対応について](/ad-generation/other/ios14_skadnetwork)内にある `iOS14 に関して、対応と対策` 資料を参考にしていただき、権限の許諾率を加味して権限リクエスト前にユーザー様が理解しやすい説明文を記述したダイアログを実装するなどの対応をおすすめしております。 ::: ## 参照 * [AppTrackingTransparency](https://developer.apple.com/documentation/apptrackingtransparency) * [ASIdentifierManager](https://developer.apple.com/reference/adsupport/asidentifiermanager) * [ユーザーのプライバシーとデータの使用](https://developer.apple.com/jp/app-store/user-privacy-and-data-use/) * [Details for app privacy questions now available](ttps://developer.apple.com/documentation/apptrackingtransparency/attrackingmanager/3547037-requesttrackingauthorizationwith?language=objc) --- ## iOS SDKのSKAdNetwork対応について ## 概要 SDKでは、IDFAというApple社から提供されているIDを取得し、各広告事業者はターゲティングやコンバージョンの計測に利用しているケースがございます。 iOS14.5以降では、IDFAを取得する際、ユーザー様に明示的に、IDFA取得のためのパーミッション要求が必須となります。 そのため、IDFAがiOS14.4以前よりも取得できないケースが想定され、広告のコンバージョン計測に影響が予想されます。 今後はApple社から提供されているSKAdNetworkという機能を利用してコンバージョン計測することが標準化される見込みのため、 後述の、弊社SDK(v2.20.0〜)以降の導入と、Info.plistへのSKAdNetworkIDの記述をお願いいたします。 ## 対応SDK Ver Ad GenerationのiOS SDKはv2.20.0(2021年2月3日リリース)にてSKAdNetwork(v2)の対応をおこなっております。 ## 対応内容 1. Ad Generation SDK v2.20.0〜以降をCocoaPodsまたは[DLページ](https://github.com/AdGeneration/ADG-iOS-SDK/releases)から導入してご利用ください。 2. アプリ内のInfo.plistに[弊社FAQページの一覧表](https://ad-generation.jp/support/adg-help/Implementation-guide/skadnetworkid)を参考に必須となるSKAdNetworkIDを選択してすべて記述してください。 3. あわせて、iOS14.5以降にて収益影響を緩和するために、必要に応じてIDFAを取得できるよう、[AppTrackingTransparency対応について](/ad-generation/other/ios14_apptrackingtransparency)もご参照のうえ、ご対応をお願いいたします。 上記1〜2をご対応いただけますと、Ad Generation SDKから配信されるクリエイティブについてはSKAdNetworkに対応した広告を配信可能となります。(*1) 3は必要に応じてなるべくご実装いただくことをおすすめいたします。 :::info[補足] (*1)他社SDKと連携してご利用頂いている場合は、他社SDKにつきましてもSKAdNetwork対応版のSDKにアップデートいただき、各社で案内されている手順をおこなってください。 ::: ## 参照 * [SKAdNetwork(Apple)](https://developer.apple.com/documentation/storekit/skadnetwork) --- ## iOS SDK導入時のApp Transport Security(ATS)対応について import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # iOS SDK導入時のApp Transport Security(ATS)対応について ## Ad Generation iOS SDK v2.4.1以前について Ad GenerationのiOS SDKは2.1.1(2015年8月6日リリース)にてAd Generationのサーバとの通信に関してはATS対応完了しております。 しかし広告配信事業社(アドネットワーク・DSP事業社)につきましては、http通信のみの事業社もあるため、 Info.plistでATSを無効化することにより、http通信のみの事業社の広告配信も可能として頂いております。 ```xml NSAppTransportSecurity NSAllowsArbitraryLoads ``` #### ATSを有効にしたい場合 v2.4.1では、`loadRequest`より前に以下のメソッド呼び出しをしていただくことで広告配信事業社(アドネットワーク・DSP事業社)についても、https通信で行うように変更できます。 ただし、アドネットワークの配信にGunosyAdsが含まれている場合はATSを無効にしてください。 --- ### ADGManagerViewController ```objc - (void)setSSLMode:(BOOL)isSSL; ``` **Parameters** * _isSSL_ YES: httpsで通信します/NO: httpで通信します --- ## Ad Generation iOS SDK v2.4.2以降について Appleは今後、App Storeに公開するアプリについてはATS必須とすることを発表しております。 Ad GenerationのiOS SDKはv2.4.2以降より、広告配信事業社(アドネットワーク・DSP事業社)との通信についてもhttps通信で行います。 (`setSSLMode:`の呼び出しは不要になります。) ## ATSを有効にしている場合のFIVEの配信について **2016年2月5日以前にご提供したFiveAd.framework** では、 FIVEを配信するためには、以下のように`fivecdm.com`ドメインをinfo.plistに記載していただく必要がございます。 **2016年2月6日以降にご提供したFiveAd.framework** では、https通信に対応されたため不要です。 ```xml NSAppTransportSecurity NSExceptionDomains fivecdm.com NSExceptionAllowsInsecureHTTPLoads ``` ## iOS 10 以降について MillennialMedia, InMobiを配信する, もしくはカスタムタグを使用してhttp通信で広告配信をご希望の場合は、iOS10のみ以下の設定で可能になります。 1. info.plistの設定 iOS 10では、新たに `NSAllowsArbitraryLoadsInWebContent` のキーが追加されUIWebViewのhttp通信を許容できます。info.plistに以下の設定を追加してください。 ```xml NSAppTransportSecurity NSAllowsArbitraryLoadsInWebContent ``` (iOS 9以前のバージョンでは`NSAllowsArbitraryLoadsInWebContent` のキーは対応しておりません) 2. `ADGManagerViewController.setSSLMode:`の呼び出し `setSSLMode:` を使用し、Ad Generation SDKでのUIWebViewにおける通信をhttpにしてください。 ```swift adgManagerViewController.setSSLMode(false) ``` ```objc [adgManagerViewController setSSLMode: NO]; ``` ## 参照 [Information Property List Key Reference](https://developer.apple.com/library/content/documentation/General/Reference/InfoPlistKeyReference/Articles/CocoaKeys.html) --- ## iOS/Android 位置情報の扱いについて ## 概要 Ad Generation SDKにおける位置情報の取得と利用に関する機能を提供します。 ユーザが位置情報に関する権限をアプリに付与し、Ad Generation SDKにて位置情報取得の設定をONにしている場合、位置情報を広告リクエストに付与します。 位置情報サービスを使用される場合、マーケットの規約に従い、ユーザへの通知および同意をお願いいたします。 :::info[iOS SDK v2.27.0以降について] iOS SDK v2.27.0以降、位置情報取得機能は削除されました。Ad Generation SDKが位置情報を取得することはしません。 iOS SDK v2.27.0以降の位置情報の扱いについては[こちら](/ad-generation/platforms/ios/banner_ad_ios#位置情報の扱いについて)をご参照ください。 ::: ## デフォルト設定 iOS/Android SDK Version | 位置情報取得の設定 ---|--- v2.7.0〜v2.11.7 | ON v2.13.0〜 | OFF (iOSのみ) v2.27.0〜 | 機能削除 ## APIリファレンス ### 位置情報取得の有効化 位置情報の取得を有効にします。アプリ起動後、広告リクエスト前の任意のタイミングで実行可能です。 #### iOS (〜v2.26.1) ``` ADGSettings.setGeolocationEnabled(Bool) ``` **Parameters** - enabled: 位置情報の有効/無効を指定(true: 有効、false: 無効) #### Android ``` ADGSettings.setGeolocationEnabled(Boolean) ``` **Parameters** - enabled: 位置情報の有効/無効を指定(true: 有効、false: 無効) ## 注意事項 ### AppStore審査時の注意事項 (iOS v2.23.0より前のバージョン) #### Info.plist 必須設定 Ad Generation SDKは `CoreLocation.framework` を必須フレームワークとして使用するため、以下の設定が必要です。 - キー: `NSLocationAlwaysUsageDescription` 位置情報の取得が必要ないアプリでも記述が必要となります。 記述のない場合、AppStore審査時に下記の警告およびリジェクトリスクを伴います。 ``` ITMS-90683: Missing Purpose String in Info.plist ``` #### 実装パターン **1. 位置情報を使用しない場合** Info.plistに以下の設定を追加してください。 ```xml NSLocationAlwaysUsageDescription {AppName} doesn't use the Location API. ``` - \{AppName\}を実際のアプリ名に置き換えてください - 位置情報取得APIを利用していない旨を記述いただければと思います **2. 位置情報を使用する場合** 位置情報を取得する場合、[公式ガイド](https://developer.apple.com/documentation/corelocation/requesting_authorization_for_location_services)をご参照のうえ、位置情報取得APIの利用について `Info.plist` に追加してください。 #### 収集データについて 本機能が有効になっている場合、収集データが追加されますので、適宜プライバシーポリシーに記述してください。 情報 | 定義 ---|--- 詳細な位置情報 | 小数点以下3桁以上の緯度経度と同等、またはそれよりも高い詳細レベルでの、ユーザーまたはデバイスの場所を示す情報 おおよその場所 | 小数点以下3桁以上の緯度経度よりも低い詳細レベルでのユーザーまたはデバイスの場所を示す情報(おおよその位置情報サービスなど) --- ## Android SDK Getting Started / バナー広告 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # Android SDK Getting Started / バナー広告 ## はじめに 開発環境としてAndroid Studioを利用し、インストール後の各種設定は準備されていることを前提にした手順となります。 - 2026-08-18 [v2.41.0アップデート内容](https://github.com/AdGeneration/ADG-Android-SDK/releases/tag/2.41.0) - 2026-06-17 [v2.40.0アップデート内容](https://github.com/AdGeneration/ADG-Android-SDK/releases/tag/2.40.0) - 2026-06-08 [v2.37.0アップデート内容](https://github.com/AdGeneration/ADG-Android-SDK/releases/tag/2.37.0) - 2026-04-20 [v2.36.0アップデート内容](https://github.com/AdGeneration/ADG-Android-SDK/releases/tag/2.36.0) - 2026-03-31 [v2.35.1アップデート内容](https://github.com/AdGeneration/ADG-Android-SDK/releases/tag/2.35.1) - 2025-12-10 [v2.34.0アップデート内容](https://github.com/AdGeneration/ADG-Android-SDK/releases/tag/2.34.0) [アドネットワークのSDKと連携する際の注意事項及び共通手順](/ad-generation/mediation/sdk_mediation_notes) ## 前提条件 - AndroidX移行済みのプロジェクト ※移行がお済みでない方は[コチラ](https://developer.android.com/jetpack/androidx/migrate)をご確認いただきご対応をお願いいたします。 - Kotlinプラグイン導入済みのプロジェクト ※導入がお済みでない方は[コチラ](https://developer.android.com/kotlin/add-kotlin)をご確認いただきご対応をお願いいたします。 ## 対応バージョン - Android 6.0以降(API Level 23) ## 導入の流れ 1. プロジェクトにSDKを追加します 1. AndroidManifest.xmlを修正します 1. Google Play Servicesの設定を行います 1. 例を参考に広告表示の実装を行います 1. proguardの設定を行います - targetSDKVersionが28以上の場合は[「targetSDKVersionが28以上のアプリでビルドする場合の対応について」](/ad-generation/other/android_http_block)を御覧ください。 - targetSDKVersionを31以上の場合は[「targetSDKVersionが31以上のアプリでビルドする場合の対応について」](/ad-generation/other/android_targetsdkversion_31)を御覧ください。 ### 1. プロジェクトにSDKを追加する :::warning[注意] 前バージョンでjarファイルのSDKを使用している方は削除してください。 ::: #### Gradleを使用する場合 プロジェクトレベルのbuild.gradleファイルを開き、allprojects.repositories配下に以下のステートメントを追加します。 ```java allprojects { repositories { // 以下を追加 maven { url 'https://adgeneration.github.io/ADG-Android-SDK/repository' } } } ``` ```java allprojects { repositories { // 以下を追加 maven("https://adgeneration.github.io/ADG-Android-SDK/repository") } } ``` アプリレベルのbuild.gradleファイルを開き、dependencies配下に以下のステートメントを追加します。 ```java dependencies { // 以下を追加 implementation 'com.socdm.d.adgeneration:adg:+' } ``` ```java dependencies { // 以下を追加 implementation("com.socdm.d.adgeneration:adg:+") } ``` #### 手動でインストールする場合 **ダウンロード** こちらからダウンロードしてください。 [ダウンロード](https://github.com/AdGeneration/ADG-Android-SDK/releases) (Downloads > `adg-x.x.x.aar`) **プロジェクトにSDKを追加** 1. File > New > New Module > Import.JAR/.AAR Package を選択する 1. ダウンロードした `adg-x.x.x.aar` を選択する 1. プロジェクトツールウィンドウ(Projectビュー)で、追加したモジュールを選択し、右クリック > `Open Module Settings` を選択する 1. アプリモジュールを選択し、`Dependencies`タブから「+」ボタンを押し、`Module Dependency`を選択する 1. `:adg-x.x.x` を選択する ![adg-x.x.xを選択する](/img/sdk_android_img007.59462bff.png) ### 2. AndroidManifest.xmlを修正する ハードウェアアクセラレーションを有効にしてください。 ハードウェアアクセラレーションを有効にするには、AndroidManifest.xmlで”android:hardwareAccelerated“属性の値をtrueに設定します。 以下設定例です。 ``` (省略) ``` ### 3. Google Play Servicesを設定する 本SDKでは提携DSPの追跡型広告を表示するためGoogle Advertising IDを使用します。 Google Advertising IDを利用するにはGoogle Play Servicesの導入が必須となります。 Google Advertising IDを利用することにより収益の向上が見込まれます。 導入方法は以下の通りです。 #### 共通設定 本手順は開発環境共通で適用されるため、一度行えば以降は必要ありません。 (Google Play Servicesのアップデートは適宜行ってください) 1. SDK Managerを起動する。 起動するには「Tools」→「Android」→ 「SDK Manager」を選択してください。 もしくは、SDK Managerのボタンをクリックしてください。 ![SDK Manager](/img/SDKManager.png) 2. 「SDK Tools」タブを選択し、Google Play servicesにチェックをつけ、インストールします。 ![Google Play servicesにチェック](/img/sdk_android_img002.png) #### アプリ毎の設定 本手順はアプリ毎に実施する必要があります。 Androidアプリケーションモジュール(app)配下にあるbuild.gradleのdependenciesに以下を追加します。 **AndroidXに移行済みプロジェクトでGoogle Play Services 15.0.0以降をご利用のかた** ``` implementation 'com.google.android.gms:play-services-base:18.1.0' implementation 'com.google.android.gms:play-services-ads-identifier:18.0.1' ```
AndroidXに移行していないプロジェクトでGoogle Play Services 15.0.0以降をご利用のかた AndroidXに移行していないプロジェクトでGoogle Play Services 15.0.0以降 ``` implementation 'com.google.android.gms:play-services-base:16.1.0' implementation 'com.google.android.gms:play-services-ads:17.2.0' ```
Google Play Services 12.0.1以前をご利用のかた Google Play Services 12.0.1以前 ``` implementation 'com.google.android.gms:play-services-base:+' ```
### 4. 広告表示を実装する 広告を配置するViewを作成します。以下の例では下部中央を指定しています。 レイアウトサイズは広告のサイズに合わせて設定してください。 ![レイアウトサイズは広告のサイズに合わせて設定](/img/sdk_android_img006.png) ``` ``` Activityに以下のように実装します。 :::note[AdFrameSize.Free のサイズ指定] `AdFrameSize.Free` を使用する場合は、`ADG.AdFrameSize.FREE.setSize(width, height)` でサイズを指定してください。 ::: ```java import com.socdm.d.adgeneration.ADG import com.socdm.d.adgeneration.ADGConsts import com.socdm.d.adgeneration.ADGListener class MainActivity : AppCompatActivity() { private lateinit var adg: ADG override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // デバッグログ出力設定。リリース時は[必ず]falseにしてください ADGSettings.setDebugLogging(true) adg = ADG(this).apply { // 管理画面から払い出された広告枠ID locationId = "48547" // Listenerの設定 adListener = AdListener() // リリース時は[必ず]falseにしてください isTestModeEnabled = true } /** * 枠サイズ * AdFrameSize.SP:320x50, AdFrameSize.Large:320x100, * AdFrameSize.Rect:300x250, AdFrameSize.Tablet:728x90, * AdFrameSize.Free:自由設定 */ adg.setAdFrameSize(ADG.AdFrameSize.SP) // 配置 val adContainer = findViewById(R.id.ad_container) adContainer.addView(adg) } override fun onResume() { super.onResume() // 広告の表示 adg.start() } override fun onPause() { // 広告の破棄 adg.stop() super.onPause() } internal inner class AdListener : ADGListener() { override fun onReceiveAd() { } override fun onFailedToReceiveAd(code: ADGConsts.ADGErrorCode) { // ネットワーク不通/エラー多発/広告レスポンスなし 以外はリトライしてください when (code) { ADGConsts.ADGErrorCode.EXCEED_LIMIT, ADGConsts.ADGErrorCode.NEED_CONNECTION, ADGConsts.ADGErrorCode.NO_AD -> {} else -> adg.start() } } override fun onClickAd() { } } } ``` ```java import com.socdm.d.adgeneration.ADG; import com.socdm.d.adgeneration.ADGConsts; import com.socdm.d.adgeneration.ADGListener; public class MainActivity extends AppCompatActivity {å private ADG adg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // デバッグログ出力設定。リリース時は[必ず]falseにしてください ADGSettings.setDebugLogging(true); adg = new ADG(this); // 管理画面から払い出された広告枠ID adg.setLocationId("48547"); // Listenerの設定 adg.setAdListener(new AdListener()); // リリース時は[必ず]falseにしてください adg.setTestModeEnabled(true); /** * 枠サイズ * AdFrameSize.SP:320x50, AdFrameSize.Large:320x100, * AdFrameSize.Rect:300x250, AdFrameSize.Tablet:728x90, * AdFrameSize.Free:自由設定 */ adg.setAdFrameSize(ADG.AdFrameSize.SP); // 配置 FrameLayout adContainer = (FrameLayout) findViewById(R.id.ad_container); adContainer.addView(adg); } @Override protected void onResume() { super.onResume(); if (adg != null) { // 広告の表示 adg.start(); } } @Override protected void onPause() { if (adg != null) { // 広告の破棄 adg.stop(); } super.onPause(); } class AdListener extends ADGListener { @Override public void onReceiveAd() { } @Override public void onFailedToReceiveAd(ADGConsts.ADGErrorCode code) { // ネットワーク不通/エラー多発/広告レスポンスなし 以外はリトライしてください switch (code) { case EXCEED_LIMIT: // エラー多発 case NEED_CONNECTION: // ネットワーク不通 case NO_AD: // 広告レスポンスなし break; default: if (adg != null) { adg.start(); } break; } } @Override public void onClickAd() { } } } ``` ### App Content URLの設定 **ADG Android SDK v2.41.0** 以降で対応しています。 アプリの主要コンテンツに一致するウェブサイトURLを設定できます。設定したURLは、コンテンツターゲティングのために広告リクエストの `atp` パラメータとして付与されます。 `ADG#setContentUrl` メソッドで、広告リクエスト(`ADG#start`)の前に設定します。 ```java adg.setContentUrl("https://www.example.com/contents") ``` ```java adg.setContentUrl("https://www.example.com/contents"); ``` **仕様** - URLの長さの上限は512 UTF-16 code unitです。前後の空白・改行を除去(trim)した後の長さで判定されます。 - 上限を超過した場合、`atp` パラメータは送信されず、エラーレベルのログが出力されます。広告のロード自体はブロックされません。 - 未設定の場合、`atp` パラメータは送信されません。 - AdMobメディエーションを利用している場合、設定値はAdMobのコンテンツ マッピングにも使用されます(上限を超過した値はアドネットワークSDKへは渡されません)。詳細は[AdMobアダプター(メディエーション)](/ad-generation/mediation/admobadapter_android_manual)を参照してください。 ### 注意事項 - `Activity#onResume` メソッドで `ADG#start` メソッドを呼び、 `Activity#onPause `メソッドで `ADG#stop` メソッドを呼んでください。 - v2.26.2から `ADG#pause` メソッドは非推奨になりました。代わりに `ADG#stop` メソッドを使用してください。 - v2.26.2から `ADG#resumeRefreshTimer` メソッドは非推奨になりました。代わりに `ADG#start` メソッドを使用してください。 - v2.26.2から `ADG#setEnableTestMode` メソッドは非推奨になりました。代わりにテストモードを有効にするときは `ADG#setTestModeEnabled` メソッドを使用してください。また、デバッグログを出力する場合は `ADGSettings.setDebugLogging` メソッドを使用してください。 - v2.26.2から `ADG#isEnableTestMode` メソッドは非推奨になりました。代わりに `ADG#isTestModeEnabled` メソッドを使用してください。 ### 各メソッドの仕様やオプションについて [Androidリファレンス](/ad-generation/api-reference/reference_android)をご参照ください。 ### Listenerについて **広告受信** ``` override fun onReceiveAd() ``` ``` public void onReceiveAd() ``` KotlinJava SDKからの広告リクエストが成功したタイミングで呼び出されます。 また、ローテーションによる広告取得成功の際にも呼び出されます。 **広告受信失敗** ``` override fun onFailedToReceiveAd(code: ADGConsts.ADGErrorCode) ``` ``` public void onFailedToReceiveAd(ADGErrorCode code) ``` SDKからの広告リクエストが失敗した場合に呼び出されます。 エラーコードは下記の通りです。 |コード|説明| |----|----| |UNKNOWN|不明なエラーが発生しました。| |COMMUNICATION_ERROR|アドサーバー間通信/連携しているアドネットワークSDKとの接続等でエラーが発生しました。| |RECEIVED_FILLER|白板検知されました。| |NO_AD|接続先アドネットワークすべて広告在庫切れが返却されました。| |NEED_CONNECTION|デバイスがネットワークに接続されていません。| |EXCEED_LIMIT|エラー回数が上限に達しました。| |TEMPLATE_FAILED|サイズ指定の誤りなどの要因により広告の形成に失敗しました。| **広告タップ** ``` override fun onClickAd() ``` ``` public void onClickAd() ``` 広告がタップされた際に呼び出されます。 (ブラウザやストア起動の成否は問いません) ### 5. proguardの設定をする SDKを導入したアプリを難読化する際は以下の設定値をproguardの設定ファイルに追加してください。 ``` -keep public class com.socdm.d.adgeneration.** { *; } -keep public interface com.socdm.d.adgeneration.** { *; } ``` #### 注意事項 **審査完了前の稼働確認について** 審査完了前に広告の掲載イメージをご確認頂く際は、以下のIDに置き換えご確認ください。 このIDをセットしたままアプリをリリースしないようご注意ください。 |サイズ|テストID|配信広告| |----|----|----| |320×50|48547|テスト広告| |320×100|48548|テスト広告| |300×250|48549|テスト広告| |728×90|48550|テスト広告| **位置情報の扱いについて** 詳しくはこちらを御覧ください。 「[iOS/Android 位置情報の扱いについて](/ad-generation/other/location)」 --- ## Android実装 Ad Generation Android SDKの実装方法についてのガイド ---- このページではAndroidアプリへのAd Generation SDK実装方法について説明します。 ## 実装ガイド - [Android SDK Getting Started / バナー広告](/ad-generation/platforms/android/banner_ad_android) - [Android SDK Getting Started / ネイティブ広告](/ad-generation/platforms/android/native_ad_android) - [ワイプアド](/ad-generation/platforms/android/wipe_ad_android) - [ワイプアド リファレンス](/ad-generation/platforms/android/wipead_reference_android) ## Android対応情報 - [targetSDKVersionが28以上のアプリでビルドする場合のAndroid HTTP通信ブロック対応](/ad-generation/other/android_http_block) - [targetSDKVersionが31以上のアプリでビルドする場合の対応について](/ad-generation/other/android_targetsdkversion_31) --- ## Android SDK Getting Started / ネイティブ広告 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # Android SDK Getting Started / ネイティブ広告 ## はじめに 開発環境としてAndroid Studioを利用し、インストール後の各種設定は準備されていることを前提にした手順となります。 ### 対応バージョン - Android 6.0以降(API Level 23) ### 導入の流れ 1. SDKをダウンロードします 2. プロジェクトにSDKを追加します 3. AndroidManifest.xmlの設定を行います 4. Google Play Servicesの設定を行います 5. 例を参考に広告表示の実装を行います 6. proguardの設定を行います ## 1. SDKをダウンロードする ~ 4. Google Play Servicesを設定する [Android SDK Getting Started / バナー広告](/ad-generation/platforms/android/banner_ad_android)からご確認ください。 ## 5. 広告表示を実装する `start()`を行う前に、ネイティブ広告オブジェクトをdelegateメソッドで取得するための`setUsePartsResponse()`の設定を行います。 ネイティブ広告オブジェクトが取得できた場合、Listenerメソッドの以下が呼び出されます: ```java override fun onReceiveAd(nativeAd: Any) ``` ```java public void onReceiveAd(Object nativeAd) ``` `nativeAd`からネイティブ広告オブジェクトが取得できます。 ネイティブ広告オブジェクトは`com.socdm.d.adgeneration.nativead.ADGNativeAd`クラスです。 Object型から`ADGNativeAd`へキャストし、クラス判定を行ってからアクセスしてください。 `ADGNativeAd`からネイティブ広告パーツを取得するメソッドは以下の通りです。 | 要素名 | メソッド | |--------|----------| | タイトル | `ADGNativeAd.getTitle().getText()` | | メイン画像(長方形画像)URL | `ADGNativeAd.getMainImage().getUrl()` | | メイン画像(長方形画像)幅 | `ADGNativeAd.getMainImage().getWidth()` | | メイン画像(長方形画像)高さ | `ADGNativeAd.getMainImage().getHeight()` | | アイコン画像(正方形画像)URL | `ADGNativeAd.getIconImage().getUrl()` | | アイコン画像(正方形画像)幅 | `ADGNativeAd.getIconImage().getWidth()` | | アイコン画像(正方形画像)高さ | `ADGNativeAd.getIconImage().getHeight()` | | リード文 | `ADGNativeAd.getDesc().getValue()` | | CTA(Call to action)のテキスト | `ADGNativeAd.getCtatext().getValue()` | | 広告主 | `ADGNativeAd.getSponsored().getValue()` | ### 実装例 ```java class MainActivity : AppCompatActivity() { private lateinit var adg: ADG private lateinit var adContainer: FrameLayout override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) // デバッグログ出力設定。リリース時は[必ず]falseにしてください ADGSettings.setDebugLogging(true) adg = ADG(this).apply { // 管理画面から払い出された広告枠ID locationId = "48635" // Listenerの設定 adListener = AdListener() // リリース時は[必ず]falseにしてください isTestModeEnabled = true layoutParams = FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT) } /** * 枠サイズ * AdFrameSize.SP:320x50, AdFrameSize.Large:320x100, * AdFrameSize.Rect:300x250, AdFrameSize.Tablet:728x90, * AdFrameSize.Free:自由設定 */ adg.setAdFrameSize(ADG.AdFrameSize.FREE.setSize(300, 250)) // ネイティブ広告パーツ取得を有効 adg.setUsePartsResponse(true) // インフォメーションアイコンのデフォルト表示 // デフォルト表示しない場合は必ずADGInformationIconViewの設置を実装してください adg.setInformationIconViewDefault(false) // HTMLテンプレートを使用したネイティブ広告を表示のためにはaddViewする必要があります adContainer = findViewById(R.id.ad_container) adContainer.addView(adg) } override fun onResume() { super.onResume() // 広告の表示 adg.start() } override fun onPause() { // 広告の破棄 adg.stop() super.onPause() } internal inner class AdListener : ADGListener() { override fun onReceiveAd() { } override fun onReceiveAd(nativeAd: Any) { if (nativeAd is ADGNativeAd) { val nativeAdView = ADGNativeAdView(this@MainActivity) nativeAdView.apply(nativeAd) // ローテーション時に自動的にViewを削除します adg.setAutomaticallyRemoveOnReload(nativeAdView) adContainer.addView(nativeAdView, FrameLayout.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT) ) } } override fun onFailedToReceiveAd(code: ADGConsts.ADGErrorCode) { // ネットワーク不通/エラー多発/広告レスポンスなし 以外はリトライしてください when (code) { ADGConsts.ADGErrorCode.EXCEED_LIMIT, ADGConsts.ADGErrorCode.NEED_CONNECTION, ADGConsts.ADGErrorCode.NO_AD -> {} else -> adg.start() } } } } ``` ```java public class MainActivity extends AppCompatActivity { private FrameLayout adContainer; private ADG adg; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // デバッグログ出力設定。リリース時は[必ず]falseにしてください ADGSettings.setDebugLogging(true); adg = new ADG(this); // 管理画面から払い出された広告枠ID adg.setLocationId("48635"); // Listenerの設定 adg.setAdListener(new AdListener()); // リリース時は[必ず]falseにしてください adg.setTestModeEnabled(true); adg.setLayoutParams(new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT) ); /** * 枠サイズ * AdFrameSize.SP:320x50, AdFrameSize.Large:320x100, * AdFrameSize.Rect:300x250, AdFrameSize.Tablet:728x90, * AdFrameSize.Free:自由設定 */ adg.setAdFrameSize(ADG.AdFrameSize.FREE.setSize(300, 250)); // ネイティブ広告パーツ取得を有効 adg.setUsePartsResponse(true); // インフォメーションアイコンのデフォルト表示 // デフォルト表示しない場合は必ずADGInformationIconViewの設置を実装してください adg.setInformationIconViewDefault(false); // HTMLテンプレートを使用したネイティブ広告を表示のためにはaddViewする必要があります adContainer = (FrameLayout) findViewById(R.id.ad_container); adContainer.addView(adg); } @Override protected void onResume() { super.onResume(); if (adg != null) { // 広告の表示 adg.start(); } } @Override protected void onPause() { if (adg != null) { // 広告の破棄 adg.stop(); } super.onPause(); } class AdListener extends ADGListener { @Override public void onReceiveAd() { } @Override public void onReceiveAd(Object nativeAd) { if (nativeAd instanceof ADGNativeAd) { ADGNativeAdView nativeAdView = new ADGNativeAdView(MainActivity.this); nativeAdView.apply((ADGNativeAd) nativeAd); // ローテーション時に自動的にViewを削除します adg.setAutomaticallyRemoveOnReload(nativeAdView); adContainer.addView(nativeAdView, new FrameLayout.LayoutParams( FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT) ); } } @Override public void onFailedToReceiveAd(ADGConsts.ADGErrorCode code) { // ネットワーク不通/エラー多発/広告レスポンスなし 以外はリトライしてください switch (code) { case EXCEED_LIMIT: // エラー多発 case NEED_CONNECTION: // ネットワーク不通 case NO_AD: // 広告レスポンスなし break; default: if (adg != null) { adg.start(); } break; } } } } ``` リトライの目安: |リトライの目安|エラーコード| |---|---| |リトライ不要|`EXCEED_LIMIT` / `NEED_CONNECTION` / `NO_AD`| |リトライ可|上記以外| :::note[補足] ADGクラスを利用している場合、`ADG.stop()` の実行時に `ADGNativeAd.stop()` も内部で実行されます。`ADGNativeAd` を直接管理する場合のみ `ADGNativeAd.stop()` を明示的に呼んでください。 ::: > 注意: サンプル内の `DownloadImageAsync` は `AsyncTask` を使用していますが、API Level 30 で非推奨です。実運用では Kotlin Coroutines / Executors / 画像ライブラリ(Glide, Coil, Picasso など)の利用を推奨します。 **ネイティブ広告デザイン例** - 作成される広告イメージ ![作成される広告イメージ](/img/sdk_android_img003.9d937655.png) - アプリに応じてカスタマイズください(画像ロード処理の非同期化など)。 - レイアウトファイルは [サンプル](https://github.com/AdGeneration/ADG-Android-SDK/tree/master/Samples) を参照してください。 ```java class ADGNativeAdView : RelativeLayout { private var activity: Activity? = null private lateinit var container: RelativeLayout private lateinit var iconImageView: ImageView private lateinit var titleLabel: TextView private lateinit var descLabel: TextView private lateinit var mediaViewContainer: FrameLayout private lateinit var sponsoredLabel: TextView private lateinit var CTALabel: TextView constructor(context: Context) : this(context, null) constructor(context: Context, attrs: AttributeSet?) : this(context, attrs, 0) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { init(context, attrs, defStyleAttr, 0) } @TargetApi(21) constructor(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) : super(context, attrs, defStyleAttr, defStyleRes) { init(context, attrs, defStyleAttr, defStyleRes) } private fun init(context: Context, attrs: AttributeSet?, defStyleAttr: Int, defStyleRes: Int) { if (context is Activity) { activity = context } val layout = LayoutInflater.from(context).inflate(R.layout.adg_nativead_view, this) container = layout.findViewById(R.id.adg_nativead_view_container) iconImageView = layout.findViewById(R.id.adg_nativead_view_icon) titleLabel = layout.findViewById(R.id.adg_nativead_view_title) titleLabel.text = "" descLabel = layout.findViewById(R.id.adg_nativead_view_desc) descLabel.text = "" mediaViewContainer = layout.findViewById(R.id.adg_nativead_view_mediaview_container) sponsoredLabel = layout.findViewById(R.id.adg_nativead_view_sponsored) CTALabel = layout.findViewById(R.id.adg_nativead_view_cta) CTALabel.text = "" val borders = GradientDrawable().apply { setColor(Color.WHITE) cornerRadius = 10f setStroke(3, CTALabel.textColors.defaultColor) } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { CTALabel.background = borders } else { CTALabel.setBackgroundDrawable(borders) } } fun apply(nativeAd: ADGNativeAd) { nativeAd.iconImage?.url?.let { DownloadImageAsync(iconImageView).execute(it) } nativeAd.title?.text?.let { titleLabel.text = it } nativeAd.desc?.value?.let { descLabel.text = it } if (nativeAd.canLoadMedia()) { val mediaView = ADGMediaView(activity) mediaView.setAdgNativeAd(nativeAd) mediaViewContainer.addView(mediaView, LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)) mediaView.load() } val infoIcon = ADGInformationIconView.create(context, nativeAd) if (infoIcon != null) { mediaViewContainer.addView(infoIcon) } sponsoredLabel.text = nativeAd.sponsored?.value ?: "sponsored" CTALabel.text = nativeAd.ctatext?.value ?: "詳しくはこちら" nativeAd.setClickEvent(context, container, null) } private inner class DownloadImageAsync(private val imageView: ImageView) : AsyncTask() { override fun doInBackground(vararg params: String): Bitmap? { return try { val imageUrl = params[0] BitmapFactory.decodeStream(URL(imageUrl).openStream()) } catch (e: Exception) { Log.e("Error", e.message.orEmpty()) e.printStackTrace() null } } override fun onPostExecute(bitmap: Bitmap?) { imageView.setImageBitmap(bitmap) } } } ``` ```java public class ADGNativeAdView extends RelativeLayout { private Activity mActivity; private RelativeLayout mContainer; private ImageView mIconImageView; private TextView mTitleLabel; private TextView mDescLabel; private FrameLayout mMediaViewContainer; private TextView mSponsoredLabel; private TextView mCTALabel; public ADGNativeAdView(Context context) { this(context, null); } public ADGNativeAdView(Context context, AttributeSet attrs) { this(context, attrs, 0); } public ADGNativeAdView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); init(context, attrs, defStyleAttr, 0); } @TargetApi(21) public ADGNativeAdView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); init(context, attrs, defStyleAttr, 0); } private void init(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { if (context instanceof Activity) { mActivity = (Activity)context; } View layout = LayoutInflater.from(context).inflate(R.layout.adg_nativead_view, this); mContainer = (RelativeLayout) layout.findViewById(R.id.adg_nativead_view_container); mIconImageView = (ImageView) layout.findViewById(R.id.adg_nativead_view_icon); mTitleLabel = (TextView) layout.findViewById(R.id.adg_nativead_view_title); mTitleLabel.setText(""); mDescLabel = (TextView) layout.findViewById(R.id.adg_nativead_view_desc); mDescLabel.setText(""); mMediaViewContainer = (FrameLayout) layout.findViewById(R.id.adg_nativead_view_mediaview_container); mSponsoredLabel = (TextView) layout.findViewById(R.id.adg_nativead_view_sponsored); mCTALabel = (TextView) layout.findViewById(R.id.adg_nativead_view_cta); mCTALabel.setText(""); GradientDrawable borders = new GradientDrawable(); borders.setColor(Color.WHITE); borders.setCornerRadius(10); borders.setStroke(3, mCTALabel.getTextColors().getDefaultColor()); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) { mCTALabel.setBackground(borders); } else { mCTALabel.setBackgroundDrawable(borders); } } public void apply(ADGNativeAd nativeAd) { // アイコン画像 if (nativeAd.getIconImage() != null) { String url = nativeAd.getIconImage().getUrl(); new DownloadImageAsync(mIconImageView).execute(url); } // タイトル if (nativeAd.getTitle() != null) { mTitleLabel.setText(nativeAd.getTitle().getText()); } // リード文 if (nativeAd.getDesc() != null) { String desc = nativeAd.getDesc().getValue(); mDescLabel.setText(desc); } // メイン画像・動画 if (nativeAd.canLoadMedia()) { ADGMediaView mediaView = new ADGMediaView(mActivity); mediaView.setAdgNativeAd(nativeAd); mMediaViewContainer.addView(mediaView, new LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); mediaView.load(); } // インフォメーションアイコン ADGInformationIconView infoIcon = ADGInformationIconView.create(getContext(), nativeAd); if (infoIcon != null) { mMediaViewContainer.addView(infoIcon); } // 広告主 if (nativeAd.getSponsored() != null) { mSponsoredLabel.setText(nativeAd.getSponsored().getValue()); } else { mSponsoredLabel.setText("sponsored"); } // CTA if (nativeAd.getCtatext() != null) { mCTALabel.setText(nativeAd.getCtatext().getValue()); } else { mCTALabel.setText("詳しくはこちら"); } // クリックイベント nativeAd.setClickEvent(getContext(), mContainer, null); } /** * 画像をロードします(方法については任意で行ってください) */ private class DownloadImageAsync extends AsyncTask { private ImageView imageView; public DownloadImageAsync(ImageView imageView) { this.imageView = imageView; } @Override protected Bitmap doInBackground(String... params) { try { String imageUrl = params[0]; return BitmapFactory.decodeStream(new URL(imageUrl).openStream()); } catch (Exception e) { Log.e("Error", e.getMessage()); e.printStackTrace(); } return null; } @Override protected void onPostExecute(Bitmap bitmap) { this.imageView.setImageBitmap(bitmap); } } } ``` ### 注意事項 - `Activity#onResume` メソッドで `ADG#start` メソッドを呼び、 `Activity#onPause` メソッドで `ADG#stop` メソッドを呼んでください。 - v2.26.2から `ADG#pause` メソッドは非推奨になりました。代わりに `ADG#stop `メソッドを使用してください。 - v2.26.2から `ADG#resumeRefreshTimer` メソッドは非推奨になりました。代わりに `ADG#start` メソッドを使用してください。 - v2.26.2から `ADG#setEnableTestMode` メソッドは非推奨になりました。代わりにテストモードを有効にするときは `ADG#setTestModeEnabled` メソッドを使用してください。また、デバッグログを出力する場合は `ADGSettings.setDebugLogging` メソッドを使用してください。 - v2.26.2から `ADG#isEnableTestMode` メソッドは非推奨になりました。代わりに `ADG#isTestModeEnabled` メソッドを使用してください。 - v2.8.0から `ADG#delegateViewManagement` は非推奨となりました。 - 代わりに `ADGNativeAd#setClickEvent(Context context, View view, ADGNativeAdOnClickListener listener)` および `ADG#setAutomaticallyRemoveOnReload(View view)` を使用してください。 - stopを呼び出したタイミングにて、setAutomaticallyRemoveOnReloadにセットされたViewインスタンスは、親ViewからのremoveViewが呼ばれます。 - テストではタップの確認も行ってください。 - 画像のロードはアプリ側で実装する必要があります。 - ADGクラスは1つの広告枠に対して1つのインスタンスを生成してください。 - **広告枠の設定によっては各ネイティブ広告オブジェクトのパラメーターの値がnullになる場合があります。** たとえば、GunosyAdsではCTA取得できません。接続先アドネットワーク毎に違いがございますので、nullを考慮した実装をお願いいたします。画像の縦横サイズも含め、すべてがoptionalな値です。 - PR表記をつける等して広告であることを示してください。 - **画像は、アスペクト比を変えず、切れることのないようしてください。** **(ImageViewのscaleTypeをFIT_CENTERに設定)** - レスポンスにSponsoredがある場合はできる限り表示をしてください。(特定のアドネットワークではSponsoredの表示要望がございます) ### インフォメーションアイコン(オプトアウトリンク)について **※ 2016/12/8(v2.4.2)より必須項目となりました** v2.4.2より、インフォメーションアイコン(オプトアウトリンク)はデフォルトで表示されるようになります。 インフォメーションアイコンはタップすることで、DSP事業者が指定したオプトアウトWebサイトページへ遷移します。 オプトアウトリンクはユーザーが広告のターゲティングをオプトアウト(拒否)することにより、ユーザーに関する情報の関連付けを防ぐことを可能とし、設置することで配信できるDSP事業者が増加します。 表示される場所は、`setClickEvent(Context context, View view, ADGNativeAdOnClickListener listener)`で指定したViewの右上に設置されます。 デフォルトの表示位置から変更する場合は、`ADG.setInformationIconViewDefault(boolean b)`を設定し、`ADGInformationIconView`を生成してください。 `getOptout()` / `getInformationIcon()` / `getAccompany()` のいずれかが取得できない場合は、`ADGInformationIconView` を生成してもアイコンは表示されません。 インフォメーションアイコンの表示確認は、テストID`48635`を使用してください。 #### インフォメーションアイコンの表示位置・スタイル `ADGInformationIconView` は以下のオプションを指定できます。 |オプション|説明| |---|---| |`Corner`|`TOP_LEFT`, `TOP_RIGHT`, `BOTTOM_LEFT`, `BOTTOM_RIGHT`| |`BackgroundType`|`WHITE`, `BLACK`| |`expandable`|展開アニメーションの有効/無効| ```kotlin ADGInformationIconView.create( context: Context, nativeAd: ADGNativeAd, expandable: Boolean, corner: Corner, backgroundType: BackgroundType ) ``` ```kotlin // シンプル版 ADGInformationIconView.create( context: Context, nativeAd: ADGNativeAd ) ``` ```java ADGInformationIconView.create( Context context, ADGNativeAd nativeAd, boolean expandable, Corner corner, BackgroundType backgroundType ) ``` ```java // シンプル版 ADGInformationIconView.create( Context context, ADGNativeAd nativeAd ) ``` ### 動画広告の実装について(Android: v2.9.0~(adg-2.9.0.aar)) ADGMediaViewを利用することで、動画広告を配置できます。 ```java // メイン画像または動画が利用できるかどうかをチェックします。 if (nativeAd.canLoadMedia()) { // ADGMediaViewを生成します。 ADGMediaView mediaView = new ADGMediaView(mActivity); // 必ずADGNativeAdの参照を追加してください。 mediaView.setAdgNativeAd(nativeAd); // Viewを配置します。 mMediaViewContainer.addView(mediaView, new LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT)); // メイン画像または動画のロードを開始します。 mediaView.load(); // 不要になったタイミングでdestroyを呼び、破棄処理をおこなってください。 // mediaView.destroy(); } ``` **ADGMediaView注意事項** - 動画を再生するにはコンストラクタの引数にActivityを渡してください。 - 動画と静止画が利用できる場合は、動画が優先されます。 - 動画や静止画は配信案件によるため、必ずしも配信されるわけではありません。 - android:hardwareAccelerated がfalseの場合はtrueにしてください。 - とくに、複数の動画を配置する場合や、アプリ側でMediaPlayerを扱い、動画や音声を再生している場合、不要になったものから destroy を呼びだし、適宜破棄を行う必要があります。 破棄されないままMediaPlayerの生成を繰り返すとクラッシュを引き起こす場合があります。 ### テスト用ID 審査完了前に広告の掲載イメージをご確認頂く際は、以下のIDに置き換えご確認ください。 このIDをセットしたままアプリをリリースしないようご注意ください。 |テストID |配信広告| |----|----| |48635 |テスト広告| ## 6. proguardの設定をする [Android SDK Getting Started / バナー広告](/ad-generation/platforms/android/banner_ad_android)からご確認ください。 --- ## ワイプアド Android import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # ワイプアド(Android) ![ワイプアド広告のサンプル画像](/img/wipe/wipead_android1.png) ![ワイプアド広告のサンプル画像](/img/wipe/wipead_android2.png) アプリの画面上に、ワイプのように動画広告を表示するフォーマットになります。 表示の初期位置は画面上の四隅(右上,右下,左上,左下)をお選びいただき、 アプリの配色にあわせて、Light/Darkのテーマをご指定いただけます。 :::warning[非推奨] ワイプアドは SDK 側で非推奨(Deprecated)となっています。 既存の実装は引き続きご利用いただけますが、新規での実装は推奨しておりません。 ::: ## サイズ仕様について 表示サイズについては横幅のみ任意の数値をご指定いただけますが、視認性確保のために、サイズについて上限と下限が定められております。 基本的に400(dp)などの大きな値を横幅としてご指定いただき、最大サイズ(デフォルト)で表示いただくことを想定しておりますが、 アプリ状況により細かくサイズをご指定いただく必要がある場合は、下記の最大サイズ〜最小サイズの範囲内でご指定ください。 ### 最大サイズ(デフォルト) 表示対象の画面高さと横幅を比較し、以下のルールで最大値を計算します。 - `画面の高さ` < `画面の横幅` の場合: 高さの 35% を基準に 16:9 比率で横幅を算出 - `画面の高さ` > `画面の横幅` の場合: 横幅の 53% を基準に 16:9 比率で高さを算出 最大サイズより大きい横幅を指定した場合は、上記ルールに基づきリサイズされます。 ### 最小サイズ 最小横幅は 135dp です。指定値が 135dp を下回る場合は最小サイズにリサイズされます。 ## 表示の初期位置について 画面上の四隅(右上,右下,左上,左下)をお選びいただくことが可能です。 Androidはデフォルトで右上に配置されます。 アプリ状況により、表示位置をずらしたい場合、マージンの値をご指定いただくことで、 `右上` または `左上` をお選びいただいた場合は、ワイプアドに対してトップマージンが追加されます。 `右下` または `左下` をお選びいただいた場合は、ワイプアドに対してボトムマージンが追加されます。 ## 対応 SDK - Ad Generation SDK - Android v2.19.0 以降 ## 対応バージョン - Android 6.0 以降 ## SDK 実装について ADGWipeクラスのインスタンスを生成し、事前に `preload()` メソッドをコールいただき、広告をロードしてください。 正常にロード完了した場合、 `Android : onReceiveAd()` のコールバックがおこなわれますので、 その後は任意のタイミングで `show()` メソッドをコールいただき、広告の表示をおこなってください。 ロード完了後、即時表示をおこないたい場合は、 `Android : onReceiveAd()` のコールバック内に `show()` メソッドをコールいただくように記述してください。 :::tip[API Reference] - [Android リファレンス](/ad-generation/platforms/android/wipead_reference_android) ::: ### build.gradle Kotlin 依存が存在しないプロジェクトでは、`dependencies` に以下を追加してください。 ```gradle implementation "org.jetbrains.kotlin:kotlin-stdlib:$latest_version" ``` ```kotlin import com.socdm.d.adgeneration.wipe.ADGWipe import com.socdm.d.adgeneration.ADGConsts.ADGErrorCode import com.socdm.d.adgeneration.wipe.ADGWipeListener class MainActivity : AppCompatActivity() { private var adgWipe: ADGWipe? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) adgWipe = ADGWipe(this).apply { // 広告枠IDをセットしてください setLocationId(adid) // Listenerをセットしてください setAdListener(AdListener()) // テストモードをONにする場合は有効化してください // ※リリース時は必ずfalse or コメントアウトしてください setEnableTestMode(true) // 広告のプリロード preload() } } override fun onStop() { // ワイプアドを破棄する adgWipe?.dismiss() super.onStop() } // android:configChanges属性に値を設定している場合は構成変更を通知してください override fun onConfigurationChanged(newConfig: Configuration) { super.onConfigurationChanged(newConfig) adgWipe?.configurationChanged(newConfig) } internal inner class AdListener : ADGWipeListener() { override fun onReceiveAd() { Log.d(TAG, "Received an ad.") // 広告表示 adgWipe?.show() } override fun onCloseWipe() { Log.d(TAG, "Closed wipe ads.") } override fun onFailedToReceiveAd(code: ADGErrorCode) { Log.d(TAG, "Failed to receive an ad.") when (code) { ADGErrorCode.EXCEED_LIMIT, ADGErrorCode.NEED_CONNECTION, ADGErrorCode.NO_AD -> return else -> return } } override fun onClickAd() { Log.d(TAG, "Did click ad.") } } } ``` ```java import com.socdm.d.adgeneration.wipe.ADGWipe; import com.socdm.d.adgeneration.ADGConsts.ADGErrorCode; import com.socdm.d.adgeneration.wipe.ADGWipeListener; public class MainActivity extends AppCompatActivity { private ADGWipe adgWipe; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.activity_main); adgWipe = new ADGWipe(this); // 広告枠IDをセットしてください adgWipe.setLocationId(adid); // Listenerの設定 adgWipe.setAdListener(new AdListener()); // テストモードをONにする場合は有効化してください // ※リリース時は必ずfalse or コメントアウトしてください adgWipe.setEnableTestMode(true); // 広告のプリロード adgWipe.preload(); } @Override protected void onStop() { super.onStop(); if (adgWipe != null) { // ワイプアドを破棄する adgWipe.dismiss(); } } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); if (adgWipe != null) { // android:configChanges属性を指定している場合は構成変更を通知 adgWipe.configurationChanged(newConfig); } } class AdListener extends ADGWipeListener { @Override public void onReceiveAd() { Log.d(TAG, "Received an ad."); if (adgWipe != null) { // 広告表示 adgWipe.show(); } } @Override public void onFailedToReceiveAd(ADGErrorCode code) { Log.d(TAG, "Failed to receive an ad."); // ネットワーク不通/エラー多発/広告レスポンスなし以外はリトライしてください switch (code) { case EXCEED_LIMIT: // エラー多発 case NEED_CONNECTION: // ネットワーク不通 case NO_AD: // 広告レスポンスなし break; default: break; } } @Override public void onClickAd() { Log.d(TAG, "Did click ad."); } @Override public void onCloseWipe() { Log.d(TAG, "on Close Wipe."); } } } ``` --- ## ワイプアド API リファレンス(Android) # ワイプアド Android リファレンス :::warning[非推奨] ADGWipe / ADGWipeListener は SDK 側で非推奨(Deprecated)です。 既存の実装は引き続きご利用いただけますが、新規での実装は推奨しておりません。 ::: ## ADGWipeTheme フレーム/フレーム内テキスト/クローズボタンのテーマを選択します。 - `LIGHT`: フレーム(薄グレー)/ テキスト(黒)/ クローズボタン(黒地白抜き) - `DARK`: フレーム(濃グレー)/ テキスト(白)/ クローズボタン(白フチ+黒地白抜き) ## ADGWipePosition フレームの初期表示位置を選択します。 - `TOP_RIGHT`: 右上 - `BOTTOM_RIGHT`: 右下 - `TOP_LEFT`: 左上 - `BOTTOM_LEFT`: 左下 ## ADGWipe クラス ### コンストラクタ #### `ADGWipe(Context ct)` ```java public ADGWipe(Context ct) ``` |Parameter|Description| |:---|:---| |`ct`|広告を表示する画面の Activity| ### プロパティ #### `isShow` ```java public boolean isShow ``` ワイプアドが現在表示中かどうかを示します。 #### `isReady` ```java public boolean isReady ``` 広告のロードが完了し、表示可能な状態かどうかを示します。 ### 主なメソッド #### `setActivity()` ```java public void setActivity(Context ct) ``` |Parameter|Description| |:---|:---| |`ct`|広告を表示する画面の Activity| --- #### `setAdListener()` ```java public void setAdListener(ADGWipeListener listener) ``` |Parameter|Description| |:---|:---| |`listener`|`ADGWipeListener`| --- #### `setInitialMarginHeight()` ワイプアドの初期表示位置に対してマージンを追加します。 `setPosition()` で指定した位置(TOP_RIGHT 等)を基準に、上または下方向へオフセットします。 ```java public void setInitialMarginHeight(int margin) ``` |Parameter|Description| |:---|:---| |`margin`|初期表示位置に対する追加マージン(dp)| --- #### `setMarginTop()` ワイプアドの上側マージンを設定します。 設定後、即座に表示位置が更新されます。 ```java public void setMarginTop(int margin) ``` |Parameter|Description| |:---|:---| |`margin`|上側マージン(dp)| --- #### `setMarginBottom()` ワイプアドの下側マージンを設定します。 設定後、即座に表示位置が更新されます。 ```java public void setMarginBottom(int margin) ``` |Parameter|Description| |:---|:---| |`margin`|下側マージン(dp)| --- #### `setPosition()` ```java public void setPosition(ADGWipePosition position) ``` |Parameter|Description| |:---|:---| |`position`|`TOP_RIGHT / BOTTOM_RIGHT / TOP_LEFT / BOTTOM_LEFT`| --- #### `setWipeViewTheme()` ```java public void setWipeViewTheme(ADGWipeTheme theme) ``` `LIGHT`: フレーム(薄グレー)/ テキスト(黒)/ クローズボタン(黒地白抜き) `DARK`: フレーム(濃グレー)/ テキスト(白)/ クローズボタン(白フチ+黒地白抜き) |Parameter|Description| |:---|:---| |`theme`|`LIGHT / DARK`| --- #### `setFrameColorTheme()` ```java public void setFrameColorTheme(ADGWipeTheme theme) ``` |Parameter|Description| |:---|:---| |`theme`|`LIGHT`: 薄いグレー / `DARK`: 濃いグレー| --- #### `setFrameColor()` ```java public void setFrameColor(int color) public void setFrameColor(int color, int alpha) ``` |Parameter|Description| |:---|:---| |`color`|`ColorInt`| |`alpha`|0〜255([Alpha and transparency](https://developer.android.com/reference/android/graphics/Color#alpha-and-transparency))| --- #### `setFrameTextColorTheme()` ```java public void setFrameTextColorTheme(ADGWipeTheme theme) ``` |Parameter|Description| |:---|:---| |`theme`|`LIGHT`: 黒文字 / `DARK`: 白文字| --- #### `setFrameText()` ```java public void setFrameText(String text) ``` |Parameter|Description| |:---|:---| |`text`|フレーム内テキスト(デフォルト: `Advertisement`)| --- #### `setFrameHidden()` ```java public void setFrameHidden(boolean isHidden) ``` |Parameter|Description| |:---|:---| |`isHidden`|`true`: フレームなし / `false`: フレームあり| --- #### `setWidth()` ```java public void setWidth(int width) ``` |Parameter|Description| |:---|:---| |`width`|広告の横幅(dp)| --- #### `setLocationId()` ```java public void setLocationId(String locationId) ``` |Parameter|Description| |:---|:---| |`locationId`|ページ ID(広告枠 ID)| --- #### `setEnableTestMode()` ```java public void setEnableTestMode(boolean enableTestMode) ``` |Parameter|Description| |:---|:---| |`enableTestMode`|`true`: テストモード ON / `false`: OFF| --- #### `preload()` ```java public void preload() ``` 広告をロードします。 --- #### `show()` ```java public boolean show() ``` 広告を表示します。`true` で成功、`false` で失敗。 --- #### `dismiss()` ```java public void dismiss() ``` 広告を破棄します。 --- #### `configurationChanged()` ```java public void configurationChanged(Configuration newConfig) ``` `android:configChanges` を指定している場合に `Activity#onConfigurationChanged(Configuration)` の呼び出しを通知します。 |Parameter|Description| |:---|:---| |`newConfig`|`Activity#onConfigurationChanged(Configuration)` で受け取った `Configuration`| ## ADGWipeListener `ADGListener` └ `ADGWipeListener` ### メソッド #### `onCloseWipe()` ```java abstract public void onCloseWipe() ``` ワイプアドがクローズされたことを通知します。 --- ## iOS SDK Getting Started / バナー広告 ## はじめに 開発環境にXcodeを使用することを前提とします。 ### 2026-07-29 [v2.41.0アップデート内容](https://github.com/AdGeneration/ADG-iOS-SDK/releases/tag/2.41.0) #### 新機能 - App Content URLを広告リクエストの`atp`パラメータとして送信できるようになりました #### 改善 - その他、内部処理を改善しました ### 2026-06-23 [v2.40.0アップデート内容](https://github.com/AdGeneration/ADG-iOS-SDK/releases/tag/2.40.0) - 内部処理を改善しました - 広告計測の改善を行いました ### 2026-06-02 [v2.37.0アップデート内容](https://github.com/AdGeneration/ADG-iOS-SDK/releases/tag/2.37.0) - 内部処理を改善しました - 広告計測の改善を行いました ### 2026-04-14 [v2.36.0アップデート内容](https://github.com/AdGeneration/ADG-iOS-SDK/releases/tag/2.36.0) #### 以下のAPIを削除しました - ADGInformationIconViewLabel クラス - ADGInformationIconViewIconImageView クラス - ADGInformationIconView の以下 - initWithVASTIcon: イニシャライザ - initWithVASTIcon:expandable: イニシャライザ - callTrackers: メソッド - callTrackers:isPostRequest: メソッド - callTracker:isPostRequest: メソッド - getIconWithSelectIndustry: メソッド - clickTrackings プロパティ #### 以下のAPIを非推奨にしました - ADGInformationIconView#optoutURL プロパティ - 代替はありません #### 以下のAPIを追加しました - ADGMediaViewType enum - ADGMediaView#mediaType プロパティ - ADGNativeAd#canLoadIcon プロパティ #### その他の変更点 - 内部処理を改善しました ### 2026-03-31 [v2.35.1アップデート内容](https://github.com/AdGeneration/ADG-iOS-SDK/releases/tag/2.35.1) - 広告表示回数が正しくカウントされない問題を修正しました [アドネットワークのSDKと連携する際の注意事項及び共通手順](/ad-generation/mediation/sdk_mediation_notes) ### 対応バージョン - Xcode 26.2 以降 - iOS 13.0 以降 ### 導入の流れ 1. SDKをダウンロードします 2. 例を参考に広告表示の実装を行います :::info[参考情報] - App Transport Security(ATS)対応については「[iOS SDK導入時のApp Transport Security(ATS)対応について](/ad-generation/other/ios_ats)」をご覧ください - **【重要】** Xcode12以降の環境の場合、あわせて、[AppTrackingTransparency対応について](/ad-generation/other/ios14_apptrackingtransparency)/[SKAdNetwork対応について](/ad-generation/other/ios14_skadnetwork) をご覧いただき、ご対応をお願いいたします ::: ## 1\. SDKをダウンロードする ### CocoaPodsを使用する 1. 次の行をプロジェクトのPodfileに追加します: ```ruby pod 'AdGeneration' ``` 2. `pod install` を実行します ### Swift Package Managerを使用する 1. XcodeのメニューからFile > Add Packages....を選択する 2. ダイアログ右上にある検索窓にリポジトリのURLを入力して検索します 次のURLを追加します: ``` https://github.com/AdGeneration/ADG-iOS-SDK https://github.com/googleads/swift-package-manager-google-mobile-ads.git ``` 3. パッケージの設定 - adg-ios-sdkは、Dependency Ruleに `Up to Next Major Version` を選択 - swift-package-manager-google-mobile-adsのパッケージのDependency Ruleに `Exact Version 12.2.0` を指定 4. Add to Projectから追加したいプロジェクトを選択して、右下のAdd Packageをクリック
手動でインストールする 1. SDKをダウンロードする こちらから最新バージョンのADG.xcframework.zipをダウンロードしてください。 [ダウンロード](https://github.com/AdGeneration/ADG-iOS-SDK/releases) 2. プロジェクトにSDKを追加する ダウンロードしたZIPファイルを解凍し、ADG.xcframeworkをプロジェクトナビゲータの任意の場所にドラッグ&ドロップするか、`右クリック > Add Files to ...` を選択し、"Copy items if needed"にチェックがついていることを確認して、Finishを押します。 ![SDKファイルの追加](/img/sdk_ios_img003.png) 3. ADG.xcframeworkのEmbedを設定する **v2.23.0以降の場合** `該当アプリのターゲット > General > Frameworks, Libraries, and Embedded Content > ADG.xcframework` を"Embed & Sign"に設定してください。 :::warning[重要] v2.23.0以降の場合、"Do Not Embed"を設定するとアプリ起動時にクラッシュします。必ず"Embed & Sign"を設定してください。 ::: **v2.22.2以前の場合** `該当アプリのターゲット > General > Frameworks, Libraries, and Embedded Content > ADG.xcframework` を"Do Not Embed"に設定してください。 4. Ad Generation SDKが依存しているフレームワークを追加する Xcodeのプロジェクトナビゲータからプロジェクトファイルを選択し、 `該当アプリのターゲット > General > Frameworks, Libraries, and Embedded Content` の`+`ボタンから、各SDKが使用するフレームワークを追加してください。 - SystemConfiguration.framework - CoreTelephony.framework - AVFoundation.framework - CoreMedia.framework - MediaPlayer.framework - SafariServices.framework - WebKit.framework - StoreKit.framework - AdSupport.framework(Optionalで追加) v2.26.1以前の場合は以下のフレームワークも追加してください。 - CoreLocation.framework(Optionalで追加) - v2.23.0以降、Optionalとなりました。CoreLocation.frameworkを利用する場合は[位置情報の扱いについて](#位置情報の扱いについて)もご参照ください :::tip[参考] v2.27.0からCoreLocation.frameworkは不要となりました。 ::: 5. リソースファイルをプロジェクトに追加する(〜v2.22.2) :::note[v2.23.0以降について] `ADG-Resources.bundle` は動画広告のアイコンやインタースティシャル広告のボタンなど、画像やxibのリソースなどを内包したリソースファイルのパッケージとなります。 v2.23.0以降では、 `ADG-Resources.bundle` は削除されており、本手順は不要となります。 ::: `ADG.framework/ADG-Resources.bundle`をXcodeのプロジェクトナビゲータの任意の場所にドラッグ&ドロップするか、`右クリック > Add Files to ...` を選択し、"Copy items if needed"にチェックがついていることを確認して、Finishを押します。 ![リソースファイルの追加1](/img/sdk_ios_img005.png) ![リソースファイルの追加2](/img/sdk_ios_img006.png) 6. Other Linker Flagsの設定 `該当アプリのターゲット > Build Settings > Linking - General > Other Linker Flags` に"-ObjC"を追加してください。 ![IMG](/img/sdk_ios_img001.png)
## 2. 広告表示を実装する 広告を配置するViewを作成します。以下の例では下部中央を指定しています。 AutoLayoutの制約は、広告のサイズに合わせて設定してください。 ![広告Viewの配置例](/img/sdk_ios_img008.png) 1. 広告を表示するViewControllerで `ADG/ADG.h` をインポートします 2. 広告表示用のView(サンプルコードでは `adView` が該当します)を `ViewController#view` に追加、またはStoryBoardにて追加します :::note 広告リクエスト前に追加してください ::: 3. `ADGManagerViewController` クラスのインスタンスを生成します 4. 広告リクエストを行います 5. `viewDidAppear` で広告のローテーション再開を行います :::tip 画面切り替えで本処理を走らせたくない場合は、バックグラウンドからの復帰時に行ってください ::: 6. `ADGManagerViewControllerDelegate` を実装してください :::note[adType_Free のサイズ指定] `adType_Free` を使用する場合は、必ず `adSize` もしくは `setFrame` で広告サイズを指定してください。 ::: ```swift 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() } } // MARK: - ADGManagerViewControllerDelegate 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.") } } ``` ```objc #import #import "BannerAdsObjCViewController.h" @interface BannerAdsObjCViewController () @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]; } #pragma mark - ADGManagerViewControllerDelegate - (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 ``` ### App Content URLの設定 **ADG iOS SDK v2.41.0** 以降で対応しています。 アプリの主要コンテンツに一致するウェブサイトURLを設定できます。設定したURLは、コンテンツターゲティングのために広告リクエストの `atp` パラメータとして付与されます。 `ADGManagerViewController` の `contentUrl` プロパティで、広告リクエスト(`loadRequest`)の前に設定します。 Swift: ```swift adg.contentUrl = "https://www.example.com/contents" ``` Objective-C: ```objectivec [self.adg setContentUrl:@"https://www.example.com/contents"]; ``` **仕様** - URLの長さの上限は512 UTF-16 code unitです。前後の空白・改行を除去(trim)した後の長さで判定されます。 - 上限を超過した場合、`atp` パラメータは送信されず、エラーレベルのログが出力されます。広告のロード自体はブロックされません。 - 未設定の場合、`atp` パラメータは送信されません。 - AdMobメディエーションを利用している場合、設定値はAdMobのコンテンツ マッピングにも使用されます。詳細は[AdMobアダプター(メディエーション)](/ad-generation/mediation/admobadapter_ios_manual)を参照してください。 - ネイティブ広告で `ADGNativeAdLoader` を使用する場合は、`mediationOptions` の `contentURL` プロパティで同様に設定できます。 ### 各メソッドの仕様やオプションについて [iOSリファレンス](/ad-generation/api-reference/reference_ios)をご参照ください。 ### 注意事項 #### バナー広告Viewの配置位置について `adOrigin` に広告Viewを配置する際の親Viewに対する相対位置を指定してください。 #### テストIDについて 広告の掲載イメージを確認したい場合は、テストIDを使用してください。 [テスト用の広告枠ID一覧](/ad-generation/test_id) :::warning[注意] テストIDをセットしたままアプリをリリースしないようにしてください。 ::: #### 位置情報の扱いについて ##### v2.27.0以降の場合 v2.27.0からCoreLocation.frameworkに依存しなくなりました。この変更に伴い、**Ad Generation SDKが位置情報を取得することはしません。** 広告リクエストに位置情報を付与したい場合は、ご自身で位置情報取得ロジックを実装していただき、 `ADGSettings.location` クラスプロパティにセットしてください。位置情報が更新されるたびにセットし直す必要があります。 ```objc - (CLLocation *) updateLocation { // 位置情報取得ロジックを実装してください } // ... CLLocation *location = [self updateLocation]; // Ad Generation SDKに位置情報(緯度・経度)を設定 ADGSettings.location = [ADGLocation locationWithLatitude:location.coordinate.latitude longitude:location.coordinate.longitude]; ``` ##### v2.26.1以前の場合 ユーザが位置情報に関する権限をアプリに付与し、Ad Generation SDKにて[位置情報取得の設定](/ad-generation/api-reference/reference_ios#setgeolocationenabled)をONにしている場合、位置情報を広告リクエストに付与します。 v2.13.0以降、位置情報取得の初期設定をOFFに変更しております。有効にする方法等、詳しくはこちらをご覧ください。 [iOS/Android 位置情報の扱いについて](/ad-generation/other/location) また、位置情報サービスを使用される場合、マーケットの規約に従い、ユーザへの通知および同意をお願いいたします。 --- ## iOS実装 Ad Generation iOS SDKの実装方法についてのガイド ---- このページではiOSアプリへのAd Generation SDK実装方法について説明します。 ## 実装ガイド - [iOS SDK Getting Started/バナー広告](/ad-generation/platforms/ios/banner_ad_ios) - [iOS SDK Getting Started / ネイティブ広告](/ad-generation/platforms/ios/native_ad_ios) - [ワイプアド](/ad-generation/platforms/ios/wipe_ad_ios) - [ワイプアド リファレンス](/ad-generation/platforms/ios/wipead_reference_ios) ## iOS対応情報 - [iOS SDK導入時のApp Transport Security(ATS)対応について](/ad-generation/other/ios_ats) - [iOS SDKのAppTrackingTransparency対応について](/ad-generation/other/ios14_apptrackingtransparency) - [iOS SDKのSKAdNetwork対応について](/ad-generation/other/ios14_skadnetwork) --- ## iOS SDK Getting Started / ネイティブ広告 ## はじめに 開発環境にXcodeを使用することを前提とします。 ### 対応バージョン iOS 13.0以降 ### 導入の流れ 1. SDKをダウンロードします 2. 例を参考に広告表示の実装を行います ## 1. SDKをダウンロードする [iOS SDK Getting Started/バナー広告](/ad-generation/platforms/ios/banner_ad_ios)からご確認ください。 ## 2\. 広告表示を実装する ネイティブ広告オブジェクトを `ADGManagerViewControllerDelegate` メソッドで取得するため、 `setUsePartsResponse` の設定を行います。 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; ```swift /* locationID: 管理画面から払い出された広告枠ID adType: 枠サイズ kADG_AdType_Free:自由設定 rootViewController: 広告を配置するViewController */ adg = ADGManagerViewController(locationID: "48635", adType: .adType_Free, rootViewController: self) // HTMLテンプレートを使用したネイティブ広告を表示するためには以下のように配置するViewを指定します adg?.adSize = CGSize(width: 300, height: 250) adg?.addAdContainerView(adView) adg?.delegate = self // ネイティブ広告パーツ取得を有効 adg?.usePartsResponse = true ``` ```objc /* locationID: 管理画面から払い出された広告枠ID adType: 枠サイズ kADG_AdType_Free:自由設定 rootViewController: 広告を配置するViewController */ self.adg = [[ADGManagerViewController alloc] initWithLocationID:@"48635" adType:kADG_AdType_Free rootViewController:self]; // HTMLテンプレートを使用したネイティブ広告を表示するためには以下のように配置するViewを指定します self.adg.adSize = CGSizeMake(300, 250); [self.adg addAdContainerView:self.adView]; self.adg.delegate = self; // ネイティブ広告パーツ取得を有効 self.adg.usePartsResponse = YES; ``` ネイティブ広告オブジェクトが取得できた場合、 `ADGManagerViewControllerDelegate` メソッドの以下が呼び出されます。 ```swift func adgManagerViewControllerReceiveAd(_ adgManagerViewController: ADGManagerViewController, mediationNativeAd: Any) ``` ```objc - (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController mediationNativeAd:(id)mediationNativeAd ``` `mediationNativeAd` からネイティブ広告オブジェクトが取得できます。 ネイティブ広告オブジェクトは `ADGNativeAd` クラスです。id型から `ADGNativeAd` へキャストし、クラス判定を行ってからアクセスしてください。 `ADGNativeAd` からネイティブ広告パーツを取得するパラメータは以下の通りです。 | 要素名 | object | |---|---| | タイトル | ADGNativeAd.title.text | | メイン画像(長方形画像)URL | ADGNativeAd.mainImage.url | | メイン画像 幅 | ADGNativeAd.mainImage.width | | メイン画像 高さ | ADGNativeAd.mainImage.height | | アイコン画像(正方形画像)URL | ADGNativeAd.iconImage.url | | アイコン画像 幅 | ADGNativeAd.iconImage.width | | アイコン画像 高さ | ADGNativeAd.iconImage.height | | リード文 | ADGNativeAd.desc.value | | CTA(Call to action)のテキスト | ADGNativeAd.ctatext.value | | 広告主 | ADGNativeAd.sponsored.value | クリックイベントの通知が必要な場合は `ADGManagerViewControllerReceiveAd` 内で `ADGNativeAd` を取得したタイミングで `ADGNativeAd.delegate` を設定し、`nativeAdDidTap:` を実装してください。 ```swift class ViewController: UIViewController, ADGNativeAdDelegate { func adgManagerViewControllerReceiveAd(_ adgManagerViewController: ADGManagerViewController, mediationNativeAd: Any) { if let nativeAd = mediationNativeAd as? ADGNativeAd { nativeAd.delegate = self // ネイティブ広告Viewの構築処理など } } func nativeAdDidTap(_ nativeAd: ADGNativeAd) { // タップ時の処理 } } ``` ```objc @interface ViewController () @end @implementation ViewController - (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController mediationNativeAd:(id)mediationNativeAd { if ([mediationNativeAd isKindOfClass:[ADGNativeAd class]]) { ADGNativeAd *nativeAd = (ADGNativeAd *)mediationNativeAd; nativeAd.delegate = self; // ネイティブ広告Viewの構築処理など } } - (void)nativeAdDidTap:(ADGNativeAd *)nativeAd { // タップ時の処理 } @end ``` ### 実装例 ```objc #import #import "NativeAdsObjCViewController.h" #import "ADGNativeAdView.h" @interface NativeAdsObjCViewController () @property (weak, nonatomic) IBOutlet UIView *adView; @property (nonatomic) ADGManagerViewController *adg; @end @implementation NativeAdsObjCViewController - (void)viewDidLoad { [super viewDidLoad]; /* locationID: 管理画面から払い出された広告枠ID adType: 枠サイズ kADG_AdType_Free:自由設定 rootViewController: 広告を配置するViewController */ self.adg = [[ADGManagerViewController alloc] initWithLocationID:@"48635" adType:kADG_AdType_Free rootViewController:self]; // HTMLテンプレートを使用したネイティブ広告を表示するためには以下のように配置するViewを指定します self.adg.adSize = CGSizeMake(300, 250); [self.adg addAdContainerView:self.adView]; self.adg.delegate = self; // ネイティブ広告パーツ取得を有効 self.adg.usePartsResponse = YES; // インフォメーションアイコンのデフォルト表示 // デフォルト表示しない場合は必ずADGInformationIconViewの設置を実装してください self.adg.informationIconViewDefault = false; } - (IBAction)didTapLoadRequestButton:(id)sender { // 広告リクエスト [self.adg loadRequest]; } - (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController { NSLog(@"Received an ad."); } - (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController mediationNativeAd:(id)mediationNativeAd { NSLog(@"Received an ad."); UIView *nativeAdView; if ([mediationNativeAd isKindOfClass: [ADGNativeAd class]]) { ADGNativeAdView *adgNativeAdView = [ADGNativeAdView view]; [adgNativeAdView apply:(ADGNativeAd *)mediationNativeAd viewController:self]; nativeAdView = adgNativeAdView; } if (nativeAdView) { // ローテーション時に自動的にViewを削除します [adgManagerViewController setAutomaticallyRemoveOnReload:nativeAdView]; [self.adView addSubview:nativeAdView]; } } - (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; } } @end ``` #### ネイティブ広告デザイン例 - 作成される広告イメージ ![ネイティブ広告のサンプル画像](/img/sdk_ios_img002.886c6ec9.png) - アプリに応じてカスタマイズしてください(画像ロード処理の非同期化など) - XIBはサンプルを参考にしてください [サンプルコード](https://github.com/AdGeneration/ADG-iOS-SDK/tree/master/Samples) #### ADGNativeAdView実装例 ```objc #import #import "ADGNativeAdView.h" @interface ADGNativeAdView() @property (weak, nonatomic) IBOutlet UIImageView *iconImageView; @property (weak, nonatomic) IBOutlet UILabel *titleLabel; @property (weak, nonatomic) IBOutlet UILabel *descriptionLabel; @property (weak, nonatomic) IBOutlet UIView *mediaViewContainerView; @property (weak, nonatomic) IBOutlet UILabel *sponsoredLabel; @property (weak, nonatomic) IBOutlet UILabel *ctaLabel; @end @implementation ADGNativeAdView + (instancetype)view { NSString *className = NSStringFromClass([self class]); return [[[NSBundle mainBundle] loadNibNamed:className owner:nil options:0] firstObject]; } - (void)awakeFromNib { [super awakeFromNib]; self.layer.borderWidth = 1.0f; self.layer.borderColor = UIColor.lightGrayColor.CGColor; self.iconImageView.contentMode = UIViewContentModeScaleAspectFit; self.iconImageView.clipsToBounds = YES; self.ctaLabel.backgroundColor = UIColor.whiteColor; self.ctaLabel.clipsToBounds = YES; self.ctaLabel.textColor = self.ctaLabel.tintColor; self.ctaLabel.layer.borderWidth = 1.0f; self.ctaLabel.layer.borderColor = self.ctaLabel.tintColor.CGColor; self.ctaLabel.layer.cornerRadius = 5.0f; } - (void)apply:(ADGNativeAd *)nativeAd viewController:(UIViewController *)viewController { if (!nativeAd) { return; } // タイトル self.titleLabel.text = nativeAd.title ? nativeAd.title.text : @""; // リード文 self.descriptionLabel.text = nativeAd.desc ? nativeAd.desc.value : @""; // アイコン画像 if (nativeAd.iconImage.url.length > 0) { NSURL *iconImageUrl = [NSURL URLWithString:nativeAd.iconImage.url]; if (iconImageUrl) { // 簡易例です。ビュー再利用時はURL一致チェックやタスクのキャンセルを検討してください。 NSURLSessionDataTask *task = [[NSURLSession sharedSession] dataTaskWithURL:iconImageUrl completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { // エラーハンドリングを実施してください。 if (data) { UIImage *image = [UIImage imageWithData:data]; dispatch_async(dispatch_get_main_queue(), ^{ self.iconImageView.image = image; }); } }]; [task resume]; } } // メイン画像・動画 for (UIView *v in self.mediaViewContainerView.subviews) { [v removeFromSuperview]; } // メイン画像または動画が利用できるかどうかをチェックします。 if (nativeAd.canLoadMedia) { CGRect mediaViewFrame = CGRectMake(0, 0, self.mediaViewContainerView.bounds.size.width, self.mediaViewContainerView.bounds.size.height); // ADGMediaViewを生成します。 ADGMediaView *mediaView = [[ADGMediaView alloc] initWithFrame:mediaViewFrame]; // 必ずADGNativeAdの参照を追加してください。 mediaView.nativeAd = nativeAd; // Viewへ配置します。 [self.mediaViewContainerView addSubview:mediaView]; // メイン画像または動画のロードを開始します。 [mediaView load]; } // インフォメーションアイコン ADGInformationIconView *infoIconView = [[ADGInformationIconView alloc] initWithNativeAd:nativeAd]; if (infoIconView) { [self.mediaViewContainerView addSubview:infoIconView]; [infoIconView updateFrameFromSuperview:UIRectCornerTopRight]; } // 広告主 self.sponsoredLabel.text = nativeAd.sponsored.value.length > 0 ? [NSString stringWithFormat:@"sponsored by %@",nativeAd.sponsored.value] : @"sponsored"; // CTAボタン NSString *ctaText = nativeAd.ctatext.value.length > 0 ? nativeAd.ctatext.value : @"詳しくはこちら"; self.ctaLabel.text = ctaText; // クリックイベント [nativeAd setTapEvent:self handler:nil]; } @end ``` ### 注意事項 * `ADGNativeAd#setTapEvent:handler:` および `ADGManagerViewController#setAutomaticallyRemoveOnReload:` を使用してください。 * **画像は、アスペクト比を変えず、必ず切れることのないようしてください。** 万が一、縦横比が正常ではない表示になっている場合、レギュレーションに反してしまう恐れがございます。 **(UIImageViewのcontentModeをScaleAspectFitに設定)** * 画像のアスペクト比に関しましては、ADGMediaViewを利用することで正しいアスペクト比を保持して表示がおこなえますので実装例をご参考にしてください。その際は下部に記載の「ADGMediaView注意事項」につきましてもお目通しください。 * 広告破棄のタイミングにて、setAutomaticallyRemoveOnReloadにセットされたUIViewインスタンスに対してremoveFromSuperviewが呼び出されます。 * 画像取得の同期処理はUIスレッドをブロックするため、実装時は非同期ロードやキャッシュ利用を推奨します。 * 広告の破棄は画面のdealloc等、広告の表示が終わるタイミングで行ってください。 * テストではタップの確認も行ってください。 * ADGManagerViewControllerクラスは1つの広告枠に対して1つのインスタンスを生成してください。 * **広告枠の設定によっては各ネイティブ広告オブジェクトのパラメーターの値がnilになる場合があります。** たとえば、GunosyAdsではCTA取得できません。画像の縦横サイズも含め、すべてがoptionalな値です。 * PR表記をつける等して広告であることを示してください。 * レスポンスにSponsoredがある場合はできる限り表示をしてください。(特定のアドネットワークではSponsoredの表示要望がございます) ### インフォメーションアイコン(オプトアウトリンク)について **※ 2016/12/8(v2.4.2)より必須項目となりました** v2.4.2より、ターゲティングを行っている広告の場合にはデフォルトでインフォメーションアイコン(オプトアウトリンク)が表示されるようになります(ターゲティングを行っていない広告の場合は表示されません)。 インフォメーションアイコンはタップすることで、DSP事業者が指定したオプトアウトWebサイトページへ遷移します。 オプトアウトリンクはユーザーが広告のターゲティングをオプトアウト(拒否)することにより、ユーザーに関する情報の関連付けを防ぐことを可能とし、設置することで配信できるDSP事業者が増加します。 表示される場所は、`ADGNativeAd#setTapEvent:handler:`で指定したViewの右上に設置されます。 デフォルトの表示位置から変更する場合は、`ADGManagerViewController.informationIconViewDefault`を設定し、`ADGInformationIconView`を生成してください。 ターゲティングを行っていない広告の場合は、`ADGInformationIconView`を生成してもアイコンは表示されません。 `ADGInformationIconView` は `initWithNativeAd:expandable:` で展開可否を指定できます。 背景のマスク色は `backgroundType` で白/黒を切り替えられます。 インフォメーションアイコンの表示確認は、テストID`48635`を使用してください。 ### 動画広告の実装について(iOS: v2.9.0~ (ADG.framework)) ADGMediaViewを利用することで、動画広告を配置できます。 ```objc //メイン画像または動画が利用できるかどうかをチェックします。 if (nativeAd.canLoadMedia) { //ADGMediaViewを生成します。 ADGMediaView *mediaView = [[ADGMediaView alloc] initWithFrame:CGRectMake(0, 0, width, height)]; //必ずADGNativeAdの参照を追加してください。 mediaView.nativeAd = nativeAd; [self.mediaViewContainerView addSubview:mediaView]; //メイン画像または動画のロードを開始します。 [mediaView load]; } ``` #### ADGMediaView注意事項 * 動画と静止画が利用できる場合は、動画が優先されます。 * 動画や静止画は配信案件によるため、必ずしも配信されるわけではありません。 ### テストIDについて 広告の掲載イメージを確認したい場合は、テストIDを使用してください。 [テスト用の広告枠ID一覧](/ad-generation/test_id) :::warning[ご注意] テストIDをセットしたままアプリをリリースしないようにしてください。 ::: --- ## ワイプアド(iOS) アプリの画面上に、ワイプのように動画広告を表示するフォーマットになります。 表示の初期位置は画面上の四隅(右上,右下,左上,左下)をお選びいただき、 アプリの配色にあわせて、Light/Darkのテーマをご指定いただけます。 ![ワイプアド広告のサンプル画像](/assets/images/wipead_ios1-aba0b1f1cf2da3e53f6fdd4aa8c9d9c3.png) ![ワイプアド広告のサンプル画像](/assets/images/wipead_ios2-19b5898e00ecf671bef5754d9a3b1614.png) ## サイズ仕様について 表示サイズについては横幅のみ任意の数値をご指定いただけますが、視認性確保のために、サイズについて上限と下限が定められております。 基本的に400(dp)などの大きな値を横幅としてご指定いただき、最大サイズ(デフォルト)で表示いただくことを想定しておりますが、 アプリ状況により細かくサイズをご指定いただく必要がある場合は、下記の最大サイズ〜最小サイズの範囲内でご指定ください。 ### 最大サイズ(デフォルト) 表示対象となる画面の高さと横幅を比較し、 画面の高さ < 画面の横幅 の場合は、高さの35%を最大値として、16:9の比率で横幅を算出して表示いたします。 画面の高さ > 画面の横幅 の場合は、横幅の53%を最大値として、16:9の比率で高さを算出して表示いたします。 最大サイズより大きな横幅の値をご指定いただいた場合は、上記のルールに基づいてリサイズされます。 ### 最小サイズ 最小横幅は 135dp です。 指定値が 135dp 未満の場合は最小サイズにリサイズされます。 ## 表示の初期位置について 画面上の四隅(右上,右下,左上,左下)をお選びいただくことが可能です。 アプリ状況により、表示位置をずらしたい場合、マージンの値をご指定いただくことで、 `右上` または `左上` をお選びいただいた場合は、ワイプアドに対してトップマージンが追加されます。 `右下` または `左下` をお選びいただいた場合は、ワイプアドに対してボトムマージンが追加されます。 ## 対応SDK - Ad Generation SDK iOS v2.19.0 以降 ## 対応バージョン - iOS 13.0以降 ## SDK 実装について ADGWipeクラスのインスタンスを生成し、事前に `preload()` メソッドをコールいただき、広告をロードしてください。 正常にロード完了した場合、iOS : `ADGManagerViewControllerReceiveAd()` のコールバックがおこなわれますので、 その後は任意のタイミングで `show()` メソッドをコールいただき、広告の表示をおこなってください。 ロード完了後、即時表示をおこないたい場合は、iOS : `ADGManagerViewControllerReceiveAd()` のコールバック内に `show()` メソッドをコールいただくように記述してください。 ## API Reference - [iOS リファレンス](/ad-generation/platforms/ios/wipead_reference_ios) import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; ```swift import ADG class SampleWipeViewController: UIViewController { private var adgWipe: ADGWipe? override func viewDidLoad() { super.viewDidLoad() // ADGWipeインスタンスを生成してください // [広告枠ID, 表示位置, 表示位置に対してのマージン, ワイプアド横幅, 表示対象VC] が必要です adgWipe = ADGWipe( locationID: "xxxxxx", position: kADGWipePosition.adgWipePositionBottomRight, margin: 0, width: 200, rootViewController: self ) // デリゲートをセットしてください adgWipe?.delegate = self // テストモードをONにする場合は有効化してください // ※リリース時は必ずfalse or 記述を削除してください adgWipe?.setEnableTestMode(true) // フレームのテーマ色を指定(未指定時は Light) adgWipe?.setWipeViewTheme(kADGWipeTheme.adgWipeThemeDark) // 広告のプリロード adgWipe?.preload() } override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) // ワイプアドを非表示にする adgWipe?.dismiss() } } extension SampleWipeViewController: ADGWipeDelegate { // ワイプアドのレシーブ時に呼ばれるデリゲートメソッド func adgManagerViewControllerReceiveAd(_ adgManagerViewController: ADGManagerViewController) { print("Received an ad.") // 広告表示 adgWipe?.show() } // 広告のエラー時に呼ばれるデリゲートメソッド func adgManagerViewControllerFailed(toReceiveAd adgManagerViewController: ADGManagerViewController, code: kADGErrorCode) { print("Failed to receive an ad.") switch code { case .adgErrorCodeNeedConnection, // ネットワーク不通 .adgErrorCodeExceedLimit, // エラー多発 .adgErrorCodeNoAd: // 広告レスポンスなし break default: break } } // 広告のタップ時に呼ばれるデリゲートメソッド func adgManagerViewControllerDidTapAd(_ adgManagerViewController: ADGManagerViewController) { print("Did tap ad.") } // ワイプアドのクローズ時に呼ばれるデリゲートメソッド func adgWipeClose() { print("Closed wipe ads") } } ``` ```objectivec #import "ADGWipe.h" @interface SampleWipeViewController : UIViewController @property (nonatomic) ADGWipe *wipe; @end @implementation SampleWipeViewController - (void)viewDidLoad { [super viewDidLoad]; if (self.wipe) { [self.wipe dismiss]; } // ADGWipeインスタンスを生成してください self.wipe = [[ADGWipe alloc] initWithLocationID:@"xxxxxx" position:kADGWipePositionBottomRight margin:0.0f width:200 rootViewController:self]; // デリゲートをセットしてください self.wipe.delegate = self; // テストモードをONにする場合は有効化してください(リリース時は無効) // [self.wipe setEnableTestMode:YES]; // フレームのテーマ色を指定(未指定時は Light) [self.wipe setWipeViewTheme:kADGWipeThemeDark]; // 広告のプリロード [self.wipe preload]; } - (void)viewDidDisappear:(BOOL)animated { [super viewDidDisappear:animated]; // ワイプアドを非表示にする [self.wipe dismiss]; } - (void)dealloc { self.wipe.delegate = nil; self.wipe = nil; } // ワイプアドのレシーブ時に呼ばれるデリゲートメソッド - (void)ADGManagerViewControllerReceiveAd:(ADGManagerViewController *)adgManagerViewController { NSLog(@"Received an ad."); [self.wipe show]; } // 広告のエラー時に呼ばれるデリゲートメソッド - (void)ADGManagerViewControllerFailedToReceiveAd:(ADGManagerViewController *)adgManagerViewController code:(kADGErrorCode)code { NSLog(@"Failed to receive an ad."); switch (code) { case kADGErrorCodeNeedConnection: // ネットワーク不通 case kADGErrorCodeExceedLimit: // エラー多発 case kADGErrorCodeNoAd: // 広告レスポンスなし break; default: break; } } // 広告のタップ時に呼ばれるデリゲートメソッド - (void)ADGManagerViewControllerDidTapAd:(ADGManagerViewController *)adgManagerViewController { NSLog(@"Did tap ad."); } // ワイプアドのクローズ時に呼ばれるデリゲートメソッド - (void)ADGWipeClose { NSLog(@"Closed wipe ads."); } @end ``` :::tip[Note] ワイプアドは Ad Generation SDK 内包の xib リソースを参照します。マニュアルインストール時は SDK に含まれるリソースを Xcode プロジェクトへ追加してください。 〜v2.22.2 では `ADG.framework/ADG-Resources.bundle` をプロジェクトへ追加する必要があります(CocoaPods では自動追加)。 v2.23.0 以降は `ADG-Resources.bundle` を利用しません。詳細は [iOS SDK バナー導入マニュアルの「1. SDKをダウンロードする」](/ad-generation/platforms/ios/banner_ad_ios#1-sdkをダウンロードする)を参照してください。 ::: --- ## ワイプアド API リファレンス(iOS) # ワイプアド iOS リファレンス ## kADGWipeTheme フレーム/フレーム内テキスト/クローズボタンのテーマを選択します。 | kADGWipeTheme | フレーム | テキスト | クローズボタン | |---|---|---|---| | `kADGWipeThemeLight` | 薄グレー | 黒 | 黒地白抜き | | `kADGWipeThemeDark` | 濃グレー | 白 | 白フチ + 黒地白抜き | ## kADGWipePosition フレームの初期表示位置を選択します。 - `kADGWipePositionTopRight`: 右上 - `kADGWipePositionBottomRight`: 右下 - `kADGWipePositionTopLeft`: 左上 - `kADGWipePositionBottomLeft`: 左下 ## ADGWipe クラス NSObject └ ADGWipe ### Properties #### delegate ```objectivec @property (nonatomic, weak, nullable) id delegate ``` デリゲートのインスタンスを取得・設定します。 #### rootViewController ```objectivec @property (nonatomic, weak, nullable) UIViewController *rootViewController ``` :::warning[非推奨] `rootViewController` を設定するためには、`initWithLocationID:position:margin:width:rootViewController:` イニシャライザを使用してください。 ::: ### Methods #### initWithLocationID:position:margin:width:rootViewController: ```objectivec - (instancetype) initWithLocationID:(NSString *)locationID position:(kADGWipePosition)position margin:(float)margin width:(float)width rootViewController:(UIViewController *)rootViewController ``` **Parameters** | パラメータ | 説明 | |---|---| | `locationID` | ページID(広告枠ID) | | `position` | ワイプアドの初期位置 | | `margin` | 指定された position に対する追加マージン(上部/下部) | | `width` | 広告の横幅(dp) | | `rootViewController` | 表示対象の ViewController | **Return** ADGWipe インスタンス #### setWipeViewTheme: ```objectivec - (void) setWipeViewTheme:(kADGWipeTheme)theme ``` ワイプアドのテーマをセットします。 **Parameters** - theme `kADGWipeThemeLight` / `kADGWipeThemeDark` #### setFrameHidden: ```objectivec - (void) setFrameHidden:(BOOL)isHidden ``` ワイプアドのフレーム有無をセットします。 **Parameters** - isHidden YES: フレームなし / NO: フレームあり #### setFrameColor: ```objectivec - (void) setFrameColor:(UIColor *)frameColor - (void) setFrameColor:(NSString *)hex alpha:(CGFloat)alpha ``` ワイプアドのフレーム色(UIColor / HEX)と透過度をセットします。 **Parameters** - frameColor フレーム色(UIColor) - hex フレーム色(HEX) - alpha 透過度 #### setFrameColorTheme: ```objectivec - (void) setFrameColorTheme:(kADGWipeTheme)theme ``` ワイプアドのフレーム色のテーマカラーをセットします。 **Parameters** - theme `kADGWipeThemeLight`: 薄いグレー / `kADGWipeThemeDark`: 濃いグレー #### setFrameTextColorTheme: ```objectivec - (void) setFrameTextColorTheme:(kADGWipeTheme)theme ``` フレーム内のテキスト色を変更します。 **Parameters** - theme `kADGWipeThemeLight`: 黒文字 / `kADGWipeThemeDark`: 白文字 #### setFrameText: ```objectivec - (void) setFrameText:(NSString *)text ``` デフォルトは "Advertisement" です。 #### setEnableTestMode: ```objectivec - (void) setEnableTestMode:(BOOL)isTest ``` **Parameters** - isTest YES: テストモード ON / NO: OFF #### setContentUrl: ```objectivec - (void) setContentUrl:(NSString *)url ``` **Parameters** - url App Content URL(アプリの主要コンテンツに一致するウェブサイトURL)。SDK v2.41.0以降、広告リクエストの `atp` パラメータとして送信されます。仕様は[バナー広告ガイドのApp Content URLの設定](/ad-generation/platforms/ios/banner_ad_ios#app-content-urlの設定)を参照してください。 #### preload ```objectivec - (void) preload ``` 広告をロードします。 #### show ```objectivec - (BOOL) show ``` 広告を表示します(YES: 成功 / NO: 失敗)。 #### dismiss ```objectivec - (void) dismiss ``` 広告を非表示にします。 ## ADGWipeDelegate [ADGManagerViewControllerDelegate](/ad-generation/api-reference/reference_ios#adgmanagerviewcontrollerdelegate) └ ADGWipeDelegate ADGWipeDelegate は ADGManagerViewControllerDelegate を継承しています。 以下のメソッドに加え、ADGManagerViewControllerDelegate のメソッド(`ADGManagerViewControllerReceiveAd:`, `ADGManagerViewControllerFailedToReceiveAd:code:`, `ADGManagerViewControllerDidTapAd:` 等)も利用できます。 ### Methods #### ADGWipeClose ```objectivec - (void) ADGWipeClose ``` ワイプアドがクローズされたことを通知します。 ## 表示位置の詳細計算 ### 上端配置時(`kADGWipePositionTopRight / kADGWipePositionTopLeft`) 総マージン = ユーザー指定マージン + ステータスバー高さ + ナビゲーションバー高さ + 画面端マージン(5.0) - ステータスバー高さ: 通常 20px / ノッチ端末 44〜59px / フルスクリーン時 0px - ナビゲーションバー高さ: 44px(存在しない場合 0px) - 画面端マージン: 5px ### 下端配置時(`kADGWipePositionBottomRight / kADGWipePositionBottomLeft`) 総マージン = ユーザー指定マージン + ワイプアド高さ + フレーム高さ(25.0) + 画面下端マージン(35.0) - 画面下端マージンは 35px で固定(ホームインジケータを考慮)。 --- ## Prebid.js 連携 # Prebid.js - Ad Generation連携 「[Prebid.js](http://Prebid.org/)」は、パブリッシャーがヘッダービディングを実装するためのオープンソースライブラリです。Ad GenerationとPrebid.jsを連携することで、効率的な広告配信とヘッダービディング機能を実現できます。 ## 📋 連携ガイド ### Prebid.js 基本実装 Prebid.jsの基本実装とAd Generation連携の詳細については、以下のガイドをご覧ください。 - [Prebid.js - Ad Generation Integration [Web]](/ad-generation/platforms/prebid/prebid_web) ### Amazon Publisher Services (APS) 併用 Prebid.jsとAmazon Publisher Services (APS)を併用する場合は、以下のガイドをご覧ください。 - [Prebid.js + Amazon Publisher Services - Ad Generation Integration [Web]](/ad-generation/platforms/prebid/prebid_aps_banner_ad_web) ## 🔑 主な特徴 - **ヘッダービディング**: 複数の広告ネットワークから同時に入札を受け付け - **収益最適化**: 最も高い入札額の広告を表示 - **透明性**: オープンソースで透明性の高い実装 - **柔軟性**: 多数のアドネットワークとの連携が可能 ## 💡 推奨利用シーン - Webサイトでの広告収益を最大化したい場合 - 複数の広告ネットワークを効率的に管理したい場合 - ヘッダービディングの実装を検討している場合 ## 📚 関連リソース - [Prebid.js 公式サイト](http://Prebid.org/) - [Ad Generation Web実装ガイド](/ad-generation/platforms/web/) - [Amazon Publisher Services連携](/ad-generation/mediation/amazon_publisher_services_web) --- ## Prebid.js + Amamzon Publisher Services - Ad Generation Integration [Web] Prebid.jsとAmazon Publisher Services(APS)とAd Generation SDKをWebで連携するための実装例です。 ## サービスのご利用前に - [Amazon Publisher Services - Ad Generation Integration](/ad-generation/mediation/amazon_publisher_services_web) - [Prebid.js - Ad Generation Integration](/ad-generation/platforms/web/) 上記2点をご一読ください。 ## 実装例 ```html
``` --- ## Prebid.js - Ad Generation Integration [Web] Prebid.jsとAd Generation SDKをWebで連携するためのマニュアルとなります。 ## Ad Generation管理画面での広告枠設定 1. 対象枠でカスタムタグを作成します。 2. カスタムタグ認証情報として「Prebid」を選択します。 3. アドネットワーク名を入力します。こちらは表示にのみ使用されます。 4. フロアプライスを設定します。 ## Prebid.jsの導入 1. PrebidのJavaScriptライブラリ(`prebid.js`)をロードします。 2. `pbjs.requestBids(requestObj)`を実行します。 3. `pbjs.requestBids(requestObj)`の `bidsBackHandler`パラメーターで指定された関数内で、Ad GenerationのJavaScriptタグの生成を行います。 ```html ... ... ...
... ``` :::warning[WARNING] Prebid.js 8系よりtransactionIdが送られなくなる為、[こちらのドキュメント](https://docs.prebid.org/dev-docs/pb8-notes.html#transaction-identifiers-are-now-reliable-and-opt-in)を参考に ``` pbjs.setConfig({enableTIDs: true}) ``` を追加してください。 ::: ## Google Ad Managerとの併用 `pbjs.requestBids(requestObj)`の実行までは同様で、リクエストパラメーターにGoogle Ad Manager用のパラメーターを追加し、コールバック内の任意のタイミングでGoogle Ad Manager用のコードを実行してください。 ```js ... pbjs.requestBids({ bidsBackHandler: sendAdserverRequest }); }); function sendAdserverRequest() { if (pbjs.adserverRequestSent) return; pbjs.adserverRequestSent = true; ... googletag.cmd.push(function() { pbjs.que.push(function() { pbjs.setTargetingForGPTAsync(); googletag.pubads().refresh(); }); }); ... } ... }); ``` --- ## AMP(Accelerated Mobile Pages)対応について AMP対応WebページでAd Generationの広告を表示したい場合は以下のようにamp-adタグを使用してください。 ``` ``` ## パラメーターについて amp-adタグの仕様については[公式ドキュメント](https://github.com/ampproject/amphtml/blob/master/extensions/amp-ad/amp-ad.md)をご覧ください。 Ad Generationは以下のパラメーターを使用できます。 |パラメーター|名前|例|備考| |----|----|----|----| |width * |幅 |320 |広告枠の幅を指定します| |height * |高さ |50 |広告枠の幅を指定します| |type * |広告タイプ |"adgeneration" |広告を識別するために"adgeneration"と指定してください。| |data-id * |広告枠ID |"12345" |管理画面で発行されたIDを使用してください| |data-targetid |対象要素id |"adg-ad" |Ad Generationの広告枠div要素のidを指定します。| |data-adtype |広告種別 |"FREE" |広告の大きさの種別を指定します。SP: 320×50TABLET: 728×90LARGE: 320×100RECT: 300×250FREE: width×height(デフォルト)| |data-option |オプション |"key1=value1& key2=value2" |任意のパラメーターを指定します。現状使用していません。| *必須パラメーター ## レスポンシブデザイン時の注意点 layout=responsive のパラメーターを使用することで、iframeの大きさをwindowの大きさに合わせて変化させることが出来ますが、バナー広告はレスポンシブ対応していませんのでご注意ください。 ## アドネットワークのHTTPS対応について AMPで配信されるアドネットワークの広告はHTTPSが必須となるため、HTTPSに対応していないアドネットワークは配信対象外となります。 --- ## Web Getting Started / バナー広告 ## 配置方法 Ad Generationの広告タグ取得ページにて表示されたscriptタグをページ内の広告を表示したい位置に貼り付けてください。 ``` ``` - "\{広告枠ID\}"は管理画面で発行されたIDに置き換えてからご使用ください。 - 審査完了前に広告の掲載イメージをご確認頂く際は、"広告枠ID"を以下のIDに置き換えご確認ください。 |サイズ|テストID|配信広告| |----|----|----| |320×50|48547|テスト広告| |320×100|48548|テスト広告| |300×250|48549|テスト広告| |728×90|48550|テスト広告| ## パラメーターについて scriptタグのパラメーターに設定可能な値は以下のようになります。 |key|説明| |----|----| |targetID|広告枠のコンテナ(divタグ)のIDになります。同じ広告枠IDを使用して複数の広告を設置したい場合や、広告枠コンテナのIDをCSS等でご利用になられたい場合にご利用ください。| --- ## Web実装 Ad Generation Web広告の実装方法についてのガイド ---- このページではWebサイトへのAd Generation広告実装方法について説明します。 ## 実装ガイド - [Web Getting Started/バナー広告](/ad-generation/platforms/web/banner_ad_web) - [AMP(Accelerated Mobile Pages)対応について](/ad-generation/platforms/web/banner_ad_amp) ## 高度な実装 - [Prebid.js - Ad Generation Integration [Web]](/ad-generation/platforms/prebid/prebid_web) - [Prebid.js + Amazon Publisher Services - Ad Generation Integration [Web]](/ad-generation/platforms/prebid/prebid_aps_banner_ad_web) --- ## 表示確認用 テストID一覧 本番IDで広告が確認できない、リリース前に接続テストを行いたい、といった場合に、下記テストIDをご利用ください。 テストIDで表示確認ができた後は、必ず本番IDに変更をお願いいたします。 ## 1. バナー広告 サイズ | OS | テストID | 配信広告 ---|---|---|--- 320×50 | 共通 | 48547 | テスト広告 320×100 | 共通 | 48548 | テスト広告 300×250 | 共通 | 48549 | テスト広告 728×90 | 共通 | 48550 | テスト広告 :::info[補足] SDKメディエーションではないJSタグ連携メニューの場合は、OS問わずに同一のテストIDで表示確認可能です。 ::: ## 2. ネイティブ広告 ダミーの広告が配信されます。 オプトアウト用インフォメーションアイコン表示確認に使用できます。 OS | テストID | 配信広告 ---|---|--- 共通 | 48635 | テスト広告 ## 3. AdMob サイズ | OS | テストID | 配信広告1 | 配信広告2 ---|---|---|---|--- バナー | iOS | 43468 | AdMob | テスト広告 ネイティブ(Advanced/Content) | iOS | 46153 | AdMob | テスト広告 ネイティブ(Advanced/AppInstall) | iOS | 46154 | AdMob | テスト広告 ネイティブ(Advanced/AppInstall,Contents) | iOS | 46470 | AdMob | テスト広告 バナー | Android | 43469 | AdMob | テスト広告 ネイティブ(Advanced/Content) | Android | 46155 | AdMob | テスト広告 ネイティブ(Advanced/AppInstall) | Android | 46156 | AdMob | テスト広告 ネイティブ(Advanced/AppInstall/Contents) | Android | 46471 | AdMob | テスト広告 --- ## Android WebView実装 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # Android appの実装 [サンプルコード](https://github.com/AdGeneration/ADG-Android-SDK)を例に、advertising_idなどの受け渡し、そのほか実装上の注意事項に関して説明します。 1. JavaScriptとの連携方法 1. Webページにデータ取得用のインターフェース作成 2. Webページからadvertising_id,appbundle,platformvを取得する 2. 広告リダイレクトの対応 3. その他WebViewの設定 ## JavaScriptとの連携方法 ### ネイティブアプリにデータ取得用のインターフェース作成 クラス作成 ```kotlin import android.os.Build class WebAppInterface { companion object { private const val TAG = "WebAppInterface" } private var advertising_id: String? = "" private var isLAT: Boolean = false private lateinit var context: Context constructor(ct: Context) { this.context = ct this.initAdIdThread() } private fun initAdIdThread() { val adIdThread = Thread { var adInfo: AdvertisingIdClient.Info? = null try { adInfo = AdvertisingIdClient .getAdvertisingIdInfo(this.context) advertising_id = adInfo.id isLAT = adInfo.isLimitAdTrackingEnabled } catch (e: Exception) { Log.d(TAG, "getAdId failed") } } adIdThread.start() } @JavascriptInterface open fun getAppBundle(): String { return this.context.packageName ?: "" } @JavascriptInterface open fun getAdvertisingId(): String { val adid = advertising_id ?: "" return if (!isLAT) adid else "" } @JavascriptInterface open fun getPlatformV(): String { return Build.VERSION.RELEASE } } ``` ```java import android.os.Build; public class WebAppInterface { private static final String TAG = "WebAppInterface"; private String advertising_id = ""; private boolean isLAT = false; private Context context; public WebAppInterface(Context ct) { this.context = ct; this.initAdIdThread(); } private void initAdIdThread() { Thread adIdThread = new Thread(new Runnable() { @Override public void run() { AdvertisingIdClient.Info adInfo = null; try { adInfo = AdvertisingIdClient.getAdvertisingIdInfo(context); advertising_id = adInfo.getId(); isLAT = adInfo.isLimitAdTrackingEnabled(); } catch (Exception e) { Log.d(TAG, "getAdId failed"); } } }); adIdThread.start(); } @JavascriptInterface public String getAppBundle() { return context.getPackageName(); } @JavascriptInterface public String getAdvertisingId() { String adid = advertising_id; return !isLAT ? adid : ""; } @JavascriptInterface public String getPlatformV() { return Build.VERSION.RELEASE; } } ``` - [AdvertisingIdClient](https://developers.google.com/android/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient) - [getPackageName](https://developer.android.com/reference/android/content/Context.html#getPackageName()) javascriptから処理を呼び出せるように設定 ```kotlin val context = applicationContext webView.addJavascriptInterface(WebAppInterface(context), "Android") ``` ```java webView.addJavascriptInterface(new WebAppInterface(getApplicationContext()), "Android"); ``` ### Webページからadvertising_id,appbundle,platformvを取得する ```js const advertising_id = Android.getAdvertisingId(); const appbundle = Android.getAppBundle(); const platformv = Android.getPlatformV(); ``` 取得したadid,packageNameを利用し 広告タグにパラメータを生成してください。 `{〜}`が置換部分となります。値はURLエンコードを行ってください。 AdvertisingIDについては、端末側でオプトアウトされている場合は付与しないようにご注意ください。 ```js
``` ## 広告リダイレクトの対応 配信される広告のタップ動作によって、外部のサイトへ移動したり Google Playのリンクなどを開けるようにする。 サンプルではドメインによって、外部サイトを判定しています。 ```kotlin webView.webViewClient = object : WebViewClient() { override fun shouldOverrideUrlLoading( view: WebView?, request: WebResourceRequest?, ): Boolean { Log.d(TAG, "shouldOverrideUrlLoading") if (request?.url?.host == null) { return false } val currentDomain = URL(view?.url).host // http-httpsではないものは別 if (!request.url.scheme.equals("http") && !request.url.scheme.equals("https") ) { val intent = Intent(Intent.ACTION_VIEW, request.url) // If the URL cannot be opened, return early. try { Log.d(TAG, "Handle custom URL schemes ${request.url.scheme}") if (intent.resolveActivity(packageManager) != null) { startActivity(intent) } } catch (exception: ActivityNotFoundException) { Log.d("TAG", "Failed to load URL with scheme: ${request.url.scheme}") } return true } // 現在のドメインと遷移先のドメインが異なれえば外部のサイトだと判定する val targetDomain = request?.url?.host if (!currentDomain.equals(targetDomain)) { // 外部のサイト Log.d(TAG, "external Web Site ${request.url.scheme}") val intent: CustomTabsIntent = CustomTabsIntent.Builder().build() intent.launchUrl(this@MainActivity, request.url) return true } // 同一サイト return false } override fun doUpdateVisitedHistory(view: WebView?, url: String?, isReload: Boolean) { onBackPressedCallback.isEnabled = webView.canGoBack() } } ``` ```java webView.setWebViewClient(new WebViewClient() { @Override public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) { Log.d(TAG, "shouldOverrideUrlLoading"); if (request.getUrl().getHost() == null) { return false; } // http-httpsではないものは別 if (!request.getUrl().getScheme().equals("http") && !request.getUrl().getScheme().equals("https")) { Intent intent = new Intent(Intent.ACTION_VIEW, request.getUrl()); // If the URL cannot be opened, return early. try { Log.d(TAG, "Handle custom URL schemes " + request.getUrl().getScheme()); if (intent.resolveActivity(getPackageManager()) != null) { startActivity(intent); } } catch (ActivityNotFoundException exception) { Log.d(TAG, "Failed to load URL with scheme: " + request.getUrl().getScheme()); } return true; } String currentDomain; try { currentDomain = new URL(view.getUrl()).getHost(); } catch ( MalformedURLException exception) { // 不正なURL return false; } // 現在のドメインと遷移先のドメインが異なれえば外部のサイトだと判定する String targetDomain = request.getUrl().getHost(); if (!currentDomain.equals(targetDomain)) { // 外部のサイト Log.d(TAG, "external Web Site " + request.getUrl().getScheme()); CustomTabsIntent intent = new CustomTabsIntent.Builder().build(); intent.launchUrl(MainActivity.this, request.getUrl()); return true; } // 同一サイト return false; } ``` ## その他WebViewの設定 以下の点を対応してください。 - cookieの有効化 - JavaScriptの有効化 - LocalStorage有効化 - 動画の自動再生許可 ```kotlin // cookieを利用できるようにする CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true) // JavaScript有効化 webView.settings.javaScriptEnabled = true // LocalStorage有効化 webView.settings.domStorageEnabled = true // 動画の自動再生許可 webView.settings.mediaPlaybackRequiresUserGesture = false ``` ```java // cookieを利用できるようにする CookieManager.getInstance().setAcceptThirdPartyCookies(webView, true); // JavaScript有効化 webView.getSettings().setJavaScriptEnabled(true); // LocalStorage有効化 webView.getSettings().setDomStorageEnabled(true); // 動画の自動再生許可 webView.getSettings().setMediaPlaybackRequiresUserGesture(false); ``` --- ## WebView バナー広告実装 # Web Getting Started / バナー広告 WebViewでの実装方法について ## 配置方法 Ad Generationの広告タグ取得ページにて表示されたscriptタグをページ内の広告を表示したい位置に貼り付けてください。 ```html ``` ※ "\{広告枠ID\}"は管理画面で発行されたIDに置き換えてからご使用ください。 ※ 審査完了前に広告の掲載イメージをご確認頂く際は、"広告枠ID"を以下のIDに置き換えご確認ください。 | サイズ | テストID | 配信広告 | |:------|:------:|------:| | 320×50 | 48547 | テスト広告 | | 320×100 | 48548 | テスト広告 | | 300×250 | 48549 | テスト広告 | | 728×90 | 48550 | テスト広告 | ## パラメーターについて scriptタグのパラメーターに設定可能な値は以下のようになります。 |key|説明| |----|----| |targetID|広告枠のコンテナ(divタグ)のIDになります。同じ広告枠IDを使用して複数の広告を設置したい場合や、広告枠コンテナのIDをCSS等でご利用になられたい場合にご利用ください。 | ## ネイティブアプリでのターゲティング方法 iOS / AndroidアプリケーションのWebViewでの実装時には、ターゲティング広告の配信を行うことで収益の向上が見込まれます。 iOSの場合はIDFA(Identification For Advertisers)とBundle ID、Androidの場合はAdvertising IDとパッケージ名を使用します。 管理画面から取得できるscriptタグのURL部分でターゲティングに各パラメーターを追加したものを生成します。 ### iOS `idfa`と`appbundle`というパラメーターが追加します。 |key|内容| |----|----| |idfa|IDFA| |appbundle|Bundle ID| ```html ``` \{〜\}が置換部分となります。 value部分はURLエンコードを行ってください。 **IDFAは、端末側でオプトアウトされている場合は付与しないようにご注意ください。** ### Android `advertising_id`と`appbundle`というパラメーターを追加します。 |key|内容| |----|----| |advertising_id|Advertising ID| |appbundle|Package Name| ```html ``` \{〜\}が置換部分となります。 value部分はURLエンコードを行ってください。 **AdvertisingIDについては、端末側でオプトアウトされている場合は付与しないようにご注意ください。** --- ## iOS WebView実装 import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # iOS Application の実装 [サンプルコード](https://github.com/AdGeneration/ADG-iOS-SDK)を例に、idfaなどの受け渡し、そのほか実装上の注意事項に関して説明します。 1. JavaScriptとの連携方法 1. IDFAの取得 2. Webページにデータ取得用のインターフェース作成 3. Webページからidfa, appbundle, platformvを受け取る 2. 広告リダイレクトの対応 3. 動画の再生 ## JavaScriptとの連携方法 各種パラメーターの取得については公式リファレンスなどをご参照ください。 ### IDFAの取得 AppTrackingTransparency.framework(*1) および、AdSupport.framework(*2) を追加する必要があります。 > (*1)iOS14以降で有効なIDFAが取得可能であるか判定するために必要です。 > (*2)IDFAの取得のために必要です。 また、下記で後述しているサンプルコードでは、`ATTrackingManagerAuthorizationStatusAuthorized` のステータスにてIDFAを取得するように記述しております。 ```swift // IDFAを取得するためのサンプルコード import AppTrackingTransparency import AdSupport ~~省略~~ if #available(iOS 14, *) { // iOS14以降ではAppTrackingTransparencyを利用してIDFA取得に関する判定をする switch ATTrackingManager.trackingAuthorizationStatus { case .authorized: // IDFAの取得がユーザーにより許可されている idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString case .denied: // IDFAの取得がユーザーにより拒否されている print("denied") case .restricted: // IDFAの取得がユーザーの設定により制限されている print("restricted") case .notDetermined: // IDFAの取得に関するリクエストをまだユーザーが受け取っていない print("notDetermined") @unknown default: fatalError() } } else { // iOS13以前ではAppTrackingTransparencyを利用せずIDFA取得に関する判定をする if (ASIdentifierManager.shared().isAdvertisingTrackingEnabled) { idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString } } ``` ```objectivec // IDFAを取得するためのサンプルコード #import #import ~~省略~~ NSString *idfa = @""; if (@available(iOS 14, *)) { // iOS14以降ではAppTrackingTransparencyを利用してIDFA取得に関する判定をする switch (ATTrackingManager.trackingAuthorizationStatus) { case ATTrackingManagerAuthorizationStatusAuthorized: // IDFAの取得がユーザーにより許可されている idfa = [ASIdentifierManager sharedManager].advertisingIdentifier.UUIDString; break; case ATTrackingManagerAuthorizationStatusDenied: // IDFAの取得がユーザーにより拒否されている break; case ATTrackingManagerAuthorizationStatusRestricted: // IDFAの取得がユーザーの設定により制限されている break; case ATTrackingManagerAuthorizationStatusNotDetermined: // IDFAの取得に関するリクエストをまだユーザーが受け取っていない break; default: break; } } else { // iOS13以前ではAppTrackingTransparencyを利用せずIDFA取得に関する判定をする if ([ASIdentifierManager sharedManager].isAdvertisingTrackingEnabled) { idfa = [ASIdentifierManager sharedManager].advertisingIdentifier.UUIDString; } } ``` - [AppTrackingTransparency](https://developer.apple.com/documentation/apptrackingtransparency) - [ASIdentifierManager](https://developer.apple.com/reference/adsupport/asidentifiermanager) ### Webページにデータ取得用のインターフェース作成 JavaScriptの雛形を準備し、Web画面に読み込ませる。 そのJavaScriptを介して、データを受け渡します。 ```swift func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) { // ページの読み込み準備開始 updateUserScript() } // MARK: - HTMLの読み込み前に動作するスクリプトの作成 func updateUserScript() { let script = createUserScript() // 登録されているスクリプトを削除 userContentController.removeAllUserScripts() // 新規のスクリプトを登録 userContentController.addUserScript(script) } func createUserScript() -> WKUserScript { // bundleId let bundleId = Bundle.main.bundleIdentifier ?? "" // IDFA, ATTダイアログの表示は別に行う必要があります let idfa = ASIdentifierManager.shared().advertisingIdentifier.uuidString // iOSバージョンを取得 let platformv = UIDevice.current.systemVersion // js let jsString = "window.adgAdParams = {idfa:'\(idfa)', appbundle:'\(bundleId)', platformv:'\(platformv)'};" let userScript = WKUserScript(source: jsString, injectionTime: .atDocumentStart, forMainFrameOnly: true) return userScript } ``` ```objectivec - (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation { //ページの読み込み準備開始 [self updateUserScript]; } #pragma mark - HTMLの読み込み前に動作するスクリプトの作成 - (void) updateUserScript { WKUserScript *script = [self createUserScript]; //登録されているスクリプトを削除 [self.userContentController removeAllUserScripts]; //新規のスクリプトを登録 [self.userContentController addUserScript:script]; } - (WKUserScript *) createUserScript { //bundleId NSString *bundleId = [[NSBundle mainBundle] bundleIdentifier]; // IDFA, ATTダイアログの表示は別に行う必要があります NSString *idfa = [[ASIdentifierManager sharedManager] advertisingIdentifier].UUIDString; // iOSバージョンを取得 NSString *platformv = [[UIDevice currentDevice] systemVersion]; //js NSString *jsStringTemplate = @"window.adgAdParams = {idfa:'%@', appbundle:'%@', platformv:'%@'};"; NSString *jsString = [NSString stringWithFormat:jsStringTemplate, idfa, bundleId, platformv]; WKUserScript *userScript = [[WKUserScript alloc] initWithSource:jsString injectionTime:WKUserScriptInjectionTimeAtDocumentStart forMainFrameOnly:YES]; return userScript; } ``` - [NSBundle bundleIdentifier](https://developer.apple.com/reference/foundation/nsbundle/1418023-bundleidentifier?language=objc) ### Webページからidfa, appbundle, platformvを受け取る ```js const idfa = window?.adgAdParams?.idfa; const appbundle = window?.adgAdParams?.appbundle; const platformv = window?.adgAdParams?.platformv; ``` 取得したadid,packageNameを利用し 広告タグにパラメータを生成してください。 下記サンプルでは、iOS又はAndroidからパラメータを受け取り、広告タグのパラメータに含めています。 ```js
``` ## 広告リダイレクトの対応 配信される広告のタップ動作によって、外部のサイトへ移動したり AppleStoreのリンクなどを開けるようにする。 サンプルではドメインによって、外部サイトを判定しています。 ```swift func configureWebView() { let configuration = WKWebViewConfiguration() ...(中略)... // jsのコンテンツを差し込むことで、idfaやappbundleをjsから取得できるようにする userContentController = WKUserContentController() configuration.userContentController = userContentController ...(中略)... } func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { // URL遷移時に呼ばれる guard let url = navigationAction.request.url else { decisionHandler(.allow) return } let currentDomain = webView.url?.host let targetDomain = url.host if handleClick(url: url, currentDomain: currentDomain, targetDomain: targetDomain, navigationAction: navigationAction) { decisionHandler(.cancel) } else { decisionHandler(.allow) } } func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? { // window.openの時などに呼ばれる print("createWebViewWithConfiguration") guard let url = navigationAction.request.url else { return nil } let currentDomain = webView.url?.host let targetDomain = url.host if handleClick(url: url, currentDomain: currentDomain, targetDomain: targetDomain, navigationAction: navigationAction) { print("URL opened in SFSafariViewController.") } return nil } func handleClick(url: URL, currentDomain: String?, targetDomain: String?, navigationAction: WKNavigationAction) -> Bool { // http(s) 以外のプロトコル: 他のアプリへ移動する場合 if !url.absoluteString.hasPrefix("http://") && !url.absoluteString.hasPrefix("https://") && UIApplication.shared.canOpenURL(url) { print("NOT HTTP/HTTPS : \(url.absoluteString)") UIApplication.shared.open(url, options: [:], completionHandler: nil) return true } guard let currentDomain = currentDomain, let targetDomain = targetDomain else { return false } // hrefが指定された場合、新しいwindowで開こうとしている場合 // 現在のドメインとは別のドメインのページを開こうとしている場合 // 外部サイトへの遷移としてSFSafariViewで表示する。 if (navigationAction.navigationType == .linkActivated || navigationAction.targetFrame == nil) && currentDomain != targetDomain { // SFSafariView let safariViewController = SFSafariViewController(url: url) present(safariViewController, animated: true, completion: nil) return true } return false } ``` ```objectivec - (void) configureWebView { ...(中略)... WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; ...(中略)... //jsのコンテンツを差し込むことで,idfaやappbundleをjsから取得できるようにする self.userContentController = [[WKUserContentController alloc] init]; [configuration setUserContentController:self.userContentController]; self.webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:configuration]; ...(中略)... } - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { //URL遷移時に呼ばれる NSURL *url = navigationAction.request.URL; NSLog(@"decidePolicyForNavigationAction:%@", url.absoluteString); NSString *currentDomain = webView.URL.host; NSString *targetDomain = navigationAction.request.URL.host; // 外部のブラウザで閲覧するかどうかを決める if ([self handleClick: url currentDomain: currentDomain targetDomain: targetDomain navigationAction: navigationAction]) { decisionHandler(WKNavigationActionPolicyCancel); return; } decisionHandler(WKNavigationActionPolicyAllow); } - (WKWebView *) webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures { //window.openの時などに呼ばれる NSLog(@"createWebViewWithConfiguration"); NSURL *url = navigationAction.request.URL; //読み込むURL NSString *currentDomain = webView.URL.host; //現在表示しているドメイン NSString *targetDomain = navigationAction.request.URL.host; //読み込む先のドメイン if ([self handleClick: url currentDomain: currentDomain targetDomain: targetDomain navigationAction: navigationAction]) { NSLog(@"URL opened in SFSafariViewController."); } return nil; } - (BOOL) handleClick:(NSURL *)url currentDomain:(NSString *)currentDomain targetDomain:(NSString *)targetDomain navigationAction:(WKNavigationAction *)navigationAction { // http(s) 以外のプロトコル: 他のアプリへ移動する場合 if (![url.absoluteString hasPrefix:@"http://"] && ![url.absoluteString hasPrefix:@"https://"] && [[UIApplication sharedApplication] canOpenURL:url]) { NSLog(@"NOT HTTP/HTTPS : %@", url.absoluteString); [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil]; return YES; } if (!url || !currentDomain || !targetDomain) { return NO; } // hrefが指定された場合、新しいwindowで開こうとしている場合 if ((navigationAction.navigationType == WKNavigationTypeLinkActivated || !navigationAction.targetFrame) // 現在のドメインとは別のドメインのページを開こうとしている場合 // 外部サイトへの遷移としてSFSafariViewで表示する。 // サイトに応じて適宜変更が必要 && ![currentDomain isEqualToString: targetDomain]) { // SFSafariView SFSafariViewController *safariViewController = [[SFSafariViewController alloc] initWithURL:url]; [self presentViewController:safariViewController animated:YES completion:nil]; return YES; } return NO; } ``` ## 動画の再生 広告内に動画が流れることがあります。インライン・自動再生を許可してください。 ```swift let configuration = WKWebViewConfiguration() // インライン再生を許可 configuration.allowsInlineMediaPlayback = true // すべてのメディアについてユーザインタラクションなしの自動再生を許可 configuration.mediaTypesRequiringUserActionForPlayback = [] ``` ```objectivec WKWebViewConfiguration *configuration = [[WKWebViewConfiguration alloc] init]; //インライン再生を許可 [configuration setAllowsInlineMediaPlayback:YES]; // すべてのメディアについてユーザインタラクションなしの自動再生を許可 [configuration setMediaTypesRequiringUserActionForPlayback:WKAudiovisualMediaTypeNone]; ``` --- ## バナー各種 [Q. バナー内での動画配信について](#q-バナー内での動画配信について) [Q. iPhoneで見た時に、オーバーレイの広告画像が被らないようにする方法](#q-iphoneで見た時にオーバーレイの広告画像が被らないようにする方法) --- ## Q. バナー内での動画配信について **A.** 広告枠サイズでバナーを選択いただいた際、 配信事業者によっては動画のクリエイティブが配信されます。 ご理解の上サイズの選択をお願いいたします。 --- ## Q. iPhoneで見た時に、オーバーレイの広告画像が被らないようにする方法 **A.** iPhoneの縦向き画面でオーバーレイ広告を表示する際、 ホームインジケーター部分にバナーが被らないように画像を配置しています。 ▼ 対象となる広告枠設定 - 広告タイプ:バナー - サイズ:320x50 - 広告枠設置位置:オーバーレイ - ※注意事項 ユーザー様側で、ホームインジケータに画像が被らないよう対応済みの場合は 広告タグ内の &autoPadding=true を外してください。 ▼ 画面イメージ ![画面イメージ](/img/adg-help/iphonx_overlay.original.png) --- ## 配信できる広告について [Q. アドジェネで配信できる広告](#q-%E3%82%A2%E3%83%89%E3%82%B8%E3%82%A7%E3%83%8D%E3%81%A7%E9%85%8D%E4%BF%A1%E3%81%A7%E3%81%8D%E3%82%8B%E5%BA%83%E5%91%8A) [Q. アドジェネで配信できる広告サイズ](#q-%E3%82%A2%E3%83%89%E3%82%B8%E3%82%A7%E3%83%8D%E3%81%A7%E9%85%8D%E4%BF%A1%E3%81%A7%E3%81%8D%E3%82%8B%E5%BA%83%E5%91%8A%E3%82%B5%E3%82%A4%E3%82%BA) [Q. APCとは](#q-apc%E3%81%A8%E3%81%AF) [Q. 対応アドネットワーク一覧](#%E5%AF%BE%E5%BF%9C%E3%82%A2%E3%83%89%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E4%B8%80%E8%A6%A7) [Q. 対応DSP一覧](#%E5%AF%BE%E5%BF%9Cdsp%E4%B8%80%E8%A6%A7) --- ## Q. アドジェネで配信できる広告 アドジェネで配信できる広告は大きく2種類あります。 **A.** **1. アドネットワーク広告** 広告枠申請時にアドジェネがデフォルトとして規定したアドネットワーク事業者の広告が配信できます。 デフォルトのアドネットワークは各広告枠のサイズ、プラットフォームによって異なります。 もちろん、デフォルトのアドネットワーク以外も申請可能です。 申請する場合は下記にご連絡をお願いします。 概ね1営業日~3営業日で対応しますが、アドネットワークによっては審査に時間がかかるものもあります。 窓口:[お問い合わせフォーム](https://forms.gle/sj43MsbZKnYxru8B6) お問い合わせ種別:運用・管理画面に関するお問い合わせ 必要事項:アドネットワーク追加希望の旨を記載いただき、パブリッシャー名(会社名)、対象広告枠名、配信希望アドネットワーク名を明記してください。 **2. RTB広告** RTB(Real-Time Bidding)広告はDSP各社から配信され、主にターゲティングに特化した広告です。 配信されるDSPは順次追加を行っており、アドジェネ側が追加対応をしたら自動的に追加配信されるようになります。 [現在対応しているDSP一覧](https://ad-generation.jp/support/adg-help/ad-type/demand/dsp) --- ## Q. アドジェネで配信できる広告サイズ **A.** 実装環境や配信構成、ブロック設定等によって案件量や収益性の状況が変わりますので、参考としてご覧ください。 アプリ(iOS/Android) | カテゴリ | サイズ | 案件量 | 収益性 | |---------|--------|:------:|:------:| | 動画リワード | 動画リワード | ◎ | ◎ | | バナー | モバイルバナー (320x50) | ◎ | ◯ | | | モバイルビッグバナー (320×100) | △ | △ | | | ミディアムレクタングル (300x250) | ◎ | ◎ | | | タブレット (728x90) | △ | △ | | ネイティブ(フリー型) | ネイティブ(フリー型) | ◎ | ◯ | WEB(スマホ/PC)の対応サイズについては、お問い合わせください。 --- ## Q. APCとは **A.** APC(Ad Parts Collection)とは、アドジェネと各アドネットワークがServer to Serverで接続し、広告をやりとりする配信方式です。 --- ## 対応アドネットワーク一覧 2024年6月現在、アドジェネで配信いただけるアドネットワークは以下のとおりです。 | ネットワーク | 対応サイズ | |------------|----------| | AfiO | バナー・ネイティブ・動画リワード | | AMoAd | バナー・ネイティブ | | AppLovin | 動画リワード | | i-mobile | バナー・ネイティブ | | LINE広告ネットワーク | 動画リワード | | maio | 動画リワード | | OpenX | バナー | | Pangle | 動画リワード※Pangleをご利用いただく場合は、Pangle利用規約の内容確認及び同意やPangleプライバシーポリシーの設置等が必要になります。詳しくはお問い合わせフォームまたは担当者へお問い合わせください。 | | poets | バナー・ネイティブ | | Magnite(Rubicon) | バナー | | UnityAds | 動画リワード | | Yahoo!ディスプレイアドネットワーク | バナー・ネイティブ | | Zucks | バナー・ネイティブ | | Logly | ネイティブ | 細かいサイズ対応など詳細については[お問い合わせフォーム](https://docs.google.com/forms/d/e/1FAIpQLScYROjUpoEQGERI5T9Ii9pZ-LHlsqZYKJgsPBZcHHCZIO0S8w/viewform)よりお申し付けください。 アドネットワーク事業者側の審査基準により接続不可の場合もございますので、予めご了承ください。 --- ## 対応DSP一覧 **A.** 2024年1月現在 アドジェネで配信されているDSPは以下の通りになります | サービス名 | 会社名 | |------------|--------| | Appier | Appier Japan株式会社 | | BidSwitch | CRITEO株式会社 | | Criteo | CRITEO株式会社 | | Dynalyst | 株式会社サイバーエージェント | | DV360 | Google LLC | | FreakOut DSP | 株式会社フリークアウト | | Liftoff | Liftoff Mobile株式会社 | | Logicad | SMN株式会社 | | PubMatic(Exchange Bidder) | PubMatic,Inc. | | PangleDSP | ByteDance Ltd. | | ScaleOut | Supership株式会社 | | UNICORN | UNICORN株式会社 | | UNIVERSE | 株式会社マイクロアド | | Zucks DSP | 株式会社CARTA MARKETING FIRM | | Moloco | MOLOCO.inc | | RTB House | RTB House Japan株式会社 | | The Trade Desk | The Trade Desk,inc. | | WebEye | HONGKONG WEBEYE LIMITED | | Persona.ly | Persona.ly Ltd. | | Index Exchange | Index Exchange | | nexxen | Unruly Media株式会社 | | DATAONE DSP | 株式会社データ・ワン | | ANA Moment Ads | ANA X株式会社 | --- ## ヘッダービディング [Q. ヘッダービディング対応状況](#q-ヘッダービディング対応状況) [Q. 導入から配信までの流れ](#q-導入から配信までの流れ) [Q. 対応フォーマット](#q-対応フォーマット) [Q. 広告ブロック](#q-広告ブロック) [Q. アプリ対応について](#q-アプリ対応について) [Q. レポートとお支払いについて](#q-レポートとお支払いについて) ## Q. ヘッダービディング対応状況 **A.** アドジェネではBidderとして下記Header Biddingソリューションへ接続できます。 接続方法の詳細は、弊社もしくは提供事業者までお問合せください。 <アドジェネが接続可能なHeader Biddingソリューション> ▼Amazon Publisher Services ・Transparent Ad Marketplace(TAM) ▼Google Open Bidding ・Google Ad Manager ・AdMob ▼Open Source ・Prebid.js ## Q. 導入から配信までの流れ **A.** ### ①アカウントの開設 アドジェネの[アカウントを開設](https://ad-generation.jp/registration/publishers/new)してください。 ※すでにアカウントの登録がある媒体社様はこちらの手順は不要です。 ### ②ads.txtの設置 アドジェネ管理画面の アカウント登録→ads.txt より、ads.txtが取得できますので、サイトに設置してください。 ※アプリの場合こちらの手順は不要です。 ads.txtについての詳細は以下のリンクからご参照ください。 [ads.txt](/help/more/adstxt) ### ③広告枠の情報のご共有 弊社からお送りするテンプレートへ配信したい広告枠の情報を記入し、お送りください。 営業担当もしくは[メールフォーム](https://forms.gle/G5raXDYLmGtRUbKk6)でご連絡をお願いします。 ### ④配信準備(弊社作業) 弊社側で接続設定を行います。 ### ⑤配信開始 媒体社様側の配信準備(実装など)が整いましたら、配信開始いたします。 以上が配信までの流れとなります。 詳しくは[メールフォーム](https://forms.gle/G5raXDYLmGtRUbKk6)よりご連絡ください。(お問い合わせ種別:その他お問い合わせ) ## Q. 対応フォーマット **A.** 以下の広告フォーマットをサポートしております。 Web ( Desktop / Mobile ) Mobile Apps (iOS / Android) Banner Native Video Banner Native Video Prebid.js 〜 ver. 1.31.0 固定サイズのみ ※1 ※2 x x x x x ver. 1.32.0 〜 ◯ x x x x x ver. 2.6.0 〜 4.43.3ver. 5.4.0 ◯ ◯ x x x x TAM ◯ x x ◯ x x OpenBidding (Google Ad Manager) ◯ x ◯ ◯ x ◯ OpenBidding (AdMob) - - - ◯ x ◯ ※1 Desktopでは、スーパーバナー(728x90) レギュラーバナー(468x60)スカイスクレイパー(160x600)レクタングル(300x250)ラージレクタングル(336x280)ハーフページ(300x600)のみ対応しています。 ※2 Mobileでは、モバイルバナー (320x50) モバイルビッグバナー (320x100) ミディアムレクタングル (300x250) タブレット(728x90)のみ対応しています。 ## Q. 広告ブロック **A.** 任意の広告案件をブロックすることが可能です。 広告枠のご共有の際にカテゴリブロック、ドメインブロックのご要望もお伺いいたしますので、その際にお伝えください。 もちろん後からの追加も可能です。 ## Q. アプリ対応について **A.** アプリにも対応しております。 媒体社様が使用しているアドサーバーの種類により提案できるソリューションが異なりますので、 まずは[メールフォーム](https://forms.gle/G5raXDYLmGtRUbKk6)よりお問い合わせください。 ## Q. レポートとお支払いについて **A.** 各ラッパーソリューションにより、レポートの確認方法、お支払い方法が異なります。 導入時にご案内いたしますので、詳しくはお問い合わせくださいませ。 その他ご不明点がございましたら、メールフォームよりご連絡ください。 (お問い合わせ種別:収益及びお支払いに関するお問い合わせ) --- ## ネイティブ広告 [Q. ネイティブ広告とは](#q-ネイティブ広告とは) [Q. ネイティブ広告導入までの流れとご注意](#q-ネイティブ広告導入までの流れとご注意) ネイティブ広告は、アプリやサイトにあわせた広告枠を自由にデザインできる広告タイプです。 --- ## Q. ネイティブ広告とは **A.** 広告タイプ「ネイティブ」(サイズ:フリー型)では、アプリやサイトにあわせた広告枠を自由にデザインできます。 広告枠のレイアウトが定型でないため、広告要素(パーツ)を組み合わせたレイアウトの設定が必要となります。 アドジェネの管理画面で広告枠を新規に作成する際に、利用するパーツを選択してください。 ![ネイティブ広告イメージ](/img/adg-help/NativeAdSamples.png) ### ▼広告要素(パーツ) **画像(動画)** 画像(動画)は、形状によって2種類のパーツがあります。 広告枠で表示させたいパーツについて「利用する」をお選びください。 2種類どちらも「利用する」で設定することも可能ですが、 条件に該当する広告案件が少なくなるため、どちらか1種類のご利用をおすすめします。 テキストのみの広告の場合は、どちらも「利用しない」を選択してください。 1. メインパーツ 形状が、横長長方形の画像(静止画および動画)パーツです。 「画像/動画どちらでも可(推奨)」を選択すると、静止画の画像か動画が表示され、 最も多くの広告案件の中から選ばれた広告が配信されます。 UIなどの都合で動画を表示させたくない場合は、「画像のみ利用可」を選択してください。 動画を含む広告は高い効果を見込めますが「動画のみ利用可」を選ぶと、配信できる広告案件が少なくなる懸念があります。 メインパーツとして表示される動画の形状は、横16:縦9のサイズとなっています。 画像は、横5:縦3、または横1.91:縦1の比率が一般的です。 広告案件によって異なるサイズやアスペクト比のパーツが配信されることをご考慮ください。 なお、動画をご利用の場合は、Android/iOSアプリで、v2.9.0以上のアドジェネSDKとADGMediaViewの実装が必須となっています。 2. アイコン画像 形状が、正方形の画像パーツです。静止画のみで動画が配信されることはありません。 1辺100px程度の比較的小さい画像が配信されることもあるため、大きいサイズを想定したデザインでの使用はおすすめいたしません。 **テキスト** テキストのパーツは4種類です。 配信事業者によっては用意していないパーツがあり、非対応のパーツを「利用する」に設定した広告枠では、その事業者は配信対象外となりますのでご注意下さい。 必要最小限のパーツのみ「利用する」設定にすることで、最大限の広告案件が配信対象となります。 また下記の各パーツの文字数は、広告案件や配信事業者によって異なるため、目安としてご覧ください。 1. タイトル 広告案件のキャッチコピーとなるテキストです。広告案件によって異なりますが、10〜30文字程度のテキストが配信されます。 ほぼ全ての事業者の広告案件で用意されているパーツです。 2. リード文 タイトルを補足する説明文です。広告案件によって異なりますが、30〜90文字程度のテキストが配信されます。 ほぼ全ての事業者の広告案件で用意されているパーツです。 3. 広告主 企業やブランドの名称、ゲームのタイトルなど、広告案件のスポンサー名です。 数文字〜20文字程度のテキストが配信されます。 広告案件にこの項目の情報がない場合は、デフォルトのテキスト"Sponsored"が配信されます。 まれに対応してない事業者があります。 4. CTAボタン 「詳しく見る」「インストールする」など広告のクリックを促すボタン(CTAボタン)に表示する、数文字〜10文字程度テキストです。 広告案件にこの項目の情報がない場合は、デフォルトのテキスト「詳しくはこちら」が配信されます。 このパーツに対応していない事業者もあります。 **その他** 1. オプトアウトページURL インフォメーションアイコン(iマーク)のクリックで広告事業者のオプトアウト設定ページに遷移させるため、 ページのURLがパーツとして配信されます。 アドネットワーク事業者各社はターゲティング広告の利用を希望しないユーザー向けにオプトアウト設定ページを用意しています。 (ターゲティング広告以外の広告は、オプトアウト後も配信されます) ターゲティング広告の利用をユーザー自身が選択できる安心・安全な環境を提供するために、 iマークとオプトアウトリンクを必ず設置いただけますようお願いいたします。 ## Q. ネイティブ広告導入までの流れとご注意 **A.** ### 概要 ネイティブ広告を配信する際には、使用するパーツ(広告要素)等の情報を設定した「テンプレート」をアドジェネ管理画面に登録し、広告枠と紐づける設定を行います。 アプリの場合は、原則としてアプリ内でデザインを指定します([実装ガイド](/help/implementation-guide/native) 参照)。この際もテンプレートを作成し、使用するパーツを指定しておく必要があります。 Webサイトでは、パーツを指定した上で、デザインを記述したHTMLをテンプレート内に登録します。 ※2024年4月より前に作成されたネイティブ広告枠(フリー型)には、下記の設定が適用されません。Webサイトで過去の広告枠のデザインを変更する際は、新たに広告枠を作成の上でサイトに実装しなおすようお願いいたします。 ### テンプレートの登録、変更 ネイティブ(フリー型)の広告枠を作成する前に、必ずテンプレートを登録しておくことが必要です。 管理画面(左メニュー)>「広告管理」>「ネイティブ広告テンプレ」 ![ネイティブ広告テンプレート管理画面](/img/adg-help/native-template001.png) 登録されたテンプレートが一覧で表示されます。それぞれのテンプレートの「編集」を押下することで、設定された内容を確認できます。登録後の変更が可能なのは「デザインコードエディター」の内容のみとなります。他の項目は、登録後の変更ができないためご注意ください。 テンプレートを作成するには「新規作成」をクリックし、遷移先の画面で下記を設定します。前記の通り、デザインコードエディターの内容以外は登録後に変更できません。 各項目について説明します。 ![ネイティブ広告テンプレート登録画面](/img/adg-help/native-template002.png) #### テンプレート名 複数のテンプレートを登録可能です。作成する際にテンプレートに名前をつけてください。登録後の変更はできません。 #### ネイティブアプリ内にてデザイン構築(チェックボックス) アプリ内で広告のデザインを指定する場合に、チェックを入れてください。Webサイトではチェックを外しての登録となります。登録後の変更はできません。 #### レイアウトの選択 ![ネイティブ広告テンプレート登録画面-レイアウト選択](/img/adg-help/native-template003.png) 5種類のテンプレートをデフォルトとしてご用意しています。 アプリの場合は使用するパーツの組み合わせが同じものを選ぶか、「自由記述」を選択して下にスクロールし、個別にパーツを選択してください。 Webサイトの場合は、5種類のテンプレートのいずれかを選択することで、下記の「デザインコードエディター」にHTMLが記述され、そのままお使いいただくことができます。デザインコードエディターの内容を修正することも可能です。「自由記述では、使用するパーツを指定した上で、独自のHTML を登録することができます。 テンプレートの登録後にレイアウトの項目を変更することはできません。 #### パーツ(広告要素)の選択 ![ネイティブ広告テンプレート登録画面-パーツ選択](/img/adg-help/native-template004.png) レイアウトに使用するパーツを選択します。 それぞれのパーツごとに「利用する/利用しない」を指定してください。画像の場合は「最小サイズ」を指定することもできます。また「メイン画像」では、動画と静止画の利用をお選びいただけます。 各パーツの詳細は「ネイティブ広告とは」をご覧ください。 利用するパーツや項目の指定が多いほど、配信できる事業者や広告案件が少なくなることにご注意ください。指定を最小限にすることで、収益向上につながります。 登録後の変更はできません。 デザインコードエディター ![ネイティブ広告テンプレート登録画面-デザインコードエディター](/img/adg-help/native-template005.png) デザインをHTMLで記述するための入力欄です。ただし上記「ネイティブアプリ内にてデザイン構築」にチェックが入っていると表示されません。 5つのデフォルト・テンプレートを選択した場合は、対応したHTMLが記述された状態になります。デフォルト・テンプレートを編集することで、サイトに適したデザインに修正することが可能です。 画像やテキスト等のパーツは、HTML内にマクロを配置することで、広告配信時にそれぞれのマクロに対応した記述に置換されます。 「利用必須のマクロ(必須)」と「利用可能マクロ(オプション)」が、デザインコードエディターの上にある青い背景の領域に表示されています。 テンプレートで「利用する」と指定されたパーツのマクロが、HTMLに全て含まれている必要があります。 各パーツの詳細は「[ネイティブ広告とは](/help/ad-type/native-ad#q-%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E5%BA%83%E5%91%8A%E3%81%A8%E3%81%AF)」をご覧ください。 テンプレート登録後も、内容を変更することが可能です。 ### 広告枠との紐づけ 新規枠の作成 「[広告枠を作る](/help/flow/add-placement)」もあわせてご覧ください。 ネイティブ広告の広告枠を作成するには、新規の広告枠登録画面で「広告タイプ」で「ネイティブ」を選択します。サイズは「フリー型」になります。 さらに「ネイティブ広告テンプレ」で、作成したテンプレートを選択します。 その他の項目は適宜、入力/選択するようお願いします。 ![ネイティブ広告枠登録画面](/img/adg-help/native-template007.png) 広告枠作成後に、弊社での審査と、配信するアドネットワークの登録作業を行います。 完了後に、ご登録のメールアドレスにご連絡差し上げますので、必ずご確認ください。 ご対応が終わった広告枠は、広告配信が可能な状態になっています。 左メニューの「広告管理」>「広告枠」をクリックすると広告枠の一覧が表示されます。 作成された広告枠の「タグ取得」を押下すると、広告枠をWebサイトに設置するために必要なHTMLタグが表示されます。 アプリの場合は、発行された広告枠IDをお使いください。 ![アプリの場合](/img/adg-help/native-template008.png) ### ネイティブ広告を設定する際のご注意 #### テンプレートの変更 - 登録済みのテンプレートの設定について、デザインコードエディターの内容以外は変更できません。新規にテンプレートを作成してご利用ください。 #### デザインやデザインコードエディターについてのご注意 - デザインコードエディターの記述には「利用必須のマクロ」が含まれている必要があります。利用必須のマクロは「利用する」を選択したパーツの組み合わせにもよりますが、テンプレートの変更後にはパーツの組み合わせを変更できません。その際には新規にテンプレートを作成してご利用ください。 - 原則として、広告はiframeタグの外で表示されます。広告外のコンテンツ領域等とデザインの指定が干渉しあわないよう、CSSのclass名にご注意ください。 - 登録されたデザインが正しく表示されているか、実際の運用の前に必ずご確認ください。 #### 広告であることを示す表示 - デザインには「AD」「PR」「広告」といった「広告であることを示す表記」を、視認可能な大きさで表示されるように必ず設置してください。 #### インフォメーションアイコン - 広告内にインフォメーションアイコンを設置することで、閲覧したユーザーが自身の意思でオプトアウト(行動ターゲティング広告を無効化)することができます。ユーザーのプライバシー保護と有益な広告の配信のために、必ずインフォメーションアイコンを設置するようお願いいたします。 - 「オプトアウトページURL」のマクロを設置し、ユーザーが遷移できるように設置してください。インフォメーションアイコンは「インフォメーションアイコンURL」のマクロを設置することで適切な画像ファイルが表示されます。 --- ## 動画リワード [Q. 動画リワード広告とは](#q-動画リワード広告とは) [Q. 配信できるアドネットワーク、DSP](#q-配信できるアドネットワークdsp) ## Q. 動画リワード広告とは **A.** 動画リワード広告とは、**アプリ内で使用可能なインセンティブ(アイテムやライフ等)をユーザーに付与する代わりに、約15秒〜30秒程度の動画広告を表示する広告フォーマット**です。 強制視聴型の動画広告と違い、動画視聴を希望したユーザーにのみインセンティブを付与する点で、一般的な動画広告とは異なるものです。 動画視聴後に付与するインセンティブの例としては、ゲーム内で使えるアイテムやコンティニューの権利、ツール系アプリの場合は有料の機能を限定的に開放する、などがあります。 ![動画リワード広告イメージ](/img/adg-help/rewardervideoadimage.png) ※アプリのインストールを成果地点とした「ブースト広告」とは異なり、動画視聴に対してアプリ内で使用可能なインセンティブを付与する広告となります。そのため、Apple、Googleなどプラットフォームの規約に触れるようなものではありません。 ## Q. 配信できるアドネットワーク、DSP **A.** 動画リワード広告を配信する場合、動画リワード専用のアドジェネSDK(VAMP)と、アドネットワーク各社のSDKを導入いただく必要がございます。 ### VAMP SDKのみで配信できる広告 RTB、[APC](/help/ad-type/demand#q-apc%E3%81%A8%E3%81%AF)のアドネットワーク、純広告、自社広告 ### 追加でSDKの導入が必要なアドネットワーク 以下のドキュメントをご確認ください。 - [VAMP iOS SDKのドキュメント](/vamp/ios) - [VAMP Android SDKのドキュメント](/vamp/android) --- ## アカウント管理 [Q. 管理画面にログインができない](#q-%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2%E3%81%AB%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E3%81%8C%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84) [Q. ログイン情報の変更](#q-%E3%83%AD%E3%82%B0%E3%82%A4%E3%83%B3%E6%83%85%E5%A0%B1%E3%81%AE%E5%A4%89%E6%9B%B4) [Q. ユーザーを追加したい・停止したい](#q-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%82%92%E8%BF%BD%E5%8A%A0%E3%81%97%E3%81%9F%E3%81%84%E5%81%9C%E6%AD%A2%E3%81%97%E3%81%9F%E3%81%84) [Q. 退会](#q-%E9%80%80%E4%BC%9A) ## Q. 管理画面にログインができない **A.** 以下、2点をご確認ください。 **①新規登録後、アクティベーションを行っているか。** アクティベーションは、新規登録後にメールで届く「【Ad Generation】申込審査結果のご案内」というメール内のURLをクリックすることで完了します。 この手順を行っていない場合、管理画面を使用することができません。 メールが届いていない場合は、[メールフォーム](https://forms.gle/GDGd4A8HBK6UykJF8)よりご連絡ください。 **②ログインID / パスワードが間違っていないか。** **ログインID**:ご登録されたメールアドレスです。 **パスワード**:ログイン画面の「パスワードを忘れた方」より再設定が可能です。 ## Q. ログイン情報の変更 **A.** 下記の手順に従い変更します。 管理画面にログイン>画面右上のアカウント名>ユーザー設定>該当箇所を変更>更新する ## Q. ユーザーを追加したい・停止したい **A.** 以下の方法で追加・停止することができます。 ### 【追加方法】 ①アカウント>ユーザー一覧をクリック ②新規作成をクリック ③必要事項を入力 ④「登録する」をクリック ![ユーザー追加](/img/adg-help/account001.png) ### 【停止方法】 ①アカウント>ユーザー一覧をクリック ②該当アカウントの「停止する」をクリック ![ユーザー停止](/img/adg-help/account002.png) ## Q. 退会 **A.** [メールフォーム](https://forms.gle/EoX5H484cxXXhFbFA)よりお知らせください。 退会申請を受信後、退会手続きを行います。 手続き完了後にその旨をメールでお知らせします。 なお、退会すると、レポートやご収益の参照も含めた管理画面へのログインができなくなります。 後日、これらが必要となる場合は、退会前にダウンロード、画面のスクリーンショット等での保存を行ってください。 退会後は広告の配信も停止されますので、SDK・広告タグは削除してください。 月末締めで、翌々月末に今までの収益額をお支払します。 --- ## 案件のブロック [Q. デフォルトのブロックカテゴリ](#q-%E3%83%87%E3%83%95%E3%82%A9%E3%83%AB%E3%83%88%E3%81%AE%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA) [Q. 案件ブロックの流れ](#q-%E6%A1%88%E4%BB%B6%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%AE%E6%B5%81%E3%82%8C) [Q. ドメイン・カテゴリブロック(RTB/HB)の設定方法](#q-%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%83%96%E3%83%AD%E3%83%83%E3%82%AFrtbhb%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95) [Q. ブロックしているADNWのカテゴリを解除したい](#q-%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%97%E3%81%A6%E3%81%84%E3%82%8Badnw%E3%81%AE%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%82%92%E8%A7%A3%E9%99%A4%E3%81%97%E3%81%9F%E3%81%84) [Q. ブロックしたはずの案件が配信されていた場合](#q-%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF%E3%81%97%E3%81%9F%E3%81%AF%E3%81%9A%E3%81%AE%E6%A1%88%E4%BB%B6%E3%81%8C%E9%85%8D%E4%BF%A1%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%81%9F%E5%A0%B4%E5%90%88) ## Q. デフォルトのブロックカテゴリ **A.** 広告枠をご登録いただいた際に、以下のカテゴリはデフォルトでブロックしております。 追加でブロックしたい場合はこちら、ブロックを解除したい場合はこちらを御覧ください。 ### 【事前ブロック対象カテゴリ】 - 特殊カテゴリ(7件) - アルコール - 選挙 - 金融(ローン・クレジット・消費者金融) - 結婚情報 - 公営ギャンブル(宝くじ・TOTO・競技) - タバコ - 電子/無煙タバコ - センシティブ・アダルト(20件) - 占い - 電子書籍(アダルト弱) - 電子書籍(アダルト強) - 高収入・ナイト求人 - 不動産投資 - 仮想通貨 - 治験 - 美容外科 - 審美歯科・レーシック - ポイント・懸賞 - その他ギャンブル - パチンコ・スロット - 出会い - マッチングアプリ - 興信・探偵 - 情報商材 - 宗教 - アダルト - ゲーム(アダルト) - その他 ## Q. 案件ブロックの流れ **A.** 配信される案件をブロックしたい場合、配信元やブロックする単位によってブロックの方法が変わります。 ### RTB/HeaderBiddingで配信される案件をカテゴリやドメイン指定でブロックする - 管理画面上でブロックが可能です。 - 設定方法は[こちら](/help/flow/ad-block#q-%E3%83%89%E3%83%A1%E3%82%A4%E3%83%B3%E3%82%AB%E3%83%86%E3%82%B4%E3%83%AA%E3%83%96%E3%83%AD%E3%83%83%E3%82%AFrtbhb%E3%81%AE%E8%A8%AD%E5%AE%9A%E6%96%B9%E6%B3%95)をご覧ください。 ### アドネットワーク経由で配信される案件をカテゴリや案件指定でブロックする 以下の内容を記載の上、[お問い合わせフォーム](https://forms.gle/zcftJw2sFMPB7Nyo6)よりご依頼ください。 通常配信では、数十社のDSP/アドネットワークより何万もの案件が配信されております。 その中から特定の案件を速やかに配信停止するには、 案件名やクリエイティブの特徴、配信元ネットワーク等、特定するための情報が必要になるためご協力をお願いします。 - 必須 - 案件名(タイトル、特徴など) - カテゴリブロックの場合はブロックしたいカテゴリ名 - その案件をブロックしたい広告枠ID - 可能であれば - ブロックしたい案件が配信されていた日時 - 案件のスクリーンショット - 配信元のアドネットワーク名 参考:配信元ネットワークの確認方法 ![配信元ネットワークの確認方法](/img/adg-help/ad-block001.png) ①広告クリエイティブの隅に掲載されている[iマーク]をタップすると配信元ネットワークのオプトアウトページに遷移しますので、そのページから配信元が確認できます。(画像は例) ②広告表示されたまま機内モードに切り替えてから広告をタップすると遷移先のURL内に配信元ネットワーク名が確認できる場合があります。 なお、案件の停止をお急ぎで配信元のアドネットワークが分かっている場合は配信設定画面でアドネットワークを停止する方法もあります。 ただし、アドネットワークを停止する場合収益に影響が出る可能性がありますので、停止したいアドネットワークの売上規模を必ずご確認の上ご判断ください。 **【配信設定画面(アドネットワークの停止)の操作方法】** 管理画面>左メニュー>広告管理>広告枠>該当広告枠の「配信設定」 該当アドネットワークの左側のチェックを外していただき、更新ボタンを押す。 設定いただいてから30分〜1時間で設定が反映され、停止となります。 **【レポート画面の確認方法】** 管理画面>左メニュー>レポート>検索項目の「表示方法」にて「アドネットワーク別」を選択の上「検索」 アドネットワーク毎にグラフで収益の推移が表示されますので、ご確認ください。 ## Q. ドメイン・カテゴリブロック(RTB/HB)の設定方法 **A.** RTB/HeaderBiddingで配信される広告のみ、媒体社様管理画面よりドメイン・カテゴリでのブロックを設定することができます。 下記の操作方法に従って設定してください。 ### 1. ブロックルールを作成する ブロック画面上の「新規ブロックルール追加」をクリックします。 ブロックルールの名称を任意で入力し、ドメインブロック方式を選択し、ルールを登録します。 ![ブロックルール作成](/img/adg-help/ad-block002.png) 注意:ドメインブロック方式 ① ドメインブロック方式をブラック・ホワイトが選択します。 ② ホワイトリストは、指定したドメインのみ配信されるため収益に影響があります。 ③ ホワイトリストはドメインブロックに対してかかるため、ホワイトリストを選択した場合もカテゴリブロックでのチェック項目はブロックされます。 ### 2. 対象となるドメインを指定する ブロックルールの設定編集画面より、下記のいずれかの方法でドメインを指定します。 1. 広告主ドメイン選択 「広告主ドメイン選択」タブにて、アドジェネ全体で入札実績のあるドメインが一覧で表示されます。 ![広告主ドメイン選択](/img/adg-help/ad-block003.png) - 検索機能を使って、リストの中からブロックルールの対象とするドメインを設定できます。 - AppleBundleタブではiOS、GooglePackageタブでAndroidアプリのリストが表示されます。 - 選択済みのドメイン名のブロックを解除する際は、「ブラックリスト削除」または「ホワイトリスト削除」をクリックしてください。 - 検索フォームのプルダウンメニューで「リスト追加済」を選択すると、ブロックルールに追加しているドメイン名のみを一覧で表示できます。 2. 広告主ドメイン入力 「広告主ドメイン入力」タブより、上記に存在しないドメインもブロックルールの対象とすることができます。 指定したいドメインを「追加ドメイン」欄に入力し追加します。 ![広告主ドメイン入力](/img/adg-help/ad-block004.png) **設定いただくドメインについて** ①広告主ドメイン 広告内容のアプリタイトル/商品名などをご確認いただき、ストアURLのIDやサービスサイトのドメイン、サービス提供元のドメインをご設定ください。 ②アプリ案件の場合、広告主ドメインと合わせて、設定をお願いします。 ▼ストアURLのID例  iOS:ストアのIDの数字部分  例) https://apps.apple.com/jp/app/id1111111111 の場合    1111111111 を設定してください。  Android:id="パッケージ名"  例) https://play.google.com/store/apps/details?id=com.... 場合    id=com.abc.abcde の部分を設定してください。  id= が無いとweburlと判断され、対象アプリがブロックに追加されませんのでご注意ください。  リストに追加されたAPPは、広告主ドメインタブ・AppleBundleタブ・GooglePackageタブに追加されます。 3. 案件によっては、APPバンドルではなく広告主ドメインが指定されている場合もございます。 ブロックが効かない場合は広告主ドメインもご設定ください。 ### 3. 広告主カテゴリの選択 「カテゴリ選択」タブにて、広告主のカテゴリブロックを設定できます。 大カテゴリの+をクリックすることで、小カテゴリが設定できます。 センシティブ・アダルトカテゴリについてはデフォルトでブロックされた状態になっているため、配信可能な場合はチェックを外してください。 ※ こちらの機能は2022年4月末にかけて段階的に開放予定です。 ![広告主カテゴリ選択](/img/adg-help/ad-block005.png) ### 4. ブロックルールが適用される広告枠を指定 ブロックルールの設定編集画面より、ブロックルールを適用させる広告枠を選択します。 ![ブロックルール適用広告枠選択](/img/adg-help/ad-block006.png) ### 5. 内容の確認 ブロックルール設定確認画面より、指定したドメインと枠を一覧で確認することができます。 ### 6. 未設定の枠に関して ブロックルールが設定されていない枠があると上部にアラートが表示されます。 また、ブロックルールが設定されていない枠はブロックルール一覧画面にて表示されます。 ブロックルールが設定されていない枠は、センシティブ・アダルトカテゴリが自動でブロックされた状態になります。 ![未設定枠アラート](/img/adg-help/ad-block007.png) ## Q. ブロックしているADNWのカテゴリを解除したい **A.** すでにブロックされているADNWのカテゴリのブロック解除を行いたい場合は、 下記情報を添えて、[お問い合わせフォーム](https://docs.google.com/forms/d/e/1FAIpQLScYROjUpoEQGERI5T9Ii9pZ-LHlsqZYKJgsPBZcHHCZIO0S8w/viewform)よりご連絡ください。 - 媒体社名 - アプリ/サイト名、広告枠名(ID) - ブロック解除希望カテゴリ ADNW全てに反映されるよう、弊社側で設定いたします。 ## Q. ブロックしたはずの案件が配信されていた場合 **A.** 広告配信事業者各社によって、カテゴリ / ドメインの規定が異なるため、ブロック設定後も意図しない広告が配信されてしまう可能性がございます。 発見された場合は、下記情報を添えて、[お問い合わせフォーム](https://docs.google.com/forms/d/e/1FAIpQLScYROjUpoEQGERI5T9Ii9pZ-LHlsqZYKJgsPBZcHHCZIO0S8w/viewform)よりご連絡ください。 - 媒体社名 - アプリ/サイト名、広告枠名(ID) - ブロック希望カテゴリ / ドメイン - 配信された広告のスクリーンショット 状況確認後、対応させていただきます。 --- ## 広告枠を作る 広告を掲載予定のアプリ・Webサイトを登録し、広告枠を作成します。 広告配信開始までの流れは下記の通りです。 ※接続方式によって設定手順が異なります。下記より詳細をご確認ください。 [Open Biddingの設定手順はこちら](/help/implementation-guide/open-bidding) [Prebidの手順はこちら](/help/implementation-guide/prebid) ## ①アプリ・Webサイトの登録 まずは、アプリ・Webサイト一覧画面の新規登録より、アプリ・Webサイトを登録します。   ![アプリ・Webサイト登録画面](/img/adg-help/add-placement001.png) ![アプリ・Webサイト登録画面](/img/adg-help/add-placement002.png) ## ②広告枠作成 ①で登録したアプリ・Webサイトで広告枠を作成します。   ![アプリ・Webサイト登録画面](/img/adg-help/add-placement003.png) ![アプリ・Webサイト登録画面](/img/adg-help/add-placement004.png) ## ③広告枠審査 作成いただいた広告枠の審査を弊社で行います。 この時に、配信するアドネットワークの登録作業を弊社で行います。 ## ④SDK・広告タグの実装 1営業日~3営業日程度で広告枠審査が完了し、通過の場合は広告枠ID・広告タグが生成されます。 生成された広告枠ID・広告タグを用いてアプリ・Webサイトへ広告の実装を行います。 ## ⑤配信開始 本番環境にリリースし、配信スタートです。 --- ## 実装(SDK) 下記ページに従い、SDKをアプリへ組み込んでください。 - [バナー広告](/help/implementation-guide/banner) - [ネイティブ広告](/help/implementation-guide/native) - [動画リワード広告](/help/implementation-guide/rewarded-video) --- ## 管理画面の使い方 [Q. 配信設定画面の使い方](#q-%E9%85%8D%E4%BF%A1%E8%A8%AD%E5%AE%9A%E7%94%BB%E9%9D%A2%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9) ## Q. 配信設定画面の使い方 **A.** 広告枠作成後、IDが発行された時点で以下の2種類の広告が配信される状態(配信ON)になっています。 - RTB - そのサイズに対応した最低限のアドネットワーク 配信設定画面では、広告枠ごとにアドネットワークのON/OFFや細かい比率の設定をすることができます。 ※なお、各項目を更新した場合、実際の広告配信への反映には30分〜1時間程度かかります。 【配信設定画面の操作方法】※数字は見本です ![配信設定画面](/img/adg-help/management001.png) ### 配信のON/OFF アドネットワーク枠ごとに配信のON/OFFを設定できます。 RTB及びアドネットワーク(ADNW)ごとの配信のON/OFFは、それぞれのチェックボックスにチェックを入れる/外す、 そのあとに更新ボタンを押すことによって反映されます。 ### RTB設定 ![RTB設定画面](/img/adg-help/management002.png) 広告枠作成後はデフォルトで「ユニファイドオークションを有効にする」にチェックが入った状態になっています。 ご自身でフロアプライスを設定したい場合は、「ユニファイドオークションを有効にする」のチェックを外し、 「フロアプライス設定」の「手動」を選択後、横の入力欄にフロアプライス(円)を入力してください。 ※RTB配信ロジック及びユニファイドオークションについては こちらをご覧ください。 ### ADNW設定 - **手動配信比率**:配信比率%を手動で設定することが可能です(1〜100まで整数が入力可能) - 完全固定:入力した比率%で固定されます。数字を入れないアドネットワークはeCPMに応じて比率が上下します。 - すべてのアドネットワークで比率を固定する場合は各アドネットワークの比率の合計が100になるように設定してください。 - 下限指定:入力した比率%を下限の比率とし、eCPMが他社より高い場合はそれ以上の比率%になることもあります。 - **カスタムeCPM**:比率を調整するためのCPMを手動で入力することが可能です(円。小数点以下第2位まで入力可能) - 自動最適化:ここにチェックが入っているときは、実績を元にeCPMが算出されます。 - 手動CPM最適化:入力したeCPMの価格で他社と比較され、比率が自動調整されます。 - **配信比率eCPM**:配信比率を決定するための最新のeCPMが表示されます。「手動CPM最適化」が設定されている場合はその金額が適用されます。 - **現状配信比率**:現時点の各社の配信比率(%)が表示されます。 - 配信比率が「優先配信」となっているアドネットワークは、アドネットワーク自体にフロアプライスが設定されているなどの理由で%が振られているアドネットワークよりも優先して呼び出されます。 ### 上位グループ設定【オプション】 オプション機能です。クリックすると設定方法の詳細が表示されますのでご確認のうえご利用ください。 ### 自社広告・純広告の配信設定 自社広告及び純広告の配信ON/OFFや配信方式の設定はこちらの画面ではなく「自社広告」「純広告」各設定画面で行います。 設定方法については[こちら](/help/implementation-guide/house-ad)をご覧ください。 --- ## お支払い [Q. お支払口座の登録/変更](#q-%E3%81%8A%E6%94%AF%E6%89%95%E5%8F%A3%E5%BA%A7%E3%81%AE%E7%99%BB%E9%8C%B2%E5%A4%89%E6%9B%B4) [Q. 支払金額の確定日](#q-%E6%94%AF%E6%89%95%E9%87%91%E9%A1%8D%E3%81%AE%E7%A2%BA%E5%AE%9A%E6%97%A5) [Q. 最低お支払金額](#q-%E6%9C%80%E4%BD%8E%E3%81%8A%E6%94%AF%E6%89%95%E9%87%91%E9%A1%8D) [Q. 振込スケジュール](#q-%E6%8C%AF%E8%BE%BC%E3%82%B9%E3%82%B1%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB) [Q. 振込手数料](#q-%E6%8C%AF%E8%BE%BC%E6%89%8B%E6%95%B0%E6%96%99) ## Q. お支払口座の登録/変更 **A.** 広告収益はアカウントにご登録いただいた口座にお支払いいたします。 口座情報のご登録がない場合お支払いができないため、速やかにご登録をお願いいたします。 ### 口座情報の登録 左メニュー「アカウント」 > 「アカウント/口座情報」 > 画面下部「銀行口座の情報」 必須項目全てを記入の上、「更新する」ボタンを押してください。 :::warning[口座登録時のご注意] 入力された口座情報に誤りがあると、通常のご入金日に広告収益をお支払いすることができません。 口座情報の誤りが判明した際には、ご登録のメールアドレスに担当者からご連絡をいたします。 正しい口座情報を確認後に再度入金の対応をいたしますが、当初の入金日より 1〜2ヶ月後のお支払いになることがございますので、あらかじめご了承ください。 口座情報を登録・変更の際には、内容に間違いがないかのご確認を、必ずお願いいたします。 ::: ### 口座情報の変更 管理画面上での変更をお願いいたします。 左メニュー「アカウント」 > 「アカウント/口座情報」 > 画面下部「銀行口座の情報」 変更したい箇所を変更後、「更新する」ボタンを押してください。 :::warning[口座情報を変更される場合] 変更時期によってお支払いへの反映タイミングが異なりますのでご注意ください。 **毎月1日〜15日にご変更いただいた場合**: その月の月末のお支払いから、変更後の口座に入金いたします。 **毎月16日〜月末にご変更いただいた場合**: 翌月の月末のお支払いから、変更後の口座に入金いたします。 ::: ### 海外口座のご登録について 海外口座への入金も可能です。 専用の登録画面を用意しておりますのでご希望の場合は お問い合わせフォームよりご連絡ください。 ※ その他口座情報に関するお問い合わせは、お問い合わせフォームよりお申し付けください ## Q. 支払金額の確定日 **A.** 配信月の翌月4営業日前後に確定します。 管理画面左メニュー「アカウント」内の「支払い」からご確認ください。 ## Q. 最低お支払金額 **A.** 国内:税抜き3,000円以上の収益となった際にお支払対象となります。    3,000円未満の場合は翌月以降に繰り越され、累計で3,000円に達するとお支払対象になります。 海外:100,000円以上の収益となった際にお支払対象となります。 ## Q. 振込スケジュール **A.** 月末締め、翌々月末払いです。(60日サイト)   例)4月1日~4月30日に発生した収益(4月分収益)は6月末に指定の口座にお振込です。 ## Q. 振込手数料 **A.** 国内送金:弊社が負担します。 海外送金:ご利用者負担です。 --- ## アカウント登録 # アカウント管理 [お申込みページ](https://ad-generation.jp/registration/publishers/new)にて、必要情報を記入の上ご登録ください。 審査完了後、登録メールアドレスにアクティベーションメールが送信されます。 そちらの案内に従い、管理画面にログインしてください。 --- ## レポート機能 # レポート [Q. レポート](#q-%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88) [Q. 動画リワードのレポートについて](#q-%E5%8B%95%E7%94%BB%E3%83%AA%E3%83%AF%E3%83%BC%E3%83%89%E3%81%AE%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) [Q. インビュー数関連の項目について](#q-%E3%82%A4%E3%83%B3%E3%83%93%E3%83%A5%E3%83%BC%E6%95%B0%E9%96%A2%E9%80%A3%E3%81%AE%E9%A0%85%E7%9B%AE%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) ## Q. レポート **A.** ### レポート画面 管理画面の左メニューから御覧いただけるレポート画面では、様々な条件で広告枠に関する数値を出力することができます。 画面での表示のほか、CSVでのダウンロード・APIの利用も可能です。 なお、収益額についてはあくまで参考値となります。またRTBレポートと配信レポートでも数値にずれが生じることがあります。 最終的なお支払額についてはアカウント>支払いの画面でご確認ください。 参考:[お支払いについて](/help/flow/payment) ### 数字の更新タイミングについて 1時間毎に更新されます。 ただし、海外のアドネットワーク等、一部広告事業者のレポートは即時反映ではないため、 当日の数値は、翌日の午後に確認することをおすすめします。 ### マイレポート機能 レポート上でよく使う検索条件を保存することができる機能です。 複数登録可能なので、様々な条件を1クリックで呼び出し可能です。 - 設定方法 1. レポート画面で条件を設定後に、「★検索条件を保存」ボタンをクリックします。 2. 検索条件に名前をつけ、保存します。 ![マイレポート保存](/img/adg-help/report001.png) ### マイレポートの表示方法 2つの方法があります。 1. レポート画面からの表示 レポート画面の上部に表示される「★マイレポート」タブをクリックすると、登録済みの検索条件がリストで表示されます。それぞれのレポート名を選択することで、登録した条件でレポートが表示されます。 このリストからは、「デフォルト」の指定(後述)、条件の「削除」の操作も行うことができます。 2. ショートカットからの表示 管理画面の右上にある★印をクリックするとリストが表示され、登録済みのレポートを表示する画面へと遷移します。 この方法を使えば、どの画面を見ている状態からでも、いつものレポートへ遷移することができます。 ![マイレポートショートカット](/img/adg-help/report002.png) ### レポート画面のデフォルト指定 メニューの「レポート」をクリックした際に表示されるレポート数値を、お好きな設定に変更することが可能です。 - 設定方法 1. マイレポート機能を使って設定したい条件を保存します。 2. メニューの「レポート」→「★マイレポート」タブで表示されるリストから、デフォルトに設定したいレポート名の☆印をクリックします。 ### レポートAPIの認証方法 - 認証方法apiのリクエストに予め発行したtokenを付与し認証します。(tokenの有効期限は10分です) ※レポートAPIの詳細については、管理画面にログイン後「レポート」ページの「APIトークン発行」よりご確認ください。 ![APIトークン発行](/img/adg-help/report003.png) ![APIトークン確認](/img/adg-help/report004.png) ![APIトークン利用](/img/adg-help/report005.png) ![APIトークン利用](/img/adg-help/report006.png) ![APIトークン利用](/img/adg-help/report007.png) ![APIトークン利用](/img/adg-help/report008.png) ## Q. 動画リワードのレポートについて **A.** 通常のレポート画面で他の枠と同様にインプレッション数、クリック数、収益などがご確認いただけますが、 動画リワード専用のレポート画面も別途ご用意しております。 動画リワード専用のレポート画面では、広告の「インプレッション数」をさらに細かく分析したレポートがご確認いただけますので、 配信比率の調整をする場合は、動画リワード専用レポートをご利用ください。 ![動画リワードレポート画面](/img/adg-help/report009.png) **①表示開始**…ユーザーが「動画をみる」などのボタンを押したタイミングでカウントされます(※アドジェネSDKで'show'メソッドを呼び出したタイミング) **②視聴開始**…動画の再生が開始された数です **③視聴完了**…動画が最後まで再生された数です **視聴完了率**…動画が最後まで再生された割合です(視聴完了数÷視聴開始数×100) **eCPM**…1000インプレッションあたりの収益性。アドジェネの動画リワード広告では視聴完了数をインプレッション数として算出しています。(参考収益÷視聴完了×1000) **参考収益**…消費税を含む収益の速報値です。配信月の翌月4営業日前後にお支払金額が確定されます。 **★広告が配信されているのに収益が発生しない場合** まず、ソースコード側でテストモードがOFF(コメントアウト)されているかご確認ください。 テストモードがONだと、広告は表示されますが収益が発生しません。 本番モードで配信しているにもかかわらず収益が発生していない場合は、CPI、CPCのキャンペーン案件で収益発生条件が満たされていない可能性があります。 ## Q. インビュー数関連の項目について **A.** レポート画面では、インビュー数及び関連する指標を表示することが可能です。 ![インビュー項目選択](/img/adg-help/report010.png) ### 【レポート画面での表示方法】 レポート検索画面にある「追加出力項目」の欄の「インビュー」にチェックを入れて検索すると、レポートに以下の項目が表示されます。 **インビュー計測可能数**: SDKVerやサイズなどのインビュー計測ができる条件を満たしたインプレッション数 **インビューインプレッション数**: インビュー計測可能数のうち、インビューしたインプレッション数 **インビュー率**: インビューした割合(インビューインプレッション数 / インビュー計測可能数) ### 【対象の広告枠・サイズ】 **広告枠**: iOS、Androidアプリ(webview実装のアプリやweb面の配信は対象外) **サイズ**: 動画リワード、TAM、EBDA、Prebidを除くすべてのサイズ **SDK**: アドジェネSDK v2.17.0以降を実装いただいたアプリ ### 【注意点】 - フリー型(ネイティブ広告)の場合 iOS : setTapEvent / Android : setClickEvent を必ず実装いただく必要があります。 実装マニュアル : /ad-generation/platforms/ios/native_ad_ios /ad-generation/platforms/android/native_ad_android リファレンス : /ad-generation/api-reference/reference_ios#settapeventhandler /ad-generation/api-reference/reference_android#setclickeventcontext-context-view-view-adgnativeadonclicklistener-listener - SDK連携でフリー型(ネイティブ広告)を配信している場合 広告Viewを作成後、 getNativeMediationView を利用してAd Generation SDKへ広告Viewの登録が必須となります。 実装マニュアル : 各SDK連携のフリー型の実装ページ内のサンプルコードにて、 `getNativeMediationView` を利用しておりますのでご参照ください リファレンス : /ad-generation/api-reference/reference_ios#getnativemediationview /ad-generation/api-reference/reference_android#getnativemediationview --- ## 導入からお支払いまでの流れ Ad Generationの導入からお支払いまでは下記の流れとなります。 ①[お申込み](/help/flow/registration)   ↓ 審査(0営業日~1営業日程度) ②ログイン情報のご案内   ↓ ログイン ③[管理画面よりアプリ&広告枠を登録する ](/help/flow/add-placement)   ↓ 審査、ADNW手配(1営業日~3営業日程度 ※Supership作業) ④広告枠発行   ↓ ⑤[広告タグ・SDKの実装 ](/help/flow/implementation)   ↓ ⑥配信開始&収益化   ↓ ⑦お支払い --- ## バナー広告 1. アプリにSDKを組み込む - 各環境の組み込み手順に従い、Ad Generation SDKを組み込みます。 - マニュアル  :[こちら](/ad-generation#%E3%83%90%E3%83%8A%E3%83%BC%E5%BA%83%E5%91%8A) - リリースノート:[iOS](https://github.com/AdGeneration/ADG-iOS-SDK/releases) / [Android](https://github.com/AdGeneration/ADG-Android-SDK/releases) - サンプル   :[iOS](https://github.com/AdGeneration/ADG-iOS-SDK/tree/master/Samples) / [Android](https://github.com/AdGeneration/ADG-Android-SDK/tree/master/Samples) - SDKを追加して配信アドネットワークを増やす場合は、下記手順を参考に実装を進めます。 不要の場合、STEP2.に移ります。 | サービス | マニュアル | 配信設定 | |---------|----------|---------| | AdMob | [iOS](/ad-generation/mediation/admobadapter_ios_manual) / [Android](/ad-generation/mediation/admobadapter_android_manual) | 媒体社様(カスタム連携) | | Amazon Publisher Service | [iOS](/ad-generation/mediation/amazon_publisher_services_ios) / [Android](/ad-generation/mediation/amazon_publisher_services_android) | 媒体社様(カスタム連携) | 2. テストIDで広告表示を確認する [テストID一覧](/ad-generation/test_id)よりテストIDを取得し、正しく広告表示が行われるか確認します。 ※1.b.で追加したアドネットワークもテストIDで表示確認することができます。 3. 本番広告枠IDで広告表示を確認する 管理画面上から広告枠IDを取得し、表示確認を行います。 ※配信設定内でRTBや各アドネットワークの配信がONにされていることを確認してください。 4. アプリをリリースする 3.まで完了後、下記を確認してリリースをします。 - 本番広告枠IDである。 - テストモードを解除している。 --- ## カスタム配信設定 # カスタム配信(カスタムタグ) [Q. カスタム配信とは](#q-%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E9%85%8D%E4%BF%A1%E3%81%A8%E3%81%AF) [Q. カスタム配信のレポート連携](#q-%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E9%85%8D%E4%BF%A1%E3%81%AE%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E9%80%A3%E6%90%BA) [Q. カスタム配信における広告のローテーション設定について](#q-%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E9%85%8D%E4%BF%A1%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E5%BA%83%E5%91%8A%E3%81%AE%E3%83%AD%E3%83%BC%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E8%A8%AD%E5%AE%9A%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) [Q. カスタム認証情報の登録方法](#q-%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%81%AE%E7%99%BB%E9%8C%B2%E6%96%B9%E6%B3%95) [Q. カスタム配信設定](#q-%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E9%85%8D%E4%BF%A1%E8%A8%AD%E5%AE%9A) [Q. レポートが正しく連携できているか確認する](#q-%E3%83%AC%E3%83%9D%E3%83%BC%E3%83%88%E3%81%8C%E6%AD%A3%E3%81%97%E3%81%8F%E9%80%A3%E6%90%BA%E3%81%A7%E3%81%8D%E3%81%A6%E3%81%84%E3%82%8B%E3%81%8B%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B) ## Q. カスタム配信とは **A.** アドジェネは広告枠申請をいただくと自動的にアドジェネ側で複数のアドネットワークに登録を代行し広告が配信される仕組みとなっています。 しかし、 「アドジェネに接続していないアドネットワークを配信したい」 「直接契約のアドネットワークはそれを活かして配信したい」 というご要望にもお応えできる機能を持っており、それを「カスタム配信」と呼びます。 カスタム配信を設定したアドネットワークを配信する際には必ずお手元で「広告が正しく表示されているか」「アドネットワークの管理画面にレポートが正しく計測されているか」のご確認をお願いいたします。 また、SDK連携が必要なアドネットワークについては[こちら](/help/implementation-guide/sdkver)でご案内している対象ver以外の動作保証は出来かねますのでご了承ください。 ## Q. カスタム配信のレポート連携 **A.** カスタム配信を使って配信しているアドネットワークのレポートを自動で取得し、アドジェネ管理画面上に表示する機能です。 レポート連携することでアドジェネ管理画面上でアドジェネ経由/カスタム配信経由どちらのレポートも一元管理することができます。 また、手動でeCPMを設定せずとも、定期的に取得するレポートによってアドジェネ経由配信と同一基準で配信評価を行います。 アドジェネ経由/カスタム配信経由区別なく、極限まで機会損失を無くした配信が可能となります。 レポート連携にはカスタム配信設定の他に[認証情報の登録](#q-%E3%82%AB%E3%82%B9%E3%82%BF%E3%83%A0%E8%AA%8D%E8%A8%BC%E6%83%85%E5%A0%B1%E3%81%AE%E7%99%BB%E9%8C%B2%E6%96%B9%E6%B3%95)が必要です。 ## Q. カスタム配信における広告のローテーション設定について **A.** カスタムタグ設定時には、各社の広告ローテーション設定を必ずご確認いただき、ローテーションの設定・管理は、アドサーバー側で行うよう設定をお願いします。 例えば、**カスタムタグ側でローテーションを設定しアドジェネ画面上でもローテーションを設定している場合、ローテーションが2重に働いてしまいます。** 自動メディエーションや収益性に影響を与える可能性があるため、ご注意ください。 ### 【参考】 **○アドジェネをアドサーバーとして使う場合** アドジェネ管理画面上の各広告枠「編集」タブよりローテーションを設定します。 カスタムするSDKやタグのローテーションはOFFにしてください。 **○Google Ad Manager等、アドジェネ以外のツールをアドサーバーとして使う場合** ローテーション設定はアドジェネ以外のアドサーバー上で設定し、アドジェネ画面上での設定はOFFにしてください。 ※アプリ上でのヘッダービディング等、ローテーションの管理がアドサーバー側ではない場合があります。(一部) 特殊なソリューションをご利用の場合は、各社のマニュアルに従ってローテーションの設定をお願いいたします。 ## Q. カスタム認証情報の登録方法 **A.** 連携したいアドネットワークの認証情報を登録します。 メニューの「カスタムタグ▼」→「カスタムタグ認証情報設定」の画面を開き、「新規登録」ボタンから作成画面に入ります。 直契約アカウントのログイン情報等、必要情報を入力後、登録ボタンを押して認証してください。 (アドネットワークにより、入力する項目が異なります。) 「認証名」の欄は任意でユニークな名前を設定してください。 ![Custom Tag](/img/adg-help/custom-ad001.png) ### ※Googleアカウント連携について AdMobと連携する場合、バナー/ネイティブ広告と動画リワード広告でそれぞれ認証する必要があります。 #### 【設定方法】 アドジェネの管理画面の入力時に、Googleのアカウント側での認証作業を行います。 カスタムタグ認証情報の新規作成画面でアドネットワーク (AdMob)を選択 「認証名」を入力し「登録する」 を押下するとGoogle の認証画面に遷移しますので画面の指示に従って認証を進めてください。 その後、アドジェネ管理画面に戻ってくるのでそこで完了となります。 ### ※認証状況の確認方法 ![Custom Tag Status](/img/adg-help/custom-ad002.png) - **緑色のアイコン**:認証OK - **赤いアイコン**:認証NG(「詳細」の文字をクリックすると内容が表示されます) - **空欄**:登録後一度もレポート取得の処理がされていない状態 ## Q. カスタム配信設定 **A.** ①「広告枠一覧」画面    ↓ ②対象広告枠の「カスタムタグ設定」を押す    ↓ ③「新規作成」を押す    ↓ ④必要な項目を入力する - 「アドネットワーク名」に任意の名称を入力(この名称がレポート等に表示されます ) - カスタムタグ認証情報を選択(レポートを取得したい場合のみ)  └ 「広告枠名/広告枠ID」に取り込みたい広告枠の情報を入力 - 「広告タグ」に直接契約したアドネットワークのJSタグをコピペ - 最適化配信で基準としたい方を選択(レポート連携を行わない場合は「手動CPM最適化」のみ) - 「CPM」に登録するアドネットワークの想定CPMを入力(※) ![Custom Tag Setup](/img/adg-help/custom-ad003.png)    ↓ ⑤「登録する」を押す(設定完了)    ↓ ⑥「広告枠一覧」画面    ↓ ⑦対象広告枠の「ADNW設定」を押す    ↓ ⑧登録したカスタムタグにチェックを付ける    ↓ ⑨配信スタート (※)CPMを入力する意味は、ここに入力したCPMをそのカスタムタグのCPMとみなして他のアドネットワークと自動配信調整をするためです。 #### 【重要事項】 - 収益額は、直接契約しているアドネットワークの管理画面にて確認してください。 - 「カスタムタグ認証情報設定」を行わない場合、インプレッション以外の実績値は各アドネットワークの管理画面よりご確認ください。 - カスタムタグの収益額のお支払いは、直接契約しているアドネットワーク会社からのお支払いとなります。 ## Q. レポートが正しく連携できているか確認する **A.** 認証情報を設定したカスタム配信のレポート取得状況は「カスタム配信一覧」の画面で確認ができます。 ![取得状況](/img/adg-help/custom-ad004.png) 緑色:取り込みが問題なくできている。 黄色:アドジェネにもアドネットワーク側にも実績がない。    もしくは、アドジェネ経由で配信せずアドネットワーク側のレポート    取り込みだけを行っているが、「広告枠名/広告枠ID」が間違っている。 赤色:何らかの理由で取り込みができていない。   (「詳細」をクリックすると内容が表示されます。) --- ## 収集しているデータ # 収集しているデータについて [Q. 【Android】アドジェネで収集しているデータについて](#q-android%E3%82%A2%E3%83%89%E3%82%B8%E3%82%A7%E3%83%8D%E3%81%A7%E5%8F%8E%E9%9B%86%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) [Q. 【Android】SDK連携各社の収集データについて](#q-androidsdk%E9%80%A3%E6%90%BA%E5%90%84%E7%A4%BE%E3%81%AE%E5%8F%8E%E9%9B%86%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) [Q. 【iOS】アドジェネで収集しているデータについて](#q-ios%E3%82%A2%E3%83%89%E3%82%B8%E3%82%A7%E3%83%8D%E3%81%A7%E5%8F%8E%E9%9B%86%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) [Q. 【iOS】SDK連携各社の収集データについて](#q-iossdk%E9%80%A3%E6%90%BA%E5%90%84%E7%A4%BE%E3%81%AE%E5%8F%8E%E9%9B%86%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) ## Q. 【Android】アドジェネで収集しているデータについて **A.** 2022年4月以降、Google Playでアプリを公開や更新する際に、同梱するSDKを含むアプリ全体のデータ使用状況をGoogle Playへ開示することが必須となります。 Ad GenerationのAndroid SDK(ADG SDK / VAMP SDK)それぞれについて、データ使用状況をおまとめしましたので、 こちらを考慮した上で情報開示を行っていただけますと幸いです。 Google Play データ セーフティ セクションの詳細については[Google Play Console ヘルプ - データ セーフティ フォームでアプリ情報を提供する](https://support.google.com/googleplay/android-developer/answer/10787469)をご覧ください。 - 更新履歴 - 2022/03/07:「ウェブ閲覧履歴」の項目を削除 - ※ jsタグの挙動に対応した内容になっておりましたが、Android SDKの挙動のみ考慮した内容に変更いたしました。 ### データの収集とセキュリティ - アプリは対象になる種類のユーザーデータを収集または共有しますか? - ADG SDK: はい - VAMP SDK: はい - アプリで収集するユーザーデータはすべて、転送時に暗号化されますか? - ADG SDK: はい ※ADG SDKのデフォルト設定では暗号化されます。 [こちら](https://github.com/AdGeneration/sdk/wiki/Reference_Android#setissslboolean-ssl)のパラメータを使って意図的に設定を変更している場合はいいえを選択してください。 - VAMP SDK: はい - 自分のデータの削除をリクエストする方法をユーザーに提供していますか? - ADG SDK: いいえ - VAMP SDK: いいえ ### データの種類 ADG SDK / VAMP SDKそれぞれにおいて、下記の表に「はい」と記載されているものを選択する必要がございます。 - 位置情報 - おおよその位置情報 - ADG SDK: [位置情報の扱いについて](/ad-generation/other/location)をご確認ください。 - VAMP SDK: いいえ - 正確な位置情報 - ADG SDK: [位置情報の扱いについて](/ad-generation/other/location)をご確認ください。 - VAMP SDK: いいえ - アプリのアクティビティ - ページビュー、アプリ内のタップ - ADG SDK: はい - VAMP SDK: はい - デバイス/識別子 - デバイスまたはその他の識別子 - ADG SDK: はい - VAMP SDK: は ### データの使用と処理 選択したデータの種類について、下記の表に記載されているものを選択する必要がございます。 - おおよその位置情報 - このデータを収集しますか、共有しますか、それとも両方ですか? - ADG SDK: 共有と収集の両方を選択 - VAMP SDK: - - このデータを一時的に処理しますか? - ADG SDK: はい - VAMP SDK: - - このデータはアプリに必要ですか、またユーザーはデータ収集の有無を選択できますか? - ADG SDK: ユーザーはこのデータ収集の有無を選択できる - VAMP SDK: - - このユーザーデータを収集するのはどうしてですか?あてはまるものをすべてお選びください。 - ADG SDK: 広告、マーケティング - VAMP SDK: - - このユーザーデータを共有するのはどうしてですか?あてはまるものをすべてお選びください。 - ADG SDK: 広告、マーケティング - VAMP SDK: - - 正確な位置情報 - このデータを収集しますか、共有しますか、それとも両方ですか? - ADG SDK: 共有と収集の両方を選択 - VAMP SDK: - - このデータを一時的に処理しますか? - ADG SDK: はい - VAMP SDK: - - このデータはアプリに必要ですか、またユーザーはデータ収集の有無を選択できますか? - ADG SDK: ユーザーはこのデータ収集の有無を選択できる - VAMP SDK: - - このユーザーデータを収集するのはどうしてですか?あてはまるものをすべてお選びください。 - ADG SDK: 広告、マーケティング - VAMP SDK: - - このユーザーデータを共有するのはどうしてですか?あてはまるものをすべてお選びください。 - ADG SDK: 広告、マーケティング - VAMP SDK: - - ページビュー、アプリ内のタップ - このデータを収集しますか、共有しますか、それとも両方ですか? - ADG SDK: 共有と収集の両方を選択 - VAMP SDK: 共有と収集の両方を選択 - このデータを一時的に処理しますか? - ADG SDK: はい - VAMP SDK: はい - このデータはアプリに必要ですか、またユーザーはデータ収集の有無を選択できますか? - ADG SDK: データ収集は必須である - VAMP SDK: データ収集は必須である - このユーザーデータを収集するのはどうしてですか?あてはまるものをすべてお選びください。 - ADG SDK: 広告、マーケティング - VAMP SDK: 広告、マーケティング - このユーザーデータを共有するのはどうしてですか?あてはまるものをすべてお選びください。 - ADG SDK: 広告、マーケティング - VAMP SDK: 広告、マーケティング - デバイスまたはその他の識別子 - このデータを収集しますか、共有しますか、それとも両方ですか? - ADG SDK: 共有と収集の両方を選択 - VAMP SDK: 共有と収集の両方を選択 - このデータを一時的に処理しますか? - ADG SDK: はい - VAMP SDK: はい - このデータはアプリに必要ですか、またユーザーはデータ収集の有無を選択できますか? - ADG SDK: データ収集は必須である - VAMP SDK: データ収集は必須である - このユーザーデータを収集するのはどうしてですか?あてはまるものをすべてお選びください。 - ADG SDK: 広告、マーケティング - VAMP SDK: 広告、マーケティング - このユーザーデータを共有するのはどうしてですか?あてはまるものをすべてお選びください。 - ADG SDK: 広告、マーケティング - VAMP SDK: 広告、マーケティング ## Q. 【Android】SDK連携各社の収集データについて **A.** SDK連携先事業者のデータ使用状況につきましては、下記をご参照ください。 - AdMob [Google Play のデータ開示要件に備える](https://developers.google.cn/admob/android/play-data-disclosure?hl=ja) - Amazon Publisher Services(APS) [APS SDK data collection practices](https://ams.amazon.com/webpublisher/uam/docs/aps-mobile/android) - AppLovin [アドジェネのお問い合わせフォーム](https://docs.google.com/forms/d/e/1FAIpQLScYROjUpoEQGERI5T9Ii9pZ-LHlsqZYKJgsPBZcHHCZIO0S8w/viewform?usp=sf_link)よりご連絡ください。 - LINE [Google Playへデータ使用状況を開示する](https://adsnetwork-docs.linebiz.com/fivesdk-android/store-release/google-play-data-safety.html) - maio [収集しているデータについて](https://github.com/imobile-maio/maio-Android-SDK#%E5%8F%8E%E9%9B%86%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) - Pangle [Provide information for Google Play's Data Disclosure](https://www.pangleglobal.com/support/doc/6203710f2b4ba300514c71a5) - UnityAds [Google Play data safety section for Unity Ads](https://docs.unity.com/ads/GoogleDataSafety.html) ## Q. 【iOS】アドジェネで収集しているデータについて **A.** iOSのAd Generation SDKで収集し得るデータにつきましては、下記をご参照ください。 - 更新履歴 - 2021年3月15日:表の形式を変更しました。「デバイスをユーザーに関連付けている」の項目を削除しました ### データの種類 - 連絡先情報 - 名前: 姓や名など - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - Eメールアドレス: ハッシュ化されたEメールアドレスを含むが、これに限定しない - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - 電話番号: ハッシュ化された電話番号を含むが、これに限定しない - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - 物理的な住所: 自宅住所、物理的な住所、郵送先住所など - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - ユーザーのその他の連絡先情報: App外でユーザーへの連絡手段として使用できるその他の情報 - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - ヘルスケアとフィットネス - ヘルスケア: ヘルスケアおよび医療関連のデータ Clinical Health Records API、HealthKit API、MovementDisorderAPI、ヘルスケア関連の臨床調査、またはユーザーが提供したその他のヘルスケアまたは医療のデータを含むが、これらに限定しない - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - フィットネス: フィットネスおよび運動データ Motion APIおよびFitness APIを含むがこれらに限定しない - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - 財務情報 - 支払い情報: 支払い方法、支払いカード番号、銀行口座番号など - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - クレジット情報: クレジットスコアなど - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - その他の財務情報: 給与、収入、資産、負債、その他の財務情報など - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - 位置情報 - 詳細な位置情報: 小数点以下3桁以上の緯度経度と同等、またはそれよりも高い詳細レベルでの、ユーザーまたはデバイスの場所を示す情報 - 利用有無: [位置情報の扱いについて](/ad-generation/other/location)をご確認ください。 - 使用目的: サードパーティ広告、アナリティクス、Appの機能 - 個人情報の収集: - - トラッキング: [位置情報の扱いについて](/ad-generation/other/location)をご確認ください。 (位置情報を取得している場合は利用する) - おおよその場所: 小数点以下3桁以上の緯度経度よりも低い詳細レベルでのユーザーまたはデバイスの場所を示す情報(おおよその位置情報サービスなど) - 利用有無: [位置情報の扱いについて](/ad-generation/other/location)をご確認ください。 - 使用目的: サードパーティ広告、アナリティクス、Appの機能 - 個人情報の収集: - - トラッキング: [位置情報の扱いについて](/ad-generation/other/location)をご確認ください。 (位置情報を取得している場合は利用する) - 機密情報 - 機密情報: 人種または民族情報、性的指向、妊娠または出産に関する情報、障がい、宗教または哲学的信念、労働組合への加入、政治的意見、遺伝情報、または生体情報など - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - 連絡先 - 連絡先: ユーザーの電話、アドレス帳、ソーシャルグラフ内の連絡先リストなど - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - ユーザーコンテンツ - Eメールまたはテキストメッセージ: Eメールまたはメッセージの件名、送信者、受信者、および内容を含む - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - 写真またはビデオ: ユーザーの写真またはビデオ - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - オーディオデータ: ユーザーの声またはサウンドの録音 - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - ゲームプレイコンテンツ: ゲーム内でユーザーが生成したコンテンツなど - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - カスタマーサポート: カスタマーサポートの依頼中にユーザーが生成したデータ - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - その他のユーザーコンテンツ: ユーザーが生成したその他のコンテンツ - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - 閲覧履歴 - 閲覧履歴: ユーザーが閲覧したコンテンツに関する情報 - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - 検索履歴 - 検索履歴: ユーザーが実行した検索に関する情報 - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - ID - ユーザーID: スクリーン名、ハンドル、アカウントID、割り当てられたユーザーID、顧客番号、特定のユーザーやアカウントの識別に利用できるユーザーレベルやアカウントレベルのその他のIDなど - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - デバイスID: デバイスの広告ID、またはデバイスレベルのその他のIDなど - 利用有無: ✓ - 使用目的: サードパーティ広告、アナリティクス、Appの機能 - 個人情報の収集: - - トラッキング: ✓ - 購入 - 購入履歴: アカウントや個人による購入、または購入傾向 - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - 使用状況データ - 製品の操作: Appの起動、タップ、クリック、スクロール情報、音楽の視聴データ、ビデオの視聴数、ゲームやビデオや曲の保存場所、ユーザーのApp操作に関するその他の情報など - 利用有無: ✓ - 使用目的: サードパーティ広告、アナリティクス、Appの機能 - 個人情報の収集: - - トラッキング: ✓ - 広告データ ユーザーが見た広告に関する情報など ✓ サードパーティ広告、アナリティクス、Appの機能 − ✓ - 利用有無: ✓ - 使用目的: - - 個人情報の収集: - - トラッキング: ✓ - その他の使用状況データ: Appのユーザーアクティビティに関するその他のデータ - 利用有無: - - 使用目的: サードパーティ広告、アナリティクス、Appの機能 - 個人情報の収集: - - トラッキング: - - 診断 - クラッシュデータ: クラッシュログなど - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - パフォーマンスデータ: 起動時間、ハング率、エネルギー使用量など - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - その他の診断データ: Appに関連する技術的診断を測定する目的で収集されたその他のデータ - 利用有無: - - 使用目的: - - 個人情報の収集: - - トラッキング: - - その他のデータ - その他の種類のデータ: 言及されていないその他の種類のデータ - 利用有無: ✓ - 使用目的: サードパーティ広告、アナリティクス、Appの機能 - 個人情報の収集: - - トラッキング: ✓ ### 注意事項 - 収集データにつきましてはアプリのプライバシーポリシーに記載をお願いいたします - メディエーション機能を用いて他社SDKと連携をおこなっている場合は、他社SDKでの収集データにつきましてもご確認をお願いいたします ### 参考 - [位置情報の扱いについて](/ad-generation/other/location) - [Google/審査のためにアプリを準備する:プライバシーポリシー](https://support.google.com/googleplay/android-developer/answer/9815348?hl=ja) - [Apple/Appのプライバシーに関する詳細をApp Storeに掲載する](https://developer.apple.com/jp/support/app-privacy-on-the-app-store/) ## Q. 【iOS】SDK連携各社の収集データについて **A.** SDK連携の事業者が収集し得るデータにつきましては、下記をご参照ください。 - AdMob https://support.google.com/admob/answer/9755590?hl=en - Amazon Publisher Services(APS) [アドジェネのお問い合わせフォーム](https://docs.google.com/forms/d/e/1FAIpQLScYROjUpoEQGERI5T9Ii9pZ-LHlsqZYKJgsPBZcHHCZIO0S8w/viewform?usp=sf_link)よりご連絡ください。 - AppLovin [アドジェネのお問い合わせフォーム](https://docs.google.com/forms/d/e/1FAIpQLScYROjUpoEQGERI5T9Ii9pZ-LHlsqZYKJgsPBZcHHCZIO0S8w/viewform?usp=sf_link)よりご連絡ください。 - LINE [アドジェネのお問い合わせフォーム](https://docs.google.com/forms/d/e/1FAIpQLScYROjUpoEQGERI5T9Ii9pZ-LHlsqZYKJgsPBZcHHCZIO0S8w/viewform?usp=sf_link)よりご連絡ください。 - maio [収集しているデータについて](https://github.com/imobile-maio/maio-iOS-SDK#%E5%8F%8E%E9%9B%86%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) - Pangle [App privacy details on the App Store](https://www.pangleglobal.com/help/doc/5fc45f521ee5c2001d3f100e) ※画面右上の言語設定をEnglishにしてご覧ください。 - UnityAds [Apple privacy survey](https://unityads.unity3d.com/help/ios/apple-privacy-survey) --- ## 自社広告/純広告配信 # 自社広告 / 純広告 [Q. 自社広告の設定](#q-%E8%87%AA%E7%A4%BE%E5%BA%83%E5%91%8A%E3%81%AE%E8%A8%AD%E5%AE%9A) [Q. 純広告の設定](#q-%E7%B4%94%E5%BA%83%E5%91%8A%E3%81%AE%E8%A8%AD%E5%AE%9A) [Q. クリエイティブ設定](#q-%E3%82%AF%E3%83%AA%E3%82%A8%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E8%A8%AD%E5%AE%9A) [Q. 広告リクエストにKey-Valueを付与する方法](#q-%E5%BA%83%E5%91%8A%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%81%ABkey-value%E3%82%92%E4%BB%98%E4%B8%8E%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95) ## Q. 自社広告の設定 **A.** ### 【a.自社広告の登録】 1. 左カラムのメニュー「自社広告」を押す 2. 「新規自社広告追加」を押す ![自社広告登録画面](/img/adg-help/house-ad001.png) 3. 「名前」にクリエイティブ名を入力 4. 「配信開始日時」に日時を入力(「配信終了日時」は任意。ブランク可) 5. 「サイズ」で広告のサイズを指定、配信先の広告枠を割り当てる サイズ指定後、「広告枠選択」ボタンを押すとそのサイズの広告枠が表示されるので自社広告を配信する対象広告枠にチェックを入れ、「割り当て」ボタンを押してください。 ![広告枠選択画面](/img/adg-help/house-ad002.png) 6. 「配信方法」を入力 **配信割合指定**:前項⑤で設定した広告枠に対して何%の割合で配信するかを設定できます。1〜100の数字を入れてください。 自社広告の比率は100%にした場合、アドネットワーク/カスタム配信の広告は配信されなくなります。 ※注意:比率を100%に設定しても⑦のターゲティングを設定しているとレポート上では100%になりません。100%自社広告を配信したい場合はターゲティング設定をすべて外してください。 **フィラー**:フィラーを選択すると、その広告枠で配信しているRTB/アドネットワーク/カスタムアドネットワークの広告が表示されなかった場合のみに自社広告が配信されます。 広告在庫を補いたい場合などはこちらを選択してください。 7. ターゲティングを設定する(任意) 特定の条件にあったユーザーに対してのみ配信したい場合はこちらを設定してください。 **OS**:特定のOSのみ配信したい場合に設定します。複数選択が可能です。 **キャリア**:特定のキャリアのみ配信したい場合に設定します。複数選択が可能です。 **フリークエンシー** 全期間の表示回数:1ユーザーに対して④の期間設定で設定した期間内に何回表示させるかを設定できます。 1日の表示回数:1ユーザーに対して1日に何回表示させるかを設定できます。 **都道府県**:複数選択が可能です。 **曜日・時間帯**:特定の曜日や時間帯のみ配信したい場合に設定します。「追加」ボタンから条件を追加することができます。 **ラベル(Key-Value)**:Key-Valueを設定して配信が可能です。「追加」ボタンから条件を追加することができます。詳細はこちらをご覧ください。 8. 「登録する」ボタンを押す ### 【b.クリエイティブの設定】 次に、クリエイティブの登録と設定を行います。手順については以下のリンクからご確認ください。 [クリエイティブの設定](#q-%E3%82%AF%E3%83%AA%E3%82%A8%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E8%A8%AD%E5%AE%9A) これで、自社広告の設定は完了です。 自社広告設定及びクリエイティブ設定画面で登録した配信開始日時になれば、配信が開始します。 #### ★広告が配信されない場合 1. 自社広告の配信期間(開始日時)/クリエイティブの配信期間(開始日時)はあっていますか? 両者が一致しない場合広告が配信されませんのでご注意ください。 自社広告の配信期間内でも、そのクリエイティブに設定した期間が配信期間外だと配信されません。 2. 自社広告/クリエイティブは有効になっていますか? 特に以前作成したものや配信していたものを再利用する場合などはご注意ください。 【自社広告一覧】 上部の検索欄で、プルダウンを「無効のみ表示」を選択し検索するとステータスが「無効」のものが表示されます。 配信したい自社広告を選択(一番左にチェック)し上にある「有効」をクリックしてください。 a−4で設定した「配信開始日時」 になると、広告が配信されます。 ![配信されない場合](/img/adg-help/house-ad003.png) 【クリエイティブ一覧】 上部の検索欄で、プルダウンを「無効のみ表示」を選択し検索するとステータスが「無効」のものが表示されます。 配信したい自社広告に設定しているクリエイティブが無効になっていないかご確認ください。 クリエイティブ自体が「無効」になっている場合は自社広告を有効にしても広告が配信されません。 有効にする場合は、自社広告の設定と同様に一番左にチェックをいれて「有効」ボタンを押してください。 ## Q. 純広告の設定 **A.** ### 【a.純広告の登録】 1. 左カラムのメニュー「純広告」を押す 2. 「新規純広告追加」を押す ![純広告登録画面](/img/adg-help/house-ad004.png) 3. 「案件名」に純広告キャンペーン名を入力 4. 「配信プライオリティ」を選択 **純広告消化優先**:アドジェネ経由で併用配信中のADNNWの収益性に関わらず純広告の予算設定に合わせた消化を優先して配信 **収益優先**:インプレッション発生時に収益性が高い広告を優先的に配信 (RTBやアドネットワークの収益が高い場合にはそちらを優先的に配信) 5. 「単価(CPM)」を入力 6. 「配信開始日時」に開始日時を入力 7. 「配信終了日時」に終了日時を入力(任意) 8. 「サイズ」で広告のサイズを指定、配信先の広告枠を割り当てる サイズ指定後、「広告枠選択」ボタンを押すとそのサイズの広告枠が表示されるので純広告を配信する対象広告枠にチェックを入れ、「割り当て」ボタンを押してください。 ![広告枠選択画面](/img/adg-help/house-ad005.png) 9. 配信設定を行う キャンペーンに合わせて入力してください。1つのみでも3つすべてでも入力可能です。 **総配信量**:期間中に配信したいインプレッション数を入力してください。 **月次配信量**:1ヶ月に配信したいインプレッションを設定してください。 **デイリー配信量**:1日に配信したいインプレッションを設定してください。 10. 配信コントロール **フル**:消化優先で、予算がある限りできる限り早く消化するように配信を行います。 **スムース**:スケジュールに設定された予算に対して、日割りで配信量を自動的に計算し、かつインターネットの平均的なアクセストレンドカーブに沿う形で配信を行います。(正午や夜中の23時前後に配信量のピークが来るように配信を行います) **フラット**:スケジュールに設定された予算に対して、日割りで配信量を自動的に計算して配信を行います。毎時間の配信量がなるべく均一となるように配信を行います。 11. ターゲティングを設定する(任意) 特定の条件にあったユーザーに対してのみ配信したい場合はこちらを設定してください。 **OS**:特定のOSのみ配信したい場合に設定します。複数選択が可能です。 **キャリア**:特定のキャリアのみ配信したい場合に設定します。複数選択が可能です。 **フリークエンシー** 全期間の表示回数:1ユーザーに対して⑥で設定した期間内に何回表示させるかを設定できます。 1日の表示回数:1ユーザーに対して1日に何回表示させるかを設定できます。 **都道府県**:複数選択が可能です。 **曜日・時間帯**:特定の曜日や時間帯のみ配信したい場合に設定します。「追加」ボタンから条件を追加することができます。 **ラベル(Key-Value)**:Key-Valueを設定して配信が可能です。「追加」ボタンから条件を追加することができます。詳細はこちらをご覧ください。 12. 必要事項をすべて入力後「登録する」を押す ### 【b.クリエイティブの設定】 次に、クリエイティブの登録と設定を行います。手順については以下のリンクからご確認ください。 [クリエイティブ設定](#q-%E3%82%AF%E3%83%AA%E3%82%A8%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E8%A8%AD%E5%AE%9A) これで、純広告の設定は完了です。 純広告設定及びクリエイティブ設定画面で登録した配信開始日時になれば、配信が開始します。 #### ★広告が配信されない場合 1. 自社広告の配信期間(開始日時)/クリエイティブの配信期間(開始日時)はあっていますか? 両者が一致しない場合広告が配信されませんのでご注意ください。 純広告の配信期間内でも、そのクリエイティブに設定した期間が配信期間外だと配信されません。 2. 純広告/クリエイティブは有効になっていますか? 特に以前作成したものや配信していたものを再利用する場合などはご注意ください。 **【純広告一覧】** 上部の検索欄で、プルダウンを「無効のみ表示」を選択し検索するとステータスが「無効」のものが表示されます。 配信したい純広告を選択(一番左にチェック)し上にある「有効」をクリックしてください。 a−4で設定した「配信開始日時」 になると、広告が配信されます。 ![配信されない場合](/img/adg-help/house-ad006.png) **【クリエイティブ一覧】** 上部の検索欄で、プルダウンを「無効のみ表示」を選択し検索するとステータスが「無効」のものが表示されます。 配信したい純広告に設定しているクリエイティブが無効になっていないかご確認ください。 クリエイティブ自体が「無効」になっている場合は自社広告を有効にしても広告が配信されません。 有効にする場合は、純広告の設定と同様に一番左にチェックをいれて「有効」ボタンを押してください。 ## Q. クリエイティブ設定 **A.** ### 【クリエイティブ設定】 複数のクリエイティブを配信する場合はこの作業を繰り返します 1. 自社広告画面の対象自社広告(aで作成)のアクションボタン「クリエイティブ」を押す 2. 「新規自社広告クリエイティブ追加」を押す 3. 「名前」にクリエイティブ名を入力 4. 「配信開始日時」「配信終了日時」そのクリエイティブの配信開始・終了日時を入力(任意) 開始〜終了日時は1年以内で入力してください 5. 配信ウェイトを入力(任意) 1つの自社広告に複数のクリエイティブを設定する場合に、各クリエイティブの比率を設定することができます。 例)クリエイティブAで「2」クリエイティブBで「1」と設定した場合、A:Bが2:1の割合で配信される 6. クリエイティブタイプ - ファイルアップロード - 画像:「ファイルを選択」ボタンからファイルをアップロードしてください。 スケジュールで選択したサイズ、もしくはそのサイズの2倍 (高解像度)の大きさの画像が登録可能です。 登録可能なファイル形式:jpg,gif,png - クリックURL:画像をクリックしたときの遷移先URL - サードパーティ ![サードパーティタグ登録画面](/img/adg-help/house-ad007.png)   - サードパーティタグ:第三者配信タグを登録してください。マクロの利用が可能です。 - クリックURL:画像をクリックしたときの遷移先URL アドジェネでのクリック計測をおこなう場合は、マクロを適切に設定する必要があります。 - HTML ![HTMLタグ登録画面](/img/adg-help/house-ad008.png) - iframe利用:いいえを選ぶとSDK側でiframeに入れないようにする為の目印がクリエイティブに自動挿入されます。 - サードパーティタグ:任意のHTMLタグを登録してください。マクロの利用が可能です。 - 画像(1)、画像(2):クリエイティブとして画像をアップロードすることができます。 - クリックURL:画像をクリックしたときの遷移先URL 画面遷移、アドジェネでのクリック計測をおこなう場合は、HTMLにマクロを適切に設定する必要があります。 - ネイティブ ![ネイティブタグ登録画面](/img/adg-help/house-ad009.png) - ネイティブ広告設定テンプレートのマクロ/ネイティブパーツ実装時のパーツで利用できる以下の項目を登録することができます。 - メイン画像:横長の画像(縦横比の制限はありません) - アイコン画像:正方形の画像 - 広告タイトル:必須 - 広告主名:任意 - CTAボタン:CTAボタンに表示するテキスト。任意 - リード文:任意 - クリックURL:画像をクリックしたときの遷移先URL 画面遷移、アドジェネでのクリック計測をおこなう場合は、ネイティブ広告設定テンプレートのマクロ/ネイティブパーツ実装を適切に設定する必要があります。 - 動画(VAST) - 動画をクリエイティブとして設定したい場合はお問い合わせください。 7. 「登録する」を押す ## Q. 広告リクエストにKey-Valueを付与する方法 **A.** <アプリの場合> 以下のリンクよりご確認ください。 ■ iOS [insertADGLabelTargetingWithCustomKey](/ad-generation/api-reference/reference_ios#insertadglabeltargetingwithcustomkeyvalue) ■ Android [insertADGLabelTargetingWithCustomKey](/ad-generation/api-reference/reference_android#insertadglabeltargetingwithcustomkey-string-key-string-value) <Webの場合> 取得した広告タグに後述する形でKey-Valueターゲティングのパラメータを設定してください。&label_ 以降にKey-Valueを記述してください。 ▼パラメータの設定例 Keyがtheme_idでValueが1234の場合 → &label_theme_id=1234 ▼Keyを複数指定する際の設定例 1つめのKeyがtheme_idでValueが2234、2つ目のKeyが`hoge`でValueがabcの場合 → &label_theme_id=2234&label_`hoge`å=abc ▼タグの設置例 タグ取得画面のタグに先述した形式のパラメータを追加して設定します。 ``` ``` --- ## ネイティブ広告(Implementation-guide) 1. アプリにSDKを組み込む - 各環境の組み込み手順に従い、Ad Generation SDKを組み込みます。 - マニュアル  :[こちら](/ad-generation#%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E5%BA%83%E5%91%8A) - リリースノート:[iOS](https://github.com/AdGeneration/ADG-iOS-SDK/releases) / [Android](https://github.com/AdGeneration/ADG-Android-SDK/releases) - サンプル   :[iOS](https://github.com/AdGeneration/ADG-iOS-SDK/tree/master/Samples) / [Android](https://github.com/AdGeneration/ADG-Android-SDK/tree/master/Samples) - SDKを追加して配信アドネットワークを増やす場合は、下記手順を参考に実装を進めます。 不要の場合、STEP2.に移ります。 | サービス | マニュアル | 配信設定 | |---------|----------|---------| | AdMob | [iOS](/ad-generation/mediation/admobadapter_ios_manual)/ [Android](/ad-generation/mediation/admobadapter_android_manual) | 媒体社様(カスタム連携) | 1. テストIDで広告表示を確認する [テストID一覧](/ad-generation/test_id)よりテストIDを取得し、正しく広告表示が行われるか確認します。 ※1.b.で追加した要SDKアドネットワークもテストIDで表示確認することができます。 1. 本番IDで広告表示を確認する 管理画面上から広告枠IDを取得し、表示確認を行います。 ※ネイティブ広告の枠作成についてはこちらをご覧ください。 ※配信設定内でRTBや各アドネットワークの配信がONにされていることを確認してください。 1. アプリをリリースする 3.まで完了後、下記を確認してリリースをします。 - 本番IDである。 - テストモードを解除している。 --- ## Open Bidding # Bidder設定 - Open Bidding/入札広告ソース ## オンラインボーディング AdgenerationをGoogle Ad Manager / AdMobに接続するためには、オンラインボーディングの手順を完了する必要があります。この手順により、AdgenerationのビッダーがGoogleの広告配信システムに統合され、広告リクエストを適切に処理できるようになります。 具体的な手順については、[こちらのgoogleヘルプページ](https://support.google.com/admanager/answer/10078134)をご覧ください。([AdMobはこちら](https://support.google.com/admob/answer/13407143)) - GoogleAdManagerで Open Bidding を設定 AdgenerationをGoogle Ad Managerで利用するには、Open Biddingの設定が必要です。Google Ad Managerの各Adunit CodeをAdgenerationの枠にマッピングすることで、広告枠ごとに最適な入札が自動的に選ばれます。 設定方法の詳細は、[こちらのgoogleヘルプページ](https://support.google.com/admanager/answer/7128657)をご参照ください。 - AdMobで 入札のパートナーシップを設定 AdMobを使用している場合、AdMobを通じてAdgenerationの広告を配信することが可能です。 詳細な設定方法については、こちらのAdMob公式 [アカウントで入札のパートナーシップを設定する](https://support.google.com/admob/answer/10511265?hl=ja) をご参照ください。 ## Adgeneration側の設定に関して ### Adgenerationの枠作成とマッピング設定 Open BiddingでAdgenerationを利用するためには、Google Ad Managerの場合はAdunit CodeをAdgenerationの枠にマッピングし、AdMobの場合は、APPの関連付けの設定を行う必要があります。 この作業により、Googleの各Adunit/APPに対してAdgenerationが適切に配信されるようになります。 具体的な手順については、以下をご覧ください。 :::note 広告枠の作成はメディア様ご自身で管理画面から行っていただけます。 ::: ### 新規枠登録の手順 1. ログイン:[AdGeneration](https://ad-generation.jp/users/sign_in) 管理画面へログインします。 2. 広告枠グループ作成:広告管理 > 広告枠 > 「広告枠グループ設定」で 「EBDA」 と入力し作成します。(作成済みの場合は不要) 3. アプリ/サイト登録: 広告管理 > アプリ/サイト より、対象のメディアを登録します。 アプリ/サイトの登録が無い場合は、登録が必要になります。([設定方法はこちら](/help/flow/add-placement)) 4. 広告枠の登録:3のアプリ/サイト一覧画面で、対象の「+」マーク(広告枠登録)をクリックします。  4.1 **広告グループ**:「**EBDA**」を選択してください。❶ :::note 「EBDA」はOpen Biddingの旧称です。管理画面上では「EBDA」と表示されていますが、現在のOpen Biddingと同じものです。 :::  4.2 **枠名**:任意の名称を入力してください。❷ > 重要: 既存枠との重複を避けるため、末尾に 「_EB」 の付与を推奨します。例:AdUnitName_EB  4.3 **広告タイプ**:「**Bidder**」を選択してください。❸  4.4 **サイズ**:「**EBDA**」を選択してください。❹  4.5 **Ad Unit code**:配信プラットフォームに合わせて以下を設定してください。❺    - GAMの場合:NetworkCode, ParentAdUnitを含んだAdUnitCodeを設定ください。    例:/NetworkCode/ParentAdUnit/AdUnitName    - AdMob (Android)の場合:/パブリッシャーID/パッケージ名    例:/pub-12345/com.testapp    - AdMob (iOS)の場合:/パブリッシャーID/ストアID(ストアIDの「id」は含みません)    例:/pub-12345/12345 :::note **Ad Unit codeの設定に関しての注意点** - Ad Unit codeはGoogle側の管理画面で設定するAdUnitCodeと完全に一致する必要があります。誤りがあると入札が正しく行われないため、正確に入力してください。 - Ad Unit codeの冒頭には必ず「/」を含めてください。例:/pub-12345/com.testapp :::  4.6 広告枠設置位置を選択してください。❻  4.7 広告の見え方を選択してください。❼  4.8 サイト登録時のカテゴリがデフォルトで表示されています。❽  4.9 登録:「**登録する**」をクリックします。❾ 5. **ads.txt / app-ads.txtの設置**:ads.txtの設置が必要です。アプリの場合はapp-ads.txtをご設置ください。 詳細は[ads.txt / app-ads.txt](/help/more/adstxt)をご参照ください。 6. 運用(ブロック設定):カテゴリやドメインのブロック設定は[こちら](/help/flow/ad-block)をご参照ください。 7. 審査と開始:登録後、弊社にて審査を行います。審査完了後、配信が自動的に開始されます。審査結果は管理画面で確認可能です。 ## Open Bidding よくあるご質問・トラブルシューティング 導入や設定において、お客様から多く寄せられるご質問をまとめております。お問い合わせの前に、以下の項目をご確認ください。 ### ▼ アカウント連携・申請のエラーについて **Q. AdMob/GAMで連携申請をする際、「すでにアカウントが存在します」とエラーになります。** A. Googleのオンラインボーディングでは、仕様上ADGのアカウント作成画面を経由する必要があります。すでにADGアカウントをお持ちの場合でも、この画面での申請が必要です。 その際は、既存の会社名/パブリッシャー名と区別するため、末尾に「_OB連携用」などの識別子をつけて申請してください。(例:株式会社〇〇_OB連携用)※住所等は仮の内容でも構いません。 弊社にて既存アカウントへの紐付けおよび承認作業を行います。申請いただいたOB連携用アカウントは審査否決でお戻しします。 **Q. AdMob/GAM側のステータスが「承認待ち(パートナーシップ保留中)」から変わりません。** A. 弊社側での承認作業が必要なため、承認まで最大1週間程度お時間をいただく場合があります。 1週間以上経過してもステータスが変わらない場合は、システムエラーなどで申請が確認できていない可能性が高いため、AdMob等の管理画面で発行された「パブリッシャーID」をご確認の上、[お問い合わせフォーム](https://supership.jp/adgeneration-contact/) よりご連絡ください。弊社にて確認後、承認作業を行います。 **Q. 過去に登録したアプリ/サイトでOpen Biddingを始めたいのですが、「Ad Unit codeがすでに存在します」となり登録できません。** A. 本エラーは、過去に同一のAd Unit codeが既に登録されている場合に発生します。 管理画面ではデフォルトで「有効」ステータスの広告枠のみ表示されるため、以下をご確認ください。 - 「無効」ステータスの広告枠が存在しないか(検索条件を変更して確認) - 過去に審査否決となった広告枠が存在しないか 該当の広告枠が見つかった場合は、有効化することでご利用いただけます。 無効ステータスにもない場合は[お問い合わせフォーム](https://supership.jp/adgeneration-contact/)よりご連絡ください。 **Q. GAM360を使用していますが、オンラインボーディングはできますか?** A. 申し訳ございませんが、GAM360をご利用の場合はオンラインボーディングに対応しておりません。 詳細については[お問い合わせフォーム](https://supership.jp/adgeneration-contact/)よりご連絡ください。 ### ▼ 設定・実装について **Q. Google Ad Manager (GAM) 登録後、タグの発行やSDKの実装は必要ですか?** A. Open Biddingのみご利用の場合、タグやSDKの実装は不要です。 Open Biddingはサーバー間連携のため、AdGenerationのタグ設置やSDK実装は必要ありません。 弊社から共有する(または管理画面で作成した)広告枠情報(Ad Unit Code等)を、GAM/AdMobの管理画面にてマッピング(紐付け設定)していただくことで配信が可能になります。 **Q. Open Bidding利用時、SKAdNetwork ID の実装・追記は必要ですか?** A. アプリ(iOS)の場合は、SKAdNetwork IDの実装・追記を推奨します。 **Q. 通常の「バナー」や「動画リワード」の枠を作成する必要はありますか?** A. いいえ、Open Bidding専用の「Bidder」枠を作成してください。 通常の「バナー」や「動画リワード」枠はSDK実装用の広告枠となります。 ### ▼ レポート・収益・お支払いについて **Q. 管理画面のレポートにOpen Biddingの数値(収益)が反映されません。** A. 収益はGoogle側の管理画面にてご確認ください。 Open Biddingによる収益は、Google(AdMob/GAM)経由で計上され、Googleからお支払いされます。 そのため、AdGeneration管理画面のレポートには数値が反映されません。 --- ## Prebid.js # Bidder設定 Prebid.js ## Prebid.jsの設定に関して ### Prebid.jsの導入と基本設定 Prebid.jsを使用してAdgenerationを利用するためには、まずPrebid.jsライブラリをサイトに導入し、基本設定を行う必要があります。これにより、Prebid.jsを通じて広告リクエストが適切に処理され、広告の入札が可能になります。 具体的な導入手順については、[こちらのPrebid公式ドキュメント](https://docs.prebid.org/overview/intro.html)をご覧ください。 ### Prebid.jsでAdgenerationBidderを設定する Prebid.jsを使用してAdgenerationを利用するためには、Prebid.jsの設定ファイルにAdgenerationのBidderを追加する必要があります。これにより、各広告ユニットに対して最適な入札が自動的に選ばれ、広告が配信されます。 AdgenerationのBidderパラメータについては、[Prebid公式ドキュメント](https://docs.prebid.org/dev-docs/bidders.html#adgeneration)をご参照ください。 ## 広告枠に対するIDの設定に関して ### Adgenerationの枠作成とID設定 Prebid.jsでAdgenerationを利用するためには、AdgenerationのBidder設定を行い、各広告ユニットに対して枠IDを設定する必要があります。 この作業により、各広告ユニットに対して最適な入札が行われ、広告が適切に配信されるようになります。 Adgeneration側で新しい広告枠を作成し、その広告枠IDをPrebid.jsのsetConfig上で、対象枠に対しIDを追加していきます。具体的な枠ID発行手順については、以下をご覧ください。 ### 新規枠登録の手順 1. ログイン:[AdGeneration](https://ad-generation.jp/users/sign_in) 管理画面へログインします。 2. 広告枠グループ作成:広告管理 > 広告枠 > 「広告枠グループ設定」で 「Prebid」 と入力し作成します。(作成済みの場合は不要) 3. アプリ/サイト登録: 広告管理 > アプリ/サイト より、対象のメディアを登録します。 アプリ/サイトの登録が無い場合は、登録が必要になります。([設定方法はこちら](/help/flow/add-placement)) 4. 広告枠の登録:3のアプリ/サイト一覧画面で、対象の「+」マーク(広告枠登録)をクリックします。  4.1 **広告グループ**:「**Prebid**」を選択してください。❶  4.2 **枠名**:任意の名称を入力してください。❷    重要: 既存枠との重複を避けるため、末尾に「_PB」の付与を推奨します。例:AdUnitName_PB  4.3 **広告タイプ**:「**Bidder**」を選択してください。❸  4.4 **サイズ**:「**Prebid**」を選択してください。❹  4.5 広告枠設置位置を選択してください。❺  4.6 広告の見え方を選択してください。❻  4.7 サイト登録時のカテゴリがデフォルトで表示されています。❼  4.8 登録:「**登録する**」をクリックします。❽ 5. **ads.txt / app-ads.txtの設置**:ads.txtの設置が必要です。アプリの場合はapp-ads.txtをご設置ください。 詳細は[ads.txt / app-ads.txt](/help/more/adstxt)をご参照ください。 6. 運用(ブロック設定):カテゴリやドメインのブロック設定は[こちら](/help/flow/ad-block)をご参照ください。 7. 審査と開始:登録後、弊社にて審査を行います。審査完了後、配信が自動的に開始されます。審査結果は管理画面で確認可能です。 --- ## 動画リワード広告 # 動画リワード 1. 動画リワード広告を実装する - アプリにSDKを組み込む 各環境の組み込み手順に従ってください。 マニュアル:iOS / Android / UnityPlugin / Cocos2dx - 配信したいアドネットワークを広告枠IDに設定します。 | 配信形式 | アドネットワーク名 | 配信手配 | |--------|------------------|---------| | SDK | Ad Generation |媒体社様| | SDK | 連携しているアドネットワークはGithubをご確認ください [iOS](https://github.com/AdGeneration/VAMP-iOS-SDK/releases) / [Android](https://github.com/AdGeneration/VAMP-Android-SDK/releases) | Supership | | S2S(SDK実装不要) | AfiO | Supership | 2. 広告枠IDをセットし、テストモードで表示確認を行う。 3. アプリをリリースする 3.まで完了後、下記を確認してリリースをします。 4. テストモードを解除している。 --- ## 動作確認済み他社SDKバージョン # 動作確認済みの他社SDKver 以下の実装マニュアルに動作確認済みのverを記載しておりますので、ご参照ください。 ## Ad Generation SDK(バナー・ネイティブ) - iOS:[こちら](/ad-generation/mediation/sdk_mediation_notes) - Android:[こちら](/ad-generation/mediation/sdk_mediation_notes) ## VAMP SDK(動画リワード) - iOS:[こちら](/vamp/ios/mediation) - Android:[こちら](/vamp/android/mediation) :::caution[注意] 連携SDKは弊社から配布しているもの、または実装マニュアルにて案内しているサポートバージョンをご使用下さい。 バージョンが異なるとエラーが発生する可能性があります。 連携SDKでの実装後、広告の表示確認および、連携先の広告レポート数値などが正常であることをご確認いただいた上でアプリのリリースをお願いいたします。 ADG SDKとVAMP SDKでは、他社SDKの動作確認verが異なることがありますのでご注意ください。 ::: --- ## SKAdNetworkID iOS14以降で、SKAdNetworkを使った計測に対応するために、info.plistへSKAdNetwork IDの記載をお願いいたします。 参考:記述方法については、下記ページの「Configure a Source App」の項をご参照ください。 https://developer.apple.com/documentation/storekit/skadnetwork/configuring_a_source_app/ ※SKAdNetwork IDに含まれるアルファベットは全て小文字になることが、Appleのドキュメントに記載されています。 大文字を含むIDで実装されている場合は、小文字への修正をお願いいたします。 ## 【SKAdNetwork IDの取得方法】 1. メニューの「アカウント」>「SKAdNetwork ID」を開く 2. アプリに実装しているSDKにチェックを入れる 3. 「ID一覧を更新」ボタンを押すと、下部の領域に必要なIDが表示されるので、コピーしてご利用ください。 ![SKAdNetwork ID画面](/img/adg-help/skadnetworkid001.png) 事業社名の「Ad Generation」はアドジェネSDK、VAMP(動画リワード)SDK共通のリストです。 すべての広告タイプについて、Ad Generationを選択して表示されたSKAdNetwork IDをアプリのinfo.plistファイルに追加してください。 それ以外は、SDK連携しているアドネットワーク事業者のSKAdNetwork IDになります。 アドジェネSDK、VAMP SDK以外のアドネットワーク事業者を配信している場合(カスタム連携のAdMob、動画リワード・全画面インタースティシャル)は、Ad Generationと合わせて対象の事業社名にチェックをいれてください。 アドネットワークによってはその事業者が連携しているデマンドのIDが複数ある場合があります。 その場合もすべてのIDを記載するようお願いします。 --- ## Webサイト・WebView実装ガイド # Webサイト 1. [広告枠を作成](/help/flow/add-placement)する 2. JSタグを取得し実装する 作成した広告枠からJSタグを取得し、[ページ内の広告を表示したい位置に貼り付け](/ad-generation/platforms/web)ます。 取得するタグは非同期タグになっております。 ## 注意点 / 補足 - ネイティブ広告の表示について - JSタグのデザイン設定を行う必要があります。詳しくは[こちら](/help/implementation-guide/native)をご覧ください。 - 広告枠IDの使い回しについて - 原則、表示位置ごとに広告枠IDを発行してください。 もし、同じ広告枠IDを使用して複数の広告を設置したい場合は、[scriptタグ上のパラメータで各枠を区別](/ad-generation/platforms/web/banner_ad_web#%E3%83%91%E3%83%A9%E3%83%A1%E3%83%BC%E3%82%BF%E3%83%BC%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6)してください。 - 非同期タグに関して - 取得するタグは非同期設定になっております。非同期はWebページのコンテンツのロードと並列で広告の呼び込み処理が実行されるため、ページ読み込みに対して影響がない形式です。 ページの読み込みが先に完了した場合は広告領域が遅れて確保されるため、コンテンツが下に動いて見える場合があります。ページの視覚的安定性を高める必要がある場合は、webページ側で広告領域の確保を行って下さい。 - 同期での広告呼び込みを行いたい場合は、タグ内のasync=true表記をasync=falseへ変更してください。 --- ## Ad Generation ヘルプセンター # AdGenerationヘルプセンター --- ## アドジェネ導入の前に [Q. アドジェネとは](#q-%E3%82%A2%E3%83%89%E3%82%B8%E3%82%A7%E3%83%8D%E3%81%A8%E3%81%AF) [Q. サービスポリシー](#q-%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%83%9D%E3%83%AA%E3%82%B7%E3%83%BC) [Q. アドジェネサービス概要](#q-%E3%82%A2%E3%83%89%E3%82%B8%E3%82%A7%E3%83%8D%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E6%A6%82%E8%A6%81) [Q. ご利用について](#q-%E3%81%94%E5%88%A9%E7%94%A8%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) [Q. 広告枠の審査について](#q-%E5%BA%83%E5%91%8A%E6%9E%A0%E3%81%AE%E5%AF%A9%E6%9F%BB%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) [Q. アドジェネの利用規約](#q-%E3%82%A2%E3%83%89%E3%82%B8%E3%82%A7%E3%83%8D%E3%81%AE%E5%88%A9%E7%94%A8%E8%A6%8F%E7%B4%84) --- ## Q. アドジェネとは **A.** アドジェネは、**"楽しく、自由につかえる、パブリッシャー向けアドプラットフォーム"** です。 アドネットワーク事業者やDSP事業者からの広告を一括管理でき、独自の配信ロジックで収益を自動的に最大化します。純広告や自社広告の管理配信も可能です。 アドネットワーク事業者やDSP事業社から配信される広告を、アドジェネを使って一括管理することができます。 独自の配信ロジックで収益の最大化を自動的に行います。 また上記に加え、純広告や自社広告についてもアドジェネの管理画面上で登録・配信管理を行うことが可能です。 ![Ad Generationサービス概要図](/img/adg-help/about_adg.png) --- ## Q. サービスポリシー **A.** わたしたちは、 メディア様だけでなく、 広告主様にも、広告をみるユーザー様にも、 "HAPPY"を届けられるサービスを目指します。 --- ## Q. アドジェネサービス概要 **A.** アドジェネのサービス概要について資料にまとめておりますので以下のリンクよりDLのうえご確認ください。 フォームにご入力いただくとダウンロードのリンクが表示されます。 [Ad Generation資料請求](https://share.hsforms.com/11Pc4beKuSW2or30VOKoR3g422gk)からダウンロード可能です。 --- ## Q. ご利用について **A.** アドジェネはみなさまのメディアに配信された広告収益の一部を運営費用(手数料)としていただくビジネスモデルとなっており 導入時に別途費用などはかかりません。 ※「カスタム配信」機能を使ってアドサーバーとして利用する場合は、運営費用も無料です。 --- ## Q. 広告枠の審査について **A.** アドジェネの広告枠の審査では、下記内容に抵触しているまたは類似している場合、各申請をお断りさせていただくことがあります。 【全般】 - 内容が確認できないアプリ/WEBサイト - スマートフォンに最適化されていないWEBサイト - 法令、政令及び省令、規制、行政指導、条約に抵触する内容を含むアプリ/WEBサイト - 著作権や商標権等の知的財産権を侵害する内容を含むアプリ/WEBサイト - 公序良俗に反する内容を含むアプリ/WEBサイト - 更新頻度が弊社基準(非開示)を満たしてないWEBサイト - コンテンツの利用を著しく阻害するような広告実装方法のアプリ/WEBサイト - 運営主体や問い合わせ先がユーザーに明示されていないアプリ/WEBサイト - 差別につながる民族・宗教・人種・性別・年齢等に関する内容を含むアプリ/WEBサイト - 公式ストア向けではないアプリ(AppStore,GooglePlay以外に関してはinfoよりお問い合わせください) 【業種】 - アプリ/WEBサイト内で表示されるアダルトに関する表現が露骨な場合 - 出会いや不特定多数が書き込み可能な掲示板サービスやチャット・メール交換を行うサービス (学生、主婦、同じ趣味の仲間等、特定の限定されたユーザーが対象の物は可) - クリック、応募等で無料のポイントを取得するサービス - ギャンブル予想サービス(公営ギャンブル等の情報は可、誘引及び購入などは不可) 【その他】 - コンテンツが広告、アフィリエイトリンクのみのアプリ/WEBサイト - 利用するためにログインアカウントが必須なサービス(審査用の仮ID,passwordの発行をお願いする場合がございます) - 広告の誤クリックが発生する恐れがあるもの - 広告をクリックすることでインセンティブが発生するもの。 また、インセンティブがなくとも広告のクリックをユーザーに対し勧めているもの - その他、弊社が掲載不可と判断したもの --- ## Q. アドジェネの利用規約 **A.** [Ad Generation利用規約](https://d33i0hrx5hfd27.cloudfront.net/files/cms/files/832/Adgenerationriyoukiyaku_20190501.original.pdf)をご確認ください。 --- ## ads.txt / app-ads.txt [Q. ads.txt / app-ads.txtについて](#q-adstxt--app-adstxt%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6) ## Q. ads.txt / app-ads.txtについて **A.** 「ads.txt 」「app-ads.txt」 は、IAB(Interactive Advertising Bureau)の研究・開発組織であるIAB Tech Labによって策定された、プログラマティック広告取引の透明性を高めるための仕組みです。 https://iabtechlab.com/ads-txt-about/ https://iabtechlab.com/wp-content/uploads/2019/03/app-ads.txt-v1.0-final-.pdf 昨今、悪意を持った第三者が人気サイト・アプリになりすまし、実際に広告が掲載されているかのように装うことで、広告費を不正にだまし取る広告詐欺が増えてきています。 これにより、パブリッシャーは広告収益の減少(不正サイトに収益が流れてしまう)や広告枠の価値低下によって、単価や案件数が減少しさらに収益が下がる可能性があります。 また、広告主は意図しない不正媒体へ広告が配信されてしまったり(無駄な広告費の発生や)、費用対効果の悪化等、業界全体として悪影響を与えてしまっています。 こうした不正取引を防止し、適正な広告配信をすることを目的で誕生したのがads.txt / app-ads.txtです。 サイトにads.txt、アプリの場合はディベロッパーサイトにapp-ads.txtファイルを実装することで、広告枠入札の際にDSP等のデマンドサイドがファイルをクロールし、正式な広告販売事業からのリクエストなのかを判定します。 こうすることでなりすましサイトやアプリへの広告配信を防止し、適正な広告配信を行うことができます。 将来的には、ads.txt / app-ads.txtファイルを実装しているアプリに関しては取引価格が上がっていく可能性もあります。 app-ads.txtの設置がない場合に買い付けを行わない事業者も存在するため、CPMの低下を防ぐためにもご対応をお願いいたします。 以下の手順に従って進めてください。 ### ▼手順 #### ads.txt / app-ads.txtのファイルを作成する アドジェネでは、管理画面のads.txt / app-ads.txtのページで、御社のアカウントに沿った記述をコピペできるようにご用意しているので、①をコピーしてテキストファイルを作成してください。 ※ ①は、Ad Generationのapp-ads.txtに加え接続先デマンドのコードも含みます。(OpenX, Magnite(Rubicon), PubMatic, Pangle, Index Exchange, Unruly, Xandr等) また、Ad Generationのアカウントの管理を委託され、広告枠の再販を許可されている場合は、3番目のフィールドをRESELLERに変更してください。 なお、Ad Generationの配信に加えて下記のアドネットワークSDKを追加している場合はそれぞれのコードも記載する必要がございます。 ▶をクリックするとコピペ用のテキストボックスが表示されますので、必要に応じてコピーしてご利用ください。(②) また、カスタムタグをご利用されている場合は直アカウントのコードもお忘れなく記載してください。 必要な内容を記載いただいたら、 webサイトに配信している広告に対して設置する場合は`ads.txt` アプリに配信している広告に対して設置する場合は`app-ads.txt` と名前をつけて保存してください。 ![ads.txt / app-ads.txtのファイルを作成する](/img/adg-help/adstxt001.png) #### Webサイトの配下にads.txtまたはapp-ads.txtを設置する - Webサイトの場合(ads.txt) - アドジェネの広告を配信しているwebサイトのドメイン直下にads.txtのファイルを設置してください。 - 詳細についてはIABのマニュアル(https://iabtechlab.com/ads-txt) をご覧ください - アプリの場合(app-ads.txt) - AppStore、GooglePlayStoreのアプリのページにリンク先として指定しているURL - app-ads.txtのファイルを設置してください。 - 詳細についてはIABのマニュアル(https://iabtechlab.com/wp-content/uploads/2019/03/app-ads.txt-v1.0-final-.pdf) をご覧ください。 AppStoreの場合:「デベロッパWebサイト」のリンク先として指定されているURL ![AppStoreの場合「デベロッパWebサイト」に指定されているURL](/img/adg-help/adstxt002.png) GooglePlayStoreの場合「デベロッパーの連絡先」→「ウェブサイト」に指定されているURL - 参考 - https://iabtechlab.com/ads-txt  - https://iabtechlab.com/wp-content/uploads/2019/03/app-ads.txt-v1.0-final-.pdf - 以下にSupershipとしての見解、対応方法を発表しております。 - 【Supershipの広告プロダクトにおける「ads.txt」の対応について】※2017年10月26日リリース --- ## 位置情報 [Q. ​位置情報を活用した広告配信とSupershipの考え方](#q-%E4%BD%8D%E7%BD%AE%E6%83%85%E5%A0%B1%E3%82%92%E6%B4%BB%E7%94%A8%E3%81%97%E3%81%9F%E5%BA%83%E5%91%8A%E9%85%8D%E4%BF%A1%E3%81%A8supership%E3%81%AE%E8%80%83%E3%81%88%E6%96%B9) [Q. ​ユーザー同意の取得方法](#q-%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E5%90%8C%E6%84%8F%E3%81%AE%E5%8F%96%E5%BE%97%E6%96%B9%E6%B3%95) ## Q. ​位置情報を活用した広告配信とSupershipの考え方 **A.** 近年、位置情報を活用した広告は、ユーザーの行動範囲の中で、シーンに合わせたアプローチが可能なため、これまでになかった広告主様(小売・流通業等)の登場や位置情報を活用したDSP事業社の登場等により盛り上がりを見せ始めています。 その中で、Supershipでは、昨今のGDPRの施行や、個人のデータ管理に対する世論の危機意識を受け、利用者(アプリユーザー)に対し、データの取得・利用に関する透明性・信頼性を確保するとともに、データ利用に関し利用者の意思を尊重しております。 アドジェネをご利用いただくにあたり、直接のデータ取得者であるアプリ事業者様にも、利用者に対し、位置情報の取得・利用・第三者(Supership)への提供について同意を取っていただき、透明性・信頼性の確保に努めた上でご利用いただきたいと考えております。 以下、位置情報利用に関するユーザーへの通知・同意方法のガイドラインとなります。 位置情報を取得しているアプリやこれからご利用予定のアプリメディア様は、以下改めてご確認の上ご対応をお願いいたします。 ## Q. ​ユーザー同意の取得方法 **A.** 位置情報の取得・利用に関する個別明確な同意(オプトイン)の取得が必要になります。 ### <同意の取得方法> - サービス提供開始に先立ち、位置情報の取り扱いについてのポップアップ等で同意画面を表示させた上で、ユーザーに同意のクリックを求める - ポップアップ等からより詳細情報を記載したプライバシーポリシーに誘導する ### <サービス提供開始時にポップアップ等で表示すべき事項> - 位置情報を取得する事実 - 位置情報の種類 - 利用目的 - 第三者提供 ### <プライバシーポリシーへの記載事項> - 位置情報の取得者 - 位置情報の種類 - 位置情報の精度 - 取得頻度 - 取得期間 - 利用目的 - 第三者提供の有無・第三者提供先 - 保存期間 - 位置情報に紐づけて利用される他の利用情報 ### <利用者関与の仕組み(オプトアウト)> - プライバシーポリシーその他利用者にとってわかりやすい箇所に、オプトアウト方法を明記 ### <オプトアウト方法> - 端末側での操作方法の説明(iOS, Android) - アプリ事業者によるオプトアウトの受付 ※上記は総務省よりリリースされている以下を参考にしたガイドラインとなります。 あくまで参考としてご利用ください。 **◇参照** 総務省「位置情報プライバシーレポート(H26.7)」で言及される同意取得方法 http://www.soumu.go.jp/main_content/000434727.pdf --- ## 配信ロジック [Q. 配信ロジック](#q-%E9%85%8D%E4%BF%A1%E3%83%AD%E3%82%B8%E3%83%83%E3%82%AF) [Q. 優先配信](#q-%E5%84%AA%E5%85%88%E9%85%8D%E4%BF%A1) [Q. RTB設定](#q-rtb%E8%A8%AD%E5%AE%9A) ## Q. 配信ロジック **A.** 複数の広告配信事業者の中から配信実績を基に収益性(eCPM)を自動的に取得し、配信順位や配信比率を1時間ごとに最適化しています。 ### ▼管理画面イメージ ![管理画面イメージ](/img/adg-help/logic001.png) ※比率はあくまでも各社にリクエストする割合になるため、アドネットワーク側で広告在庫がない場合などは他のデマンドから広告が出ることもあり、必ずしも比率通りにインプレッションが出るとは限りません。 ## Q. 優先配信 **A.** 配信設定画面で「優先配信」と出ているものは、eCPMが高い案件が継続して配信できるアドネットワークとしてアドジェネ側で設定されたものになり 比率(%)が振られているアドネットワークより優先して呼び出されます。 なお、配信状況(eCPMの上下)によっては「優先配信」が外れて他のアドネットワークと同じ比率配信(%)になることもございます。 ## Q. RTB設定 **A.** それぞれの広告枠で最適な事業者の広告を配信するための、ロジックに関する設定を行えます。 管理画面:各広告枠の「配信設定」画面にある「RTB設定」 ![RTB設定画面](/img/adg-help/logic002.png) ### 「配信」チェックボックス アドジェネとRTB接続されてている事業者(DSP)の配信オン/オフを切り替えます。 通常は、オン(チェックされた状態)でご利用ください。 後述のロジックにより、価格競争で勝った事業者の広告が配信されます。 ### 「ユニファイドオークションを有効にする(推奨)」チェックボックス DSPの他、アドネットワークおよびカスタム接続された事業者の中で、最も高い金額の広告が配信されます。 下の図の場合、DSP、アドネットワークを問わず、全ての事業者を対象に並列で価格競争が行われ、もっとも金額の高い100円のDSP1が配信されます。 (例)ユニファイドオークションがオンの場合 ![ユニファイドオークション設定](/img/adg-help/logic003.png) ### 「フロアプライス設定」 ユニファイドオークションをオフにすることで、フロアプライスの金額を基準とした価格競争が行われます。 フロアプライスより高い単価のDSPがあれば、その広告が配信されますが、低い単価のDSPしかない場合には、アドネットワークなどDSP以外の広告が配信されます。 またフロアプライスの設定は、CPMの実績がもっとも高いアドネットワーク*の金額が反映される「自動」(デフォルト)と任意の金額を設定する「手動」から選択することができます。 ※ 優先配信のアドネットワークは対象外となります。 下の図の場合、フロアプライス90円 < DSP1 100円 となるため、DSP1が配信されます。 (例)RTBフロアプライス:90円を設定した場合 ![Rtb Setting 03](/img/adg-help/logic004.png) 下の場合、フロアプライス110円 > DSP1 100円(DSPの中の最高金額) となり、DSPは配信されず、アドネットワークの中でもっとも金額の高い60円のADNW1が配信されます。 (例)RTBフロアプライス:110円を設定した場合 ![Rtb Setting 04](/img/adg-help/logic005.png) --- ## Supershipポリシー及びオプトアウト # Supershipポリシー及びオプトアウトリンク掲載 [Q. Supershipポリシー及びオプトアウトリンク掲載について](#q-supershipポリシー及びオプトアウトリンク掲載について) ## Q. Supershipポリシー及びオプトアウトリンク掲載について **A.** アドジェネを導入いただいた際には、媒体社様のアプリ/サイトにSupershipポリシー及びオプトアウトリンクの掲載をお願いしております。 - Supership インフォマティブデータポリシー https://supership.jp/privacy/ - Supership オプトアウトページ https://supership.jp/optout/ 広告効果の高いターゲティング広告は、媒体社様の収益向上に寄与すると同時にユーザーにとっても自分が興味関心のある広告に接する機会が増えるというメリットがあります。 他方で、ユーザーは自分の何のデータが、誰に、どのように利用されているかについて知る権利があり、ユーザーによるデータ利用のコントロールの機会を確保する必要があります。 したがって、ユーザーデータを利用する事業者としては、ユーザーに対し望まないデータ共有・利用を停止する方法(オプトアウト)を確実に提供することが重要であると考えます。 また、ユーザーへの情報提供、オプトアウトの機会確保という趣旨から媒体社様のアプリ/サイトの分かりやすい場所へ掲載していただきますようお願い申し上げます。 なお、ユーザーデータを利用した行動ターゲティング広告においてオプトアウトの機会をユーザーに提供することは、JIAAの定める行動ターゲティング広告ガイドラインにおいても求められております。 JIAA会員社様はもちろん、非会員の媒体社様におかれましても、ターゲティング広告業界の課題としてご対応いただきますようお願いいたします。 ### 【記載例】 |企業名|プライバシーポリシー|オプトアウト| |----|----|----| |A社|https://~|https://~| |B社|https://~|https://~| |Supership株式会社|https://supership.jp/privacy/|https://supership.jp/optout/| ### 【参考】 #### ◆auスマパスアプリ(ios) 実装例 ヘルプ→プライバシーポリシー→最下部「こちら」→Supershipインフォマティブデータポリシーページ ヘルプ→広告について→各社オプトアウトページ #### ◆JIAA 行動ターゲティング広告ガイドライン https://www.jiaa.org/wp-content/uploads/2019/11/JIAA_BTAguideline.pdf (利用者関与の機会の確保) 第5条 広告提供事業者は、利用者に対し、広告提供事業者が行動履歴情報を取得するこ との可否または広告提供事業者が行動履歴情報を利用することの可否を容易に 選択できる手段(オプトアウト)を、自らの告知事項を記載したサイト内のペー ジから簡単にアクセスできる領域で提供する。 2 媒体運営者は、自らのウェブサイト等の分かりやすい場所に、広告提供事業者の 告知事項を記載したページへのリンクを設置することにより、利用者に対し、前項の手段(オプトアウト)を提供する。 --- ## SDKインテグレーションガイド import WhatsNewListPaginated from '@site/src/components/WhatsNew/WhatsNewListPaginated'; import WhatsNewCount from '@site/src/components/WhatsNew/WhatsNewCount'; import Link from '@docusaurus/Link'; export const newsnum = 20; :::warning[サイト統合のお知らせ] Ad Generation SDKとVAMP SDKのドキュメントを 2025年12月 に統合しました。 より充実したコンテンツと改善されたナビゲーションで開発をサポートします。 ::: {(count) => ( <> 📢 最新情報({count}件) )} すべての更新情報を見る → --- ## 【Android】App Open Ads(アプリ起動時広告) import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # 【Android】App Open Ads(アプリ起動時広告) App Open Ads(アプリ起動時広告)は、アプリの読み込み画面やバックグラウンドからの復帰画面を収益化するための全画面広告フォーマットです。ユーザーがアプリを起動したタイミングや、フォアグラウンドに切り替えたタイミングで表示されます。ユーザーはいつでも広告を閉じることができます。 実装は以下の3ステップで行います。実運用では加えて、アプリのライフサイクル統合(後述の[実装方針](#実装方針)・[アプリのライフサイクルに統合する](#アプリのライフサイクルに統合する))が必要です。 1. 広告を事前にロードする 2. アプリのライフサイクルイベントを監視し、適切なタイミングで広告を表示する 3. リスナーでコールバックを処理する ## 前提条件 - VAMP SDK v5.3.5 以降(VAMP 全体の最小要件) - VAMPPangleAdapter 7.9.10200(Pangle SDK 7.9.1.2 同梱)以降 - 対応アドネットワーク: 現時点では Pangle - `androidx.lifecycle:lifecycle-process` 2.5.1 以降(バックグラウンド復帰検知に使用) ```groovy dependencies { implementation 'androidx.lifecycle:lifecycle-process:2.5.1' } ``` 各メソッドの仕様やオプションについては、Androidリファレンスをご参照ください。 テスト時の広告枠IDについては[テスト](/vamp/android/test)を参照してください。 現時点の Android App Open Ads は、`VAMP SDK + VAMPPangleAdapter` の組み合わせでご利用ください。導入方法そのものは、以下のページを参照してください。 - VAMP SDK本体: [スタートガイド](/vamp/android/integration-guide) - Pangleアダプター: [Pangleの統合](/vamp/android/mediation/pangle) ## 実装方針 安定した実装には、広告のロードに加えてアプリのライフサイクル制御が重要です。**いつロードし、いつ表示し、いつ再ロードするか** をアプリ側でも明確に管理してください。 ### 3 つのシナリオで考える App Open Ads の挙動は、以下の 3 シナリオで考えると整理しやすくなります。各シナリオの行動方針は、`AppOpenAdManager` 例(後述)の動作と一致します。 1. **初回起動**: ロード済み広告のキャッシュがない状態でアプリが起動する。最初の `Activity` が `onResume` に遷移し `currentActivity` が確定したタイミングで `load` を開始し、`onReceived` を受けた時点でそのまま表示する。 2. **バックグラウンド復帰**: ロード済み広告がキャッシュにある場合のみ即表示する。未準備の場合は、その復帰時には表示せず次回用の `load` だけ行う(後追い表示はしない)。 3. **広告 close 後の再ロード**: `onClosed` / `onFailedToShow` の直後ではなく、次の `onActivityResumed()` で安全に再ロードする。理由は「[close 直後の preload について](#close-直後の-preload-について)」を参照。 加えて、上記いずれのシナリオでも **広告表示中は追加の `load` / `show` を行わない** ことが前提です。 ### 必要な状態フラグ Android では、`ProcessLifecycleOwner` の `onStart()` は初回起動時にもバックグラウンドからの復帰時にも発火します。さらに、`onStart()` のタイミングでは最前面の `Activity` がまだ `currentActivity` として確定していない場合があります。状態を持たずに `onStart()` のたびに単純に `load` / `show` を呼ぶ実装にすると、空振りや二重ロードが発生しやすくなります。 そのため、以下の状態を持つ構成にすると実装しやすくなります。シナリオとの対応関係も併記します。 - `isInitialLaunch` - 初回起動時のみ、ロード完了後に即表示するためのフラグ(シナリオ 1) - `isLoadingAd` - 同じ placementID に対する二重ロードを防ぐためのフラグ(シナリオ 1・2 共通) - `isShowingAd` - 広告表示中の `onStart()` / `onActivityResumed()` を無視するためのフラグ(シナリオ 2 中の表示完走を守る) - `showAfterCurrentLoad` - `runForegroundAction` で `isInitialLaunch` を即 false 化したうえで、「この load 完了後に show する意図」だけを `onReceived` まで持ち越すためのフラグ(シナリオ 1 と 2 を分離するための一時保持) - `pendingForegroundAction` - `onStart()` 時に `currentActivity` が未確定でも、次の `onActivityResumed()` で foreground 方針を 1 回だけ適用するためのフラグ - `pendingPreloadAfterResume` - 広告 close 直後の即時 preload を避け、次回 `onActivityResumed()` で安全に preload するためのフラグ(シナリオ 3) 上記を使っておくと、初回起動・バックグラウンド復帰・広告クローズ後の再ロードを安全に制御しやすくなります。 ## 広告の読み込み :::note このセクションと「[広告の表示](#広告の表示)」は API レベルの呼び出し例です。実運用では「[アプリのライフサイクルに統合する](#アプリのライフサイクルに統合する)」で示すマネージャークラス構成(`AppOpenAdManager`)の採用を推奨します。本セクションだけを実装してしまうと、バックグラウンド復帰時の表示・close 後の再ロード・初回起動と復帰の挙動差をアプリ側で制御できません。 ::: 次のコードスニペットでは、広告の読み込みをする場合の実装例です。 リスナーには`VAMPAppOpenAdLoadListener`を設定してください。 AdGeneration管理画面で発行された広告枠IDを*****に設定します。 ```java import jp.supership.vamp.VAMPAppOpenAd; import jp.supership.vamp.VAMPAppOpenAdLoadListener; import jp.supership.vamp.VAMPError; import jp.supership.vamp.VAMPRequest; public class MainActivity extends AppCompatActivity { private static final String PLACEMENT_ID = "*****"; // 広告枠IDを設定してください @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); VAMPRequest request = new VAMPRequest.Builder().build(); VAMPAppOpenAd.load(this, PLACEMENT_ID, request, new VAMPAppOpenAdLoadListener() { @Override public void onReceived(@NonNull String placementId) { // ロード成功。VAMPAppOpenAd.of(placementId) でキャッシュを取得して show() できます } @Override public void onFailedToLoad(@NonNull String placementId, @NonNull VAMPError error) { // 広告が取得できませんでした } }); } } ``` ```kotlin import jp.supership.vamp.VAMPAppOpenAd import jp.supership.vamp.VAMPAppOpenAdLoadListener import jp.supership.vamp.VAMPError import jp.supership.vamp.VAMPRequest class MainActivity : AppCompatActivity() { companion object { private const val PLACEMENT_ID = "*****" // 広告枠IDを設定してください } override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) val request = VAMPRequest.Builder().build() VAMPAppOpenAd.load(this, PLACEMENT_ID, request, object : VAMPAppOpenAdLoadListener { override fun onReceived(placementId: String) { // ロード成功。VAMPAppOpenAd.of(placementId) でキャッシュを取得して show() できます } override fun onFailedToLoad(placementId: String, error: VAMPError) { // 広告が取得できませんでした } }) } } ``` 広告の読み込みに成功した場合、`VAMPAppOpenAdLoadListener`の`onReceived`が呼ばれます。 :::note[早期ロードの推奨] App Open Ads はアプリ起動の早い段階で読み込みを開始し、バックグラウンド復帰時にすぐ表示できるようキャッシュしておくことを推奨します。 ::: :::note[重複ロードに注意] `load` を呼ぶたびに必ず新規ネットワークリクエストが発生する前提で実装しないでください。同一 placementID に対してロード中・表示中・ロード済みの広告がある場合、SDK 側でリクエストはスキップされます。アプリ側でも「表示可能な広告があるか」と「今ロード中か」を管理し、不要な重複ロードを避けることを推奨します。 ::: ## 広告読み込み時のリスナー 広告読み込み時の通知を受け取るための`VAMPAppOpenAdLoadListener`のメソッドについて解説します。 このリスナーは`VAMPAppOpenAd.load()`(広告読み込み時)で設定します。 ### 広告表示準備完了 広告のロードが成功したタイミングで呼び出されます。 ```java @Override public void onReceived(@NonNull String placementId) ``` ```kotlin override fun onReceived(placementId: String) ``` ### 広告読み込み失敗 広告の読み込みに失敗した際に呼び出されます。 ```java @Override public void onFailedToLoad(@NonNull String placementId, @NonNull VAMPError error) ``` ```kotlin override fun onFailedToLoad(placementId: String, error: VAMPError) ``` 詳細については[エラーコード一覧](/vamp/android/api-error)を参照してください。 ### 期限切れ通知について Android の `VAMPAppOpenAdLoadListener` には、ロード済み広告の有効期限切れを通知する専用のコールバックは定義されていません。期限切れの取扱いと再ロード方針は「[注意事項 > 広告の有効期限](#広告の有効期限)」に集約しています。 ## 広告の表示 `VAMPAppOpenAd.of(PLACEMENT_ID)` は、その placementID に対してロード済みでまだ表示していない広告のキャッシュを返します。キャッシュがない、または既に表示済み・ロード中の場合は `null` を返します。 リスナーには`VAMPAppOpenAdListener`を実装したインスタンスを渡してください。 ```java VAMPAppOpenAd appOpenAd = VAMPAppOpenAd.of(PLACEMENT_ID); if (appOpenAd != null) { // 広告の表示(listener は VAMPAppOpenAdListener を実装したインスタンス) appOpenAd.show(this, new VAMPAppOpenAdListener() { @Override public void onOpened(@NonNull String placementId) { /* 広告表示開始 */ } @Override public void onClosed(@NonNull String placementId, boolean adClicked) { /* 広告クローズ */ } @Override public void onFailedToShow(@NonNull String placementId, @NonNull VAMPError error) { /* 表示失敗 */ } }); } ``` ```kotlin // 広告の表示 VAMPAppOpenAd.of(PLACEMENT_ID)?.show(this, object : VAMPAppOpenAdListener { override fun onOpened(placementId: String) { /* 広告表示開始 */ } override fun onClosed(placementId: String, adClicked: Boolean) { /* 広告クローズ */ } override fun onFailedToShow(placementId: String, error: VAMPError) { /* 表示失敗 */ } }) ``` ## アプリのライフサイクルに統合する ### バックグラウンド復帰時の表示 App Open Adsの主なユースケースは、アプリがバックグラウンドからフォアグラウンドに復帰したタイミングでの広告表示です。`ProcessLifecycleOwner` を使用してアプリのフォアグラウンド復帰を検知し、`Application.ActivityLifecycleCallbacks` で最前面の `Activity` を追跡します。 以下は `Application` クラスで初期化するマネージャークラスの実装例です。`DefaultLifecycleObserver` の `onStart()` でフォアグラウンド復帰を検知し、`onActivityResumed()` で `Activity` が確定したタイミングに表示・ロードを行う構成にしています。`onStart()` 時点で `currentActivity` が未確定な場合は、フラグだけ立てて次の `onActivityResumed()` で処理を再開します。 広告 close 直後の即時 preload は不安定になりやすいため、次の `onActivityResumed()` で preload する構成にしています。 ```kotlin import android.app.Activity import android.app.Application import android.os.Bundle import androidx.lifecycle.DefaultLifecycleObserver import androidx.lifecycle.LifecycleOwner import androidx.lifecycle.ProcessLifecycleOwner import jp.supership.vamp.VAMPAppOpenAd import jp.supership.vamp.VAMPAppOpenAdListener import jp.supership.vamp.VAMPAppOpenAdLoadListener import jp.supership.vamp.VAMPError import jp.supership.vamp.VAMPRequest class AppOpenAdManager(application: Application) : DefaultLifecycleObserver, Application.ActivityLifecycleCallbacks { companion object { private const val PLACEMENT_ID = "*****" // 広告枠IDを設定してください } private var currentActivity: Activity? = null private var isInitialLaunch = true private var isLoadingAd = false private var isShowingAd = false private var showAfterCurrentLoad = false // onStart 時点で Activity が未確定でも、resume 後に foreground 方針を 1 回だけ適用するためのフラグ。 private var pendingForegroundAction = false // close / show failure 直後の不安定な再 load を避け、次回 resume で preload するためのフラグ。 private var pendingPreloadAfterResume = false init { application.registerActivityLifecycleCallbacks(this) ProcessLifecycleOwner.get().lifecycle.addObserver(this) } override fun onStart(owner: LifecycleOwner) { pendingForegroundAction = true runForegroundAction() } override fun onStop(owner: LifecycleOwner) { // background へ移った場合は、load 完了後の即表示要求を取り下げる showAfterCurrentLoad = false pendingForegroundAction = false } private fun runForegroundAction() { if (!pendingForegroundAction || isShowingAd) return if (currentActivity == null) return if (showAdIfAvailable()) return val showAfterLoad = isInitialLaunch isInitialLaunch = false pendingForegroundAction = false // 初回起動時のみロード完了後の即表示を許可。 // 復帰時に未準備だった場合は、次回用に load のみ実行する。 loadAd(showAfterLoad = showAfterLoad) } private fun loadAd(showAfterLoad: Boolean) { if (isShowingAd || isLoadingAd) return if (VAMPAppOpenAd.of(PLACEMENT_ID) != null) return val activity = currentActivity ?: return isLoadingAd = true showAfterCurrentLoad = showAfterLoad val request = VAMPRequest.Builder().build() VAMPAppOpenAd.load(activity, PLACEMENT_ID, request, object : VAMPAppOpenAdLoadListener { override fun onReceived(placementId: String) { isLoadingAd = false val shouldShow = showAfterCurrentLoad showAfterCurrentLoad = false if (shouldShow) { showAdIfAvailable() } } override fun onFailedToLoad(placementId: String, error: VAMPError) { isLoadingAd = false showAfterCurrentLoad = false // load 失敗後は後追い表示せず、次回 foreground に任せる。 pendingForegroundAction = false } }) } private fun showAdIfAvailable(): Boolean { if (isShowingAd) return true val activity = currentActivity ?: run { // 表示先 Activity 未確定なら次回 resume で再評価する。 pendingForegroundAction = true return false } val appOpenAd = VAMPAppOpenAd.of(PLACEMENT_ID) ?: return false pendingPreloadAfterResume = false pendingForegroundAction = false isInitialLaunch = false isShowingAd = true appOpenAd.show(activity, object : VAMPAppOpenAdListener { override fun onOpened(placementId: String) { // 広告表示開始 } override fun onClosed(placementId: String, adClicked: Boolean) { isShowingAd = false // close 直後ではなく、次回 resume で preload する。 pendingPreloadAfterResume = true } override fun onFailedToShow(placementId: String, error: VAMPError) { isShowingAd = false pendingPreloadAfterResume = true } }) return true } private fun runDeferredActions() { if (pendingForegroundAction && !isShowingAd) { runForegroundAction() return } // 広告 close 直後ではなく、次に通常画面へ戻ったタイミングで preload する。 if (pendingPreloadAfterResume && !isLoadingAd && VAMPAppOpenAd.of(PLACEMENT_ID) == null ) { pendingPreloadAfterResume = false loadAd(showAfterLoad = false) } } // --- ActivityLifecycleCallbacks --- override fun onActivityResumed(activity: Activity) { currentActivity = activity runDeferredActions() } override fun onActivityPaused(activity: Activity) { // 広告表示中は currentActivity を保持し、close 後に元の Activity へ戻れるようにする if (!isShowingAd && currentActivity == activity) { currentActivity = null } } override fun onActivityDestroyed(activity: Activity) { if (currentActivity == activity) { currentActivity = null } } override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) = Unit override fun onActivityStarted(activity: Activity) = Unit override fun onActivityStopped(activity: Activity) = Unit override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) = Unit } ``` `Application` クラスの `onCreate` で初期化します。`AndroidManifest.xml` に `android:name` を設定してください。 ```kotlin class MyApplication : Application() { override fun onCreate() { super.onCreate() AppOpenAdManager(this) } } ``` ```xml ``` ```java import android.app.Activity; import android.app.Application; import android.os.Bundle; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.lifecycle.DefaultLifecycleObserver; import androidx.lifecycle.LifecycleOwner; import androidx.lifecycle.ProcessLifecycleOwner; import jp.supership.vamp.VAMPAppOpenAd; import jp.supership.vamp.VAMPAppOpenAdListener; import jp.supership.vamp.VAMPAppOpenAdLoadListener; import jp.supership.vamp.VAMPError; import jp.supership.vamp.VAMPRequest; public class AppOpenAdManager implements DefaultLifecycleObserver, Application.ActivityLifecycleCallbacks { private static final String PLACEMENT_ID = "*****"; // 広告枠IDを設定してください private Activity currentActivity; private boolean isInitialLaunch = true; private boolean isLoadingAd = false; private boolean isShowingAd = false; private boolean showAfterCurrentLoad = false; private boolean pendingForegroundAction = false; private boolean pendingPreloadAfterResume = false; public AppOpenAdManager(Application application) { application.registerActivityLifecycleCallbacks(this); ProcessLifecycleOwner.get().getLifecycle().addObserver(this); } @Override public void onStart(@NonNull LifecycleOwner owner) { pendingForegroundAction = true; runForegroundAction(); } @Override public void onStop(@NonNull LifecycleOwner owner) { showAfterCurrentLoad = false; pendingForegroundAction = false; } private void runForegroundAction() { if (!pendingForegroundAction || isShowingAd) { return; } if (currentActivity == null) { return; } if (showAdIfAvailable()) { return; } boolean showAfterLoad = isInitialLaunch; isInitialLaunch = false; pendingForegroundAction = false; loadAd(showAfterLoad); } private void loadAd(boolean showAfterLoad) { if (isShowingAd || isLoadingAd) { return; } if (VAMPAppOpenAd.of(PLACEMENT_ID) != null) { return; } if (currentActivity == null) { return; } isLoadingAd = true; showAfterCurrentLoad = showAfterLoad; VAMPRequest request = new VAMPRequest.Builder().build(); VAMPAppOpenAd.load(currentActivity, PLACEMENT_ID, request, new VAMPAppOpenAdLoadListener() { @Override public void onReceived(@NonNull String placementId) { isLoadingAd = false; boolean shouldShow = showAfterCurrentLoad; showAfterCurrentLoad = false; if (shouldShow) { showAdIfAvailable(); } } @Override public void onFailedToLoad(@NonNull String placementId, @NonNull VAMPError error) { isLoadingAd = false; showAfterCurrentLoad = false; pendingForegroundAction = false; } }); } private boolean showAdIfAvailable() { if (isShowingAd) { return true; } if (currentActivity == null) { pendingForegroundAction = true; return false; } VAMPAppOpenAd appOpenAd = VAMPAppOpenAd.of(PLACEMENT_ID); if (appOpenAd == null) { return false; } pendingPreloadAfterResume = false; pendingForegroundAction = false; isInitialLaunch = false; isShowingAd = true; appOpenAd.show(currentActivity, new VAMPAppOpenAdListener() { @Override public void onOpened(@NonNull String placementId) { // 広告表示開始 } @Override public void onClosed(@NonNull String placementId, boolean adClicked) { isShowingAd = false; pendingPreloadAfterResume = true; } @Override public void onFailedToShow(@NonNull String placementId, @NonNull VAMPError error) { isShowingAd = false; pendingPreloadAfterResume = true; } }); return true; } private void runDeferredActions() { if (pendingForegroundAction && !isShowingAd) { runForegroundAction(); return; } if (pendingPreloadAfterResume && !isLoadingAd && VAMPAppOpenAd.of(PLACEMENT_ID) == null) { pendingPreloadAfterResume = false; loadAd(false); } } // --- ActivityLifecycleCallbacks --- @Override public void onActivityResumed(@NonNull Activity activity) { currentActivity = activity; runDeferredActions(); } @Override public void onActivityPaused(@NonNull Activity activity) { // 広告表示中は currentActivity を保持し、close 後に元の Activity へ戻れるようにする if (!isShowingAd && currentActivity == activity) { currentActivity = null; } } @Override public void onActivityDestroyed(@NonNull Activity activity) { if (currentActivity == activity) { currentActivity = null; } } @Override public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {} @Override public void onActivityStarted(@NonNull Activity activity) {} @Override public void onActivityStopped(@NonNull Activity activity) {} @Override public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {} } ``` `Application` クラスの `onCreate` で初期化します。`AndroidManifest.xml` に `android:name` を設定してください。 ```java public class MyApplication extends Application { @Override public void onCreate() { super.onCreate(); new AppOpenAdManager(this); } } ``` ```xml ``` :::note[Note] `ProcessLifecycleOwner` の `onStart()` は初回起動時にも呼ばれます。初回起動時は `VAMPAppOpenAd.of()` が `null` を返すため、上記マネージャーは初回起動時のみロード完了後の即表示を許可する構成にしています。 ::: ### 初回起動時の表示方針 初回起動時は、ロード済み広告のキャッシュがまだ存在しません。そのため、以下のように考えてください。 - 最初の `Activity` が `onResume` に遷移し、`currentActivity` が確定したタイミングで `load` を開始する(上記サンプルの `AppOpenAdManager` はこの方針で動作します) - 初回起動時のみ、`onReceived` を受けたタイミングで即 `show` する - 初回 `load` に失敗した場合は、その起動セッションでは表示できない可能性がある 初回起動時に「まだ広告がないから即座に再ロードする」「一定時間後に強制表示する」といった制御は推奨しません。App Open Ads は起動直後の自然な表示を想定したフォーマットのため、広告未準備のまま起動が進んだ場合は、そのセッションでは通常画面へ遷移してください。 ### コールドスタート時の表示 アプリの初回起動時(Cold Start)に広告を表示する場合、SDK初期化と広告ロードが完了するまで時間がかかる可能性があります。初回起動時はロード済み広告のキャッシュがないため、広告が表示されないことがあります。 初回起動時に広告を表示する必要がある場合は、ロード完了のリスナー(`onReceived`)を受け取ったタイミングで表示してください。 ## 広告表示時のリスナー `VAMPAppOpenAdListener` のメソッドについて解説します。 このリスナーは`VAMPAppOpenAd` の `show()`(広告表示時)で設定します。 ### 広告表示開始 広告の表示が開始されたタイミングで呼び出されます。 ```java @Override public void onOpened(@NonNull String placementId) ``` ```kotlin override fun onOpened(placementId: String) ``` ### 広告を閉じる 広告を閉じたタイミングで呼び出されます。`adClicked` には広告がクリックされたかどうかが渡されます。 ```java @Override public void onClosed(@NonNull String placementId, boolean adClicked) ``` ```kotlin override fun onClosed(placementId: String, adClicked: Boolean) ``` ### 広告表示失敗 広告の表示に失敗した際に呼び出されます。 ```java @Override public void onFailedToShow(@NonNull String placementId, @NonNull VAMPError error) ``` ```kotlin override fun onFailedToShow(placementId: String, error: VAMPError) ``` 詳細については[エラーコード一覧](/vamp/android/api-error)を参照してください。 ## 注意事項 ### 広告表示中のロードについて 広告の表示中(`onOpened` から `onClosed` が呼ばれるまでの間)は、広告のロードを実行しないでください。SDK 側でロード中・表示中のリクエストはスキップされますが、アプリ側で `isShowingAd` を管理して `load` 呼び出し自体を抑止する構成を推奨します。 広告を閉じた後(`onClosed`)または表示失敗後(`onFailedToShow`)に再ロードを行ってください。 ### 復帰時の再表示方針 バックグラウンド復帰時は、以下のような挙動にすることを推奨します。 - 表示可能な広告がある場合: 即表示する - 広告が未準備の場合: その場では表示せず、次回用に `load` だけ行う このとき、「復帰した瞬間に広告が未準備だった場合、ロード完了後にそのまま後追いで自動表示する」挙動は推奨しません。ユーザーがすでに通常画面で操作を始めている可能性があるためです。 実装上は、上記サンプルのように `showAfterCurrentLoad` を `isInitialLaunch` が `true` の場合だけ `true` にする構成にし、復帰時の `load` では後追い表示しないようにしてください。 ### close 直後の preload について `onClosed` / `onFailedToShow` の直後にそのまま `load` を呼ぶと、Activity の状態遷移と重なって不安定になる場合があります。上記サンプルでは、`onClosed` / `onFailedToShow` では `pendingPreloadAfterResume` フラグを立てるだけにとどめ、次の `onActivityResumed()` で安全に再ロードする構成にしています。 ### アプリ側で管理すべき状態 App Open Ads を安定して組み込むには、SDK の `load` / `show` を呼ぶだけでなく、アプリ側でも状態を管理してください。各フラグの役割は「[実装方針](#実装方針)」を参照してください。 ### 実装者が誤りやすいポイント - **`onStart()` のタイミングだけで制御してしまう** `currentActivity` が未確定なまま `show` を試みて、空振りしやすくなります。`onActivityResumed()` で `Activity` を取得し、そこから foreground 方針を実行する構成にしてください。 - **広告表示中の `onStart()` で再度 `load` してしまう** 状態管理が崩れ、復帰時に広告が表示されなくなる原因になります。 - **起動直後の UI 準備前や `onCreate` で別の許諾ダイアログを要求してしまう** App Open Ads の表示導線と競合し、広告表示や許諾ダイアログのどちらも空振りする場合があります。広告表示導線と競合しないタイミングで要求してください。 - **初回起動時とバックグラウンド復帰時を同じロジックで扱ってしまう** 初回起動時は `onReceived` 契機の即表示、復帰時は ready なら表示・未準備なら次回用ロード、という違いを分けて実装してください。 - **広告を閉じたあとに再ロードしない** 次回復帰時に即表示できなくなります。上記サンプルのように次回 `onActivityResumed()` で preload する構成にしてください。 ### 広告の有効期限 ロード済みの広告にはキャッシュ有効期限があります。有効期限を過ぎた広告を表示した場合、有効なインプレッションとしてカウントされず、収益に影響する可能性があります。 **Pangle の有効期限ポリシーは 1 時間です。** 1時間を超えた広告表示は有効インプレッションとしてカウントされません。 ただし、現行の Android App Open Ads 実装では、Pangle は有効期限超過を SDK 側で一律に `onFailedToShow` へ落とす前提にはなっていません。Pangle 連携時は表示失敗だけに依存せず、広告を閉じた後や表示失敗後に必ず再ロードする構成を前提にしてください。 :::note[期限切れコールバックは存在しません] Android の `VAMPAppOpenAdLoadListener` には、ロード済み広告の期限切れを通知する専用のコールバックはありません。 ::: ### 表示頻度の制御 バックグラウンドからの復帰のたびに広告を表示すると、ユーザー体験が悪化する可能性があります。以下のような制御を検討してください。 - 前回の広告表示からの最低インターバル(例: N分以上経過) - 1日あたりの表示回数上限 以下は `SharedPreferences` に最終表示時刻を保存し、最低インターバル経過前は `show` をスキップする最小例です。`AppOpenAdManager` の `showAdIfAvailable()` 冒頭から呼び出します。 ```kotlin private val prefs = application.getSharedPreferences("app_open_ads", Context.MODE_PRIVATE) private val minIntervalMs = TimeUnit.MINUTES.toMillis(5) private fun canShowNow(): Boolean { val last = prefs.getLong("last_shown_at", 0L) return System.currentTimeMillis() - last >= minIntervalMs } private fun markShown() { prefs.edit().putLong("last_shown_at", System.currentTimeMillis()).apply() } ``` 呼び出し側(`showAdIfAvailable()` 内): ```kotlin if (!canShowNow()) return false // ...既存の show 処理... appOpenAd.show(activity, object : VAMPAppOpenAdListener { override fun onOpened(placementId: String) { markShown() } // ... }) ``` ```java private final SharedPreferences prefs = application.getSharedPreferences("app_open_ads", Context.MODE_PRIVATE); private final long minIntervalMs = TimeUnit.MINUTES.toMillis(5); private boolean canShowNow() { long last = prefs.getLong("last_shown_at", 0L); return System.currentTimeMillis() - last >= minIntervalMs; } private void markShown() { prefs.edit().putLong("last_shown_at", System.currentTimeMillis()).apply(); } ``` 呼び出し側(`showAdIfAvailable()` 内): ```java if (!canShowNow()) { return false; } // ...既存の show 処理... appOpenAd.show(currentActivity, new VAMPAppOpenAdListener() { @Override public void onOpened(@NonNull String placementId) { markShown(); } // ... }); ``` 1日あたりの表示回数上限を加える場合は、日付キー(`yyyy-MM-dd`)ごとのカウンタを `SharedPreferences` に保持し、`canShowNow()` の条件に組み込みます。プロセス再起動を跨いだ集計が必要なため、`SharedPreferences` などの永続化先を使ってください。 --- ## 広告フォーマット 広告フォーマット毎に実装方法に関するガイド ---- このページでは広告フォーマット毎の実装方法について説明します。 ---- - [動画リワード広告](/vamp/android/ad-format/rewarded-ad) - [動画リワード広告(v4.4.2以前)](/vamp/android/ad-format/rewarded-ad-old-api) - [App Open Ads(アプリ起動時広告)](/vamp/android/ad-format/app-open-ad) --- ## 動画リワード広告(v4.4.2以前) ---- ## 実装手順 ### 前提条件 - VAMP SDKがインポート済み :::info まだVAMP SDKのインポートがお済みでない場合は[こちら](/vamp/android/integration-guide)をご参考ください。 ::: ## VAMPRewardedAdオブジェクトを初期化する 動画リワード広告を表示するためにはまず`VAMPRewardedAd`オブジェクトを初期化する必要があります。 次のコードスニペットでは、`MainActivity`の`onCreate`メソッド内で`VAMPRewardedAd`オブジェクトを初期化しています。 ### Java ```java import jp.supership.vamp.VAMPRewardedAd; public class MainActivity extends AppCompatActivity { private static final String VAMP_AD_ID = "*****"; private VAMPRewardedAd rewardedAd; @Override protected void onCreate(Bundle savedInstanceState) { ... rewardedAd = new VAMPRewardedAd(this, VAMP_AD_ID); } } ``` ### Kotlin ```kotlin import jp.supership.vamp.* const val VAMP_AD_ID = "*****" class MainActivity : AppCompatActivity() { private lateinit var rewardedAd: VAMPRewardedAd override fun onCreate(savedInstanceState: Bundle?) { ... rewardedAd = VAMPRewardedAd(this, VAMP_AD_ID) } } ``` ***** にAdGenerationの広告枠IDを設定して実装してください。 VAMPRewardedAd オブジェクトを初期化するためには広告枠ID(コードスニペットではVAMP_AD_ID)が必要となります。 ## VAMPListenerを実装する `VAMPListener`インタフェースを実装することにより、各広告イベントを受け取ることができます。 ### Java ``` import jp.supership.vamp.VAMPError; import jp.supership.vamp.VAMPListener; import jp.supership.vamp.VAMPRewardedAd; public class MainActivity extends AppCompatActivity { private static final String VAMP_AD_ID = "*****"; private VAMPRewardedAd rewardedAd; @Override protected void onCreate(Bundle savedInstanceState) { ... // VAMPListenerをセット rewardedAd.setVAMPListener(new AdListener()); } private class AdListener implements VAMPListener { @Override public void onReceived() { // 広告表示の準備完了 } @Override public void onFailedToLoad(VAMPError vampError) { // 広告準備に失敗 } @Override public void onFailedToShow(VAMPError vampError) { // 動画の表示に失敗 } @Override public void onOpened() { // 動画が表示したタイミングで通知 // アドネットワークによって通知タイミングが異なります(動画再生直前、または動画再生時) } @Override public void onCompleted() { // 動画再生正常終了(インセンティブ付与可能) } @Override public void onClosed(boolean clicked) { // 動画プレーヤーやエンドカードが表示終了 // <注意:ユーザキャンセルなども含むので、 // インセンティブ付与はonCompletedで判定してください> } @Override public void onExpired() { // 有効期限オーバー // <注意:onReceivedを受けてからの有効期限が切れました。 // showするには再度loadを行う必要が有ります> } } } ``` ### Kotlin ```kotlin import jp.supership.vamp.* const val VAMP_AD_ID = "*****" class MainActivity : AppCompatActivity() { private lateinit var rewardedAd: VAMPRewardedAd override fun onCreate(savedInstanceState: Bundle?) { ... // VAMPListenerをセット rewardedAd.setListener(AdListener()) } inner class AdListener : VAMPListener { override fun onReceived() { // 広告表示の準備完了 } override fun onFailedToLoad(vampError: VAMPError?) { // 広告準備に失敗 } override fun onFailedToShow(vampError: VAMPError?) { // 動画の表示に失敗 } override fun onOpened() { // 動画が表示したタイミングで通知 // アドネットワークによって通知タイミングが異なります(動画再生直前、または動画再生時) } override fun onCompleted() { // 動画再生正常終了(インセンティブ付与可能) } override fun onClosed(clicked: Boolean) { // 動画プレーヤーやエンドカードが表示終了 // <注意:ユーザキャンセルなども含むので、 // インセンティブ付与はonCompletedで判定してください> } override fun onExpired() { // 有効期限オーバー // <注意:onReceivedを受けてからの有効期限が切れました。 // showするには再度loadを行う必要が有ります> } } } ``` 各広告イベントの詳細については、以下の表をご覧ください。 :::note[Note] 表示中のイベント(`onOpened`, `onCompleted`)の発生タイミングはアドネットワークにより異なります。 また、`onClosed`の`clicked`フラグが**true** となる条件もアドネットワークにより異なります。 ::: メソッド名 | 説明 ---|--- onReceived | 広告の取得に成功すると通知されます。このイベントを受け取ると、広告の表示が可能になります。 onFailedToLoad | 広告の取得に失敗すると通知されます。広告取得時のタイムアウトや、全てのアドネットワークの在庫がない場合など。 onFailedToShow | 広告の表示に失敗すると通知されます。視聴完了する前にユーザがキャンセルするなど。 onOpened | 広告が表示されると通知されます。アドネットワークから表示開始時(表示開始の通知がなければ、表示開始直前)のイベントを受け取ったタイミングで通知されます。アドネットワークによって発生タイミングが異なります。 onCompleted | インセンティブ付与が可能になると通知されます。ユーザが途中で動画視聴をキャンセルすると発生しません。アドネットワークによって発生タイミングが異なります。 onClosed | 広告(動画プレーヤー、またはエンドカード)が閉じられると通知されます。ユーザキャンセルの場合でも広告を閉じたタイミングで通知されます。 onExpired | RTBはロードが完了してから1時間経過すると、広告表示ができても無効扱いとなり、収益が発生しません。このイベントを受け取ったら`load`からやり直してください。イベントを受け取ってから`isReady`を実行すると**false** が返却されます。 ## 広告を取得する ### Java ```java import jp.supership.vamp.VAMPRequest; import jp.supership.vamp.VAMPRewardedAd; public class MainActivity extends AppCompatActivity { private static final String VAMP_AD_ID = "*****"; private VAMPRewardedAd rewardedAd; @Override protected void onCreate(Bundle savedInstanceState) { ... // 広告の取得を開始します。 rewardedAd.load(new VAMPRequest.Builder().build()); } } ``` ### Kotlin ```kotlin import jp.supership.vamp.* const val VAMP_AD_ID = "*****" class MainActivity : AppCompatActivity() { private lateinit var rewardedAd: VAMPRewardedAd override fun onCreate(savedInstanceState: Bundle?) { ... // 広告の取得を開始します。 rewardedAd.load(VAMPRequest.Builder().build()) } } ``` ## 広告を表示する ### Java ```java // 広告の表示準備ができているか確認します。 if (rewardedAd.isReady()) { // 準備が完了していた場合、動画広告を再生します。 rewardedAd.show(MainActivity.this); } ``` ### Kotlin ```kotlin // 広告の表示準備ができているか確認します。 if (rewardedAd.isReady) { // 準備が完了していた場合、動画広告を再生します。 rewardedAd.show(this) } ``` ## 詳細な広告イベントを受け取る `VAMPListener`インタフェースの代わりに`VAMPAdvancedListener`インタフェースを実装することにより、より詳細な広告イベントを受け取ることができます。 ### Java ```java import jp.supership.vamp.VAMPAdvancedListener; import jp.supership.vamp.VAMPError; import jp.supership.vamp.VAMPRewardedAd; public class MainActivity extends AppCompatActivity { private static final String VAMP_AD_ID = "*****"; private VAMPRewardedAd rewardedAd; @Override protected void onCreate(Bundle savedInstanceState) { ... // VAMPListenerをセット rewardedAd.setVAMPListener(new AdListener()); } private class AdListener implements VAMPAdvancedListener { @Override public void onReceived() { } @Override public void onFailedToLoad(VAMPError vampError) { } @Override public void onFailedToShow(VAMPError vampError) { } @Override public void onOpened() { } @Override public void onCompleted() { } @Override public void onClosed(boolean clicked) { } @Override public void onExpired() { } // 追加された広告イベント @Override public void onLoadStart(String adnwName) { // アドネットワークごとの広告取得が開始されたときに通知されます。 } @Override public void onLoadResult(String adnwName, boolean success, String message) { // アドネットワークごとの広告取得結果が通知されます。 } } } ``` ### Kotlin ```kotlin import jp.supership.vamp.* const val VAMP_AD_ID = "*****" class MainActivity : AppCompatActivity() { private lateinit var rewardedAd: VAMPRewardedAd override fun onCreate(savedInstanceState: Bundle?) { ... // VAMPListenerをセット rewardedAd.setListener(AdListener()) } inner class AdListener : VAMPAdvancedListener { override fun onReceived() { } override fun onFailedToLoad(vampError: VAMPError?) { } override fun onFailedToShow(vampError: VAMPError?) { } override fun onOpened() { } override fun onCompleted() { } override fun onClosed(clicked: Boolean) { } override fun onExpired() { } // 追加された広告イベント override fun onLoadStart(adnwName: String?) { // アドネットワークごとの広告取得が開始されたときに通知されます。 } override fun onLoadResult(adnwName: String?, success: Boolean, message: String?) { // アドネットワークごとの広告取得結果が通知されます。 } } } ``` VAMPListenerインタフェースで受け取ることができる広告イベントに加え、以下のイベントを受け取ることができます。 メソッド名 | 説明 ---|--- onLoadStart | アドネットワークごとの広告取得が開始されたときに通知されます。 onLoadResult | アドネットワークごとの広告取得結果が通知されます。このイベントは、ロードの成功時、失敗時どちらの場合も通知されます。このイベントをもとに広告の表示をしないでください。イベント通知により広告の表示準備ができているか判定する場合は、onReceivedを受け取ったタイミングで判定してください。 --- ## 動画リワード広告(Ad-format) ---- ## 動画リワード広告とは 動画リワード広告とは、アプリ内で使用可能なアイテムやポイントをユーザーに付与する代わりに、約15秒〜30秒程度の動画広告を表示する広告フォーマットです。 強制視聴型の動画広告と違い、動画視聴を希望したユーザーにのみインセンティブを付与する点で、一般的な動画広告とは異なるものです。 動画視聴後に付与する報酬(インセンティブ)の例としては、ゲーム内で使えるアイテムやコンティニューの権利、ツール系アプリの場合は有料の機能を限定的に開放するなどがあります。 ## 実装手順 ### 前提条件 - VAMP SDKがインポート済み ※まだVAMP SDKのインポートがお済みでない場合は[こちら](/vamp/android/integration-guide)をご参考ください。 2025-02-03 [VAMP v5.3.1でsetHyperIDMode機能が削除されました。](https://github.com/AdGeneration/VAMP-Android-SDK/releases/tag/v5.3.1) VAMP v4.4.2以前の導入手順は[こちら](/vamp/android/ad-format/rewarded-ad-old-api)をご参照ください。 ## 広告を取得する 次のコードスニペットでは、`MainActivity`の`onCreate`メソッド内で広告の取得を開始しています。 ### Java ``` import jp.supership.vamp.VAMPError; import jp.supership.vamp.VAMPRequest; import jp.supership.vamp.VAMPRewardedAd; import jp.supership.vamp.VAMPRewardedAdLoadListener; public class MainActivity extends AppCompatActivity { private static final String VAMP_AD_ID = "*****"; @Override protected void onCreate(Bundle savedInstanceState) { ...//広告の取得を開始します。 VAMPRewardedAd.load(this, VAMP_AD_ID, new VAMPRequest.Builder().build(), new VAMPRewardedAdLoadListener() { @Override public void onReceived(@NonNull String placementId) { //動画表示の準備が完了しました。 } @Override public void onFailedToLoad(@NonNull String placementId, VAMPError error) { //広告が取得できなかったときに通知されます。 } }); } } ``` ### Kotlin ``` import jp.supership.vamp.* const val VAMP_AD_ID = "*****" class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { ...//広告の取得を開始します。 VAMPRewardedAd.load( this, VAMP_AD_ID, VAMPRequest.Builder().build(), object : VAMPRewardedAdLoadListener { override fun onReceived(placementId: String) { //動画表示の準備が完了しました。 } override fun onFailedToLoad(placementId: String, error: VAMPError) { //広告が取得できなかったときに通知されます。 } } ) } } ``` `*****`にAdGenerationの広告枠IDを設定して実装してください。 `VAMPRewardedAd`クラスの`load`クラスメソッドに広告枠ID(コードスニペットではVAMP_AD_ID)を渡して、広告の取得を開始します。 `VAMPRewardedAdLoadListener`インタフェースを実装し、第4引数に渡すことで、ロードイベントを受け取ることができます。 ロードイベントの詳細については、以下の表をご覧ください。 メソッド名 | 説明 ---|--- onReceived | 広告の取得に成功すると通知されます。このイベントを受け取ると、広告の表示が可能になります。 onFailedToLoad | 広告の取得に失敗すると通知されます。広告取得時のタイムアウトや、全てのアドネットワークの在庫がない場合など。 ## VAMPRewardedAdListenerを実装する 広告の表示に関するイベントは`VAMPRewardedAdListener`インタフェースを実装することで処理できます。以下のクラスは表示に関するイベントを通知する仕組みを提供します。 - VAMPEventDispatcher - VAMPActivityEventDispatcher `VAMPRewardedAdListener`インタフェースの実装を`addListener`メソッドで登録することで、イベントを処理できます。 ### Java ``` import jp.supership.vamp.VAMPError; import jp.supership.vamp.VAMPEventDispatcher; import jp.supership.vamp.VAMPRewardedAdListener; public class MainActivity extends AppCompatActivity { private static final String VAMP_AD_ID = "*****"; @Override protected void onCreate(Bundle savedInstanceState) { ... // 広告の表示に関するイベントを受け取るために // VAMPRewardedAdListenerを登録します。 VAMPEventDispatcher.getInstance() .addListener(VAMP_AD_ID, rewardedAdListener); } private final VAMPRewardedAdListener rewardedAdListener = new VAMPRewardedAdListener() { @Override public void onFailedToShow(@NonNull String placementId, VAMPError error) { // 広告表示失敗 // showを実行したが、何らかの理由で広告表示が失敗したときに通知されます。 // エラーにはユーザキャンセルも含まれます。 if (error == VAMPError.USER_CANCEL) { // ユーザが広告再生を途中でキャンセルしました。 } } @Override public void onCompleted(@NonNull String placementId) { // インセンティブ付与が可能になったタイミングで通知されます。 } @Override public void onOpened(@NonNull String placementId) { // 動画が表示されたタイミングで通知されます。 } @Override public void onClosed(@NonNull String placementId, boolean clicked) { // 動画プレイヤーやエンドカードが閉じられたタイミングで通知されます。 // <注意:ユーザキャンセルなども含むので、 // インセンティブ付与はonCompletedで判定してください> } @Override public void onExpired(@NonNull String placementId) { // 有効期限オーバーのときに通知されます。 // <注意:onReceivedを受けてからの有効期限が切れました。 // showするには再度loadを行う必要が有ります> } }; } ``` ### Kotlin ``` import jp.supership.vamp.* const val VAMP_AD_ID = "*****" class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { ... // 広告の表示に関するイベントを受け取るために // VAMPRewardedAdListenerを登録します。 VAMPEventDispatcher.getInstance() .addListener(VAMP_AD_ID, rewardedAdListener) } private val rewardedAdListener: VAMPRewardedAdListener = object : VAMPRewardedAdListener { override fun onFailedToShow(placementId: String, error: VAMPError) { // 広告表示失敗 // showを実行したが、何らかの理由で広告表示が失敗したときに通知されます。 // エラーにはユーザキャンセルも含まれます。 if (error == VAMPError.USER_CANCEL) { // ユーザが広告再生を途中でキャンセルしました。 } } override fun onCompleted(placementId: String) { // インセンティブ付与が可能になったタイミングで通知されます。 } override fun onOpened(placementId: String) { // 動画が表示されたタイミングで通知されます。 } override fun onClosed(placementId: String, clicked: Boolean) { // 動画プレイヤーやエンドカードが閉じられたタイミングで通知されます。 // <注意:ユーザキャンセルなども含むので、 // インセンティブ付与はonCompletedで判定してください> } override fun onExpired(placementId: String) { // 有効期限オーバーのときに通知されます。 // <注意:onReceivedを受けてからの有効期限が切れました。 // showするには再度loadを行う必要が有ります> } } } ``` 広告の表示に関するイベントの詳細については、以下の表をご覧ください。 :::note[Note] 表示中のイベント(`onOpened`, `onCompleted`)の発生タイミングはアドネットワークにより異なります。 また、`onClosed`の`clicked`フラグが**true** となる条件もアドネットワークにより異なります。 ::: メソッド名 | 説明 ---|--- onFailedToShow | 広告の表示に失敗すると通知されます。視聴完了する前にユーザがキャンセルするなど。 onOpened | 広告が表示されると通知されます。アドネットワークから表示開始時(表示開始の通知がなければ、表示開始直前)のイベントを受け取ったタイミングで通知されます。アドネットワークによって発生タイミングが異なります。 onCompleted | インセンティブ付与が可能になると通知されます。ユーザが途中で動画視聴をキャンセルすると発生しません。アドネットワークによって発生タイミングが異なります。 onClosed | 広告(動画プレーヤー、またはエンドカード)が閉じられると通知されます。ユーザキャンセルの場合でも広告を閉じたタイミングで通知されます。 onExpired | RTBはロードが完了してから1時間経過すると、広告表示ができても無効扱いとなり、収益が発生しません。このイベントを受け取ったら`VAMPRewardedAd.load`メソッドを再度呼び出してください。イベントを受け取ってから`VAMPRewardedAd.of`メソッドを実行すると**null** が返却されます。 広告の表示に関するイベントを受け取る必要がなくなったタイミングで`removeListener`メソッドを呼んでください。以下のコードスニペットでは、`MainActivity`の`onDestroy`メソッドでリスナーの解除をしています。 ### Java ```java public class MainActivity extends AppCompatActivity { @Override protected void onDestroy() { // VAMPRewardedAdListenerを解除します。 VAMPEventDispatcher.getInstance().removeListener(VAMP_AD_ID); super.onDestroy(); } } ``` ### Kotlin ``` class MainActivity : AppCompatActivity() { override fun onDestroy() { // VAMPRewardedAdListenerを解除します。 VAMPEventDispatcher.getInstance().removeListener(VAMP_AD_ID) super.onDestroy() } } ``` :::note[Note] 複数の広告枠IDがあるアプリでは、それぞれの広告枠IDに対して`addListener`および`removeListener`メソッドを呼んでください。 ::: ### Activityのライフサイクルにリスナーをバインドする 以下のコードスニペットのように、`VAMPActivityEventDispatcher`を`Activity`のライフサイクルコールバック内で呼ぶことで、広告の表示に関するイベントを処理することもできます。 ### Java ``` @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 広告の表示に関するイベントを受け取るために // VAMPRewardedAdListenerを登録します。 VAMPActivityEventDispatcher.getInstance() .onCreate(savedInstanceState, VAMP_AD_ID, rewardedAdListener); } @Override protected void onDestroy() { // VAMPRewardedAdListenerを解除します。 VAMPActivityEventDispatcher.getInstance() .onDestroy(VAMP_AD_ID); super.onDestroy(); } @Override protected void onSaveInstanceState(@NonNull Bundle outState) { // VAMPActivityEventDispatcher#onCreate、 // VAMPActivityEventDispatcher#onDestroy、および // VAMPActivityEventDispatcher#onSaveInstanceStateメソッドをそれぞれ呼ぶことで、 // 広告の表示中にActivityが破棄された後、再生成された場合でも // 広告の表示に関するイベントを受け取ることができます。 VAMPActivityEventDispatcher.getInstance() .onSaveInstanceState(outState, VAMP_AD_ID); super.onSaveInstanceState(outState); } ``` ### Kotlin ``` override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // 広告の表示に関するイベントを受け取るために // VAMPRewardedAdListenerを登録します。 VAMPActivityEventDispatcher.getInstance() .onCreate(savedInstanceState, VAMP_AD_ID, rewardedAdListener) } override fun onDestroy() { // VAMPRewardedAdListenerを解除します。 VAMPActivityEventDispatcher.getInstance() .onDestroy(VAMP_AD_ID) } override fun onSaveInstanceState(outState: Bundle) { // VAMPActivityEventDispatcher#onCreate、 // VAMPActivityEventDispatcher#onDestroy、および // VAMPActivityEventDispatcher#onSaveInstanceStateメソッドをそれぞれ呼ぶことで、 // 広告の表示中にActivityが破棄された後、再生成された場合でも // 広告の表示に関するイベントを受け取ることができます。 VAMPActivityEventDispatcher.getInstance() .onSaveInstanceState(outState, VAMP_AD_ID) } ``` ## 広告を表示する ### Java ``` VAMPRewardedAd rewardedAd = VAMPRewardedAd.of(VAMP_AD_ID); // 広告の表示準備ができているか確認します。 // rewardedAdオブジェクトがnullでなければ、表示の準備ができています。 if (rewardedAd != null) { // 準備が完了していた場合、動画広告を再生します。 rewardedAd.show(MainActivity.this); } ``` ### Kotlin ``` val rewardedAd = VAMPRewardedAd.of(VAMP_AD_ID) // 広告の表示準備ができているか確認します。 // rewardedAdオブジェクトがnullでなければ、表示の準備ができています。 if (rewardedAd != null) { // 準備が完了していた場合、動画広告を再生します。 rewardedAd.show(this) } ``` ロードが完了した`VAMPRewardedAd`オブジェクトは`VAMPRewardedAd.of`クラスメソッドで取得できます。このクラスメソッドは指定した広告枠IDの広告が表示できる状態になっているとき、`VAMPRewardedAd`オブジェクトを返し、それ以外のときは**null** を返します。 ## 詳細なロードイベントを受け取る `VAMPRewardedAdLoadListener`インタフェースの代わりに`VAMPRewardedAdLoadAdvancedListener`インタフェースを実装することにより、より詳細なロードイベントを受け取ることができます。 ### Java ``` import jp.supership.vamp.VAMPError; import jp.supership.vamp.VAMPRequest; import jp.supership.vamp.VAMPRewardedAd; import jp.supership.vamp.VAMPRewardedAdLoadAdvancedListener; public class MainActivity extends AppCompatActivity { private static final String VAMP_AD_ID = "*****"; @Override protected void onCreate(Bundle savedInstanceState) { ... VAMPRewardedAd.load(this, VAMP_AD_ID, new VAMPRequest.Builder().build(), new VAMPRewardedAdLoadAdvancedListener() { @Override public void onReceived(@NonNull String placementId) { } @Override public void onFailedToLoad(@NonNull String placementId, VAMPError error) { } // 追加されたロードイベント @Override public void onStartedLoading(@NonNull String placementId, @NonNull String adNetworkName) { // アドネットワークごとの広告取得が開始されたときに通知されます。 } @Override public void onLoaded(@NonNull String placementId, @NonNull String adNetworkName, boolean success, @NonNull String message) { // アドネットワークごとの広告取得結果が通知されます。 } }); } } ``` ### Kotlin ``` import jp.supership.vamp.* const val VAMP_AD_ID = "*****" class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { ... VAMPRewardedAd.load( this, VAMP_AD_ID, VAMPRequest.Builder().build(), object : VAMPRewardedAdLoadAdvancedListener { override fun onReceived(placementId: String) { } override fun onFailedToLoad(placementId: String, error: VAMPError) { } // 追加されたロードイベント override fun onStartedLoading(placementId: String, adNetworkName: String) { // アドネットワークごとの広告取得が開始されたときに通知されます。 } override fun onLoaded( placementId: String, adNetworkName: String, success: Boolean, message: String ) { // アドネットワークごとの広告取得結果が通知されます。 } } ) } } ``` [VAMPRewardedAdLoadListenerインタフェース](/vamp/android/ad-format/rewarded-ad#%E5%BA%83%E5%91%8A%E3%82%92%E5%8F%96%E5%BE%97%E3%81%99%E3%82%8B)で受け取ることができるロードイベントに加え、以下のイベントを受け取ることができます。 メソッド名 | 説明 ---|--- onStartedLoading | アドネットワークごとの広告取得が開始されたときに通知されます。 onLoaded | アドネットワークごとの広告取得結果が通知されます。このイベントは、ロードの成功時、失敗時どちらの場合も通知されます。このイベントをもとに広告の表示をしないでください。イベント通知により広告の表示準備ができているか判定する場合は、onReceivedを受け取ったタイミングで判定してください。 --- ## エラー定義 VAMPのエラーコードの定義についてのガイド ---- コード | 内容 | 発生条件(例) ---|---|--- NOT_SUPPORTED_OS_VERSION | サポート対象外のOSバージョンです | 対応していないOSのバージョンなので、ダイアログでユーザーに広告機能が使えない旨の通知をしてください。 UNKNOWN | 不明なエラー | 不明なエラーが発生しました。 SERVER_ERROR | サーバー間通信エラー | 広告枠IDが不正、またはアドジェネのサーバーでエラーが発生しているので、お問い合わせください。 NO_ADNETWORK | 配信可能なアドネットワークがない | アドジェネ管理画面でアドネットワークの配信がONになっていない、またはEU圏からのアクセスの場合(GDPR)発生します。 NEED_CONNECTION | 通信不通 | ネットワークに接続できない状況(電波状況が悪い、機内モードなど)です。電波状況をご確認ください。 MEDIATION_TIMEOUT | メディエーションタイムアウト | 広告のロードをリクエストした後、アドネットワークSDKから返答が得られず、15秒経過した場合にこのエラーが発生します。 USER_CANCEL | ユーザ都合の途中終了 | AdMobなどで動画を途中でキャンセルした場合に発生します。 NO_ADSTOCK | 広告在庫無しまたは表示可能なアドネットワークが1件もない | 在庫が無いため、再度ロードしてください。連続で発生する場合、時間を置いてからロードしてください。フリクエンシーキャップにかかっている場合があります。 ADNETWORK_ERROR | アドネットワークにてエラーが発生した | アドネットワーク側でエラーが発生しました。 SETTING_ERROR | 設定エラー | アドネットワークアダプタがインポートされていないなど、プロジェクトの設定に不備があります。パーミッションやGooglePlayServiceライブラリが不足していないかご確認ください。 NOT_LOADED_AD | 広告のロードが完了していないときに表示しようとした | 広告のロードが完了した後にshowメソッドを実行してください。 INVALID_PARAMETER | パラメータが不正 | 不正なパラメータが設定されています。広告枠IDまたはActivityが不正です。 FREQUENCY_CAPPED(非推奨) | フリークエンシーキャップ | この機能は削除されました REQUEST_TIMEOUT | リクエストタイムアウト | 広告のロードをリクエストした後、アドジェネサーバから一定時間応答が得られなかった場合に発生します。(v5.1.1で追加) --- ## VAMP Android SDKのドキュメント import VAMPMediationTable from '@site/src/components/SDKVersions/VAMPMediationTable'; # VAMP Android SDKのドキュメント AndroidアプリにVAMP SDKを導入する Androidアプリで`VAMP SDK`を使用して広告を表示するためには、まず、`VAMP SDK`をAndroidアプリに導入します。 SDKの導入が済んだら、広告フォーマット毎に必要な実装をしていきます。 ## GitHub https://github.com/AdGeneration/VAMP-Android-SDK ## 詳細 - [スタートガイド](/vamp/android/integration-guide) AndroidにVAMP SDKを導入する手順についてのガイド - [広告フォーマット](/vamp/android/ad-format) 広告フォーマット毎に実装方法に関するガイド - [エラー定義](/vamp/android/api-error) VAMPのエラーコードの定義についてのガイド - [実装のテスト](/vamp/android/test) 実装後のテスト方法についてのガイド - [メディエーション](/vamp/android/mediation) メディエーションの統合方法についてのガイド --- ## スタートガイド AndroidにVAMP SDKを導入する手順についてのガイド - 2026-08-12 VAMP [v5.3.7リリース](https://github.com/AdGeneration/VAMP-Android-SDK/releases/tag/5.3.7) - 2026-05-26 VAMP [v5.3.6リリース](https://github.com/AdGeneration/VAMP-Android-SDK/releases/tag/v5.3.6) - 2026-05-13 VAMP [v5.3.5リリース](https://github.com/AdGeneration/VAMP-Android-SDK/releases/tag/v5.3.5) - 2025-11-12 VAMP [v5.3.4リリース](https://github.com/AdGeneration/VAMP-Android-SDK/releases/tag/v5.3.4) ## はじめに 開発環境としてAndroid Studioを利用し、インストール後の各種設定は準備されていることを前提とした手順となります。 ## 前提条件 - minSdkVersion 23以上 - compileSdkVersion 35以上 ## サポートOSバージョン - Android 6.0〜 ### 1. AdGeneration(VAMP) SDKのインストール build.gradle(project-level)に以下を追記します。 ``` allprojects { repositories { ・・・(省略)・・・ maven { url 'https://AdGeneration.github.io/VAMP-Android-SDK/repository' } } } ``` build.gradle(app-level)に以下を追記します。 ``` dependencies { ・・・(省略)・・・ implementation 'jp.supership.vamp:vamp-sdk:[Version]' implementation 'com.google.android.gms:play-services-base:[Version]' implementation 'com.google.android.gms:play-services-ads-identifier:[Version]' implementation 'androidx.legacy:legacy-support-v4:[Version]' } ``` ### 2. AndroidManifest.xmlの設定 AndroidManifest.xmlに、以下のようにActivityとpermissionの設定を追加します。 ```xml ``` ### 3. Google Play Servicesの設定 Google Advertising IDを利用することにより収益の向上が見込まれます。 Google Advertising IDを利用するにはAndroidStudio上でのGoogle Play Servicesの導入が必須となります。 導入方法は下記リンク先をご参照ください。 [Google Play Servicesの設定](https://developers.google.com/android/guides/setup#add_google_play_services_to_your_project) ### 4. proguardの設定 SDKを導入したアプリを難読化する際は以下の設定値をproguardの設定ファイルに追加してください。 難読化後の表示確認も必ず行ってください。 ``` -keepclasseswithmembers class jp.supership.vamp.** { *; } -keep class jp.supership.sscore.** ``` ### 5. 注意事項 通信状況や動画広告によってはロードに時間がかかる場合があります。特に各アドネットワークの初回のロードは時間がかかる傾向にありますのでご注意ください。 --- ## AdMobの統合 import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # AdMobの統合 このガイドではAndroidアプリにVAMP SDKのAdMobアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされているVAMPAdMobAdapterの最新バージョンはこちらになります。 :::note[Note] アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、広告を表示することはできません。 ::: ## gradleでアダプターをインストール まずは、gradleでアダプターをインストールします。 build.gradle(project-level)に以下を追記します。 ``` allprojects { repositories { ・・・(省略)・・・ maven { url "https://maven.google.com" } } } ``` build.gradle(app-level)に以下を追記します。 ``` dependencies { ・・・(省略)・・・ implementation 'com.google.android.gms:play-services-ads:[Version]' implementation 'jp.supership.vamp:vamp-admob-adapter:[Version]' } ``` ## AndroidManifest.xmlの設定 ```xml ``` [ADMOB_APP_ID]にAdMobのAppIDを指定してください。 :::note[Note] この``タグはAdMob 17.0.0から必須です。 この設定に失敗した場合は以下のメッセージがログに表示され、アプリはクラッシュします。 "The Google Mobile Ads SDK was initialized incorrectly." ::: ## proguardの設定 SDKを導入したアプリを難読化する際は以下の設定値をproguardの設定ファイルに追加してください。 難読化後の表示確認も必ず行ってください。 ``` -keep class com.google.android.gms.** { *; } -dontwarn com.google.android.gms.** ``` :::warning[注意事項] VAMP SDKよりも先にAdMob SDKを初期化した場合に、AdMobロード時にタイムアウトになる事象が確認されております。 AdMobの初期化を行う場合は、完了通知が受け取れるコールバックを指定できる初期化APIを使用していただくことを推奨します。 ::: ## VAMPAdMobAdapterの更新履歴 ### Version 25.4.0(2026-07-15) - AdMob SDK 25.4.0と互換性があります。 - [AdMob変更内容](https://developers.google.com/admob/android/rel-notes) - バグの修正とパフォーマンスの改善を行いました。 ### Version 25.2.0(2026-05-18) - AdMob SDK 25.2.0と互換性があります。 - [AdMob変更内容](https://developers.google.com/admob/android/rel-notes) - バグの修正とパフォーマンスの改善を行いました。 ### Version 24.9.0(2025-12-22) - AdMob SDK 24.9.0と互換性があります。 - [AdMob変更内容](https://developers.google.com/admob/android/rel-notes) - バグの修正とパフォーマンスの改善を行いました。 ### Version 24.6.0(2025-09-11) - AdMob SDK 24.6.0と互換性があります。 - [AdMob変更内容](https://developers.google.com/admob/android/rel-notes) - Native mediation adapters can now implement NativeAdMapper.destroy() to get notified when a native ad is destroyed. - ネイティブメディエーションアダプターが NativeAdMapper.destroy() を実装できるようになり、ネイティブ広告が破棄されたときに通知を受け取れるようになりました。 --- ## AppLovinの統合 import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # AppLovinの統合 このガイドではAndroidアプリにVAMP SDKのAppLovinアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされているVAMPAppLovinAdapterの最新バージョンはこちらになります。 アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、 広告を表示することはできません。 ## gradleでアダプターをインストール まずは、gradleでアダプターをインストールします。 build.gradle(app-level)に以下を追記します。 ``` dependencies { ・・・(省略)・・・ implementation 'jp.supership.vamp:vamp-applovin-adapter:[Version]' } ``` ## AndroidManifest.xmlの設定 特に追加するpermissionはありません。 ## proguardの設定 ``` -keep class com.applovin.** { *; } ``` ## 更新履歴 ### VAMPAppLovinAdapter 13.6.400(2026-08-17) - AppLovin SDK 13.6.4(2026-08-11)と互換性があります。 - AppLovin変更内容(2026-08-11):ユーザー情報パラメータのサポートを追加しました。VK Ad Network(MyTarget)アダプターの検出を削除しました。軽微な修正と改善を行いました。 ### VAMPAppLovinAdapter 13.6.300(2026-07-14) - AppLovin SDK 13.6.3(2026-06-03)と互換性があります。 - AppLovin変更内容(2026-06-03):minSdkバージョンを24に設定しました。軽微な修正と改善を行いました。 ### VAMPAppLovinAdapter 13.5.100(2025-11-19) - AppLovin SDK 13.5.1(2025-11-17)と互換性があります。 - 更新内容:ILicensingService の重複クラスエラーを修正しました ([#858](https://github.com/AppLovin/AppLovin-MAX-SDK-Android/issues/858))。 軽微な修正と改善を行いました。 ### VAMPAppLovinAdapter 13.5.0 - AppLovin SDK 13.5.0(2025-10-21)と互換性があります。 - 更新内容:Various improvements and bug fixes. - さまざまな改善とバグ修正。 ### VAMPAppLovinAdapter 13.4.0 - AppLovin SDK 13.4.0(2025-09-03更新)と互換性があります。 - 更新内容(2025-09-03): - Removed template native ads support. Apps using Template Integration should transition to Manual Integration. Minor bug fixes and improvements. - テンプレートネイティブ広告のサポートが削除されました。テンプレート統合を使用しているアプリは、手動統合に移行する必要があります。 マイナーなバグ修正と改善。 ### VAMPAppLovinAdapter 13.1.0 - AppLovin SDK 13.1.0と互換性があります。 - 更新内容(2025-01-28): - Update AppLovinSdk#getAvailableMediatedNetworks() API to include init status. - Deprecate MaxAd#getAdReviewCreativeId() API. - Remove deprecated Terms flow. - Various crash fixes. ### VAMPAppLovinAdapter 13.0.100 - AppLovin SDK 13.0.1と互換性があります。 - 更新内容(2024-10-27):Update AppLovinSdk#getAvailableMediatedNetworks() API to include init status.Deprecate MaxAd#getAdReviewCreativeId() API.Remove deprecated Terms flow.Various crash fixes. ### VAMPAppLovinAdapter 12.5.0.0 - AppLovin SDK 12.5.0と互換性があります。 - 更新内容(2024-05-15):Remove requirement of passing an Activity instance for MAX fullscreen ad APIs. Activity parameter be required when calling show(...) instead.Fix NPE crash: Caused by java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.Object com.applovin.impl.sdk.k.a(com.applovin.impl.oj)' on a null object reference.Various new SDK init API fixes.Removed configureSettings function from AppLovinSdkInitializationConfiguration. Please use AppLovinSdk.getInstance( this ).getSettings() to modify the SDK settings. ### VAMPAppLovinAdapter 12.3.0.0 - AppLovin SDK 12.3.0と互換性があります。 - 更新内容(2024-03-04):Minor bug fixes and improvements. --- ## メディエーション import VAMPMediationTable from '@site/src/components/SDKVersions/VAMPMediationTable'; # メディエーション メディエーションの統合方法についてのガイド ---- VAMPメディエーションは、VAMPの他にサードパーティのアドネットワークの広告を配信できるようにする機能です。 VAMPメディエーションは、複数のアドネットワークに広告リクエストを送信し、最適な広告ネットワークを表示し、広告掲載率・収益を最大化します。 ## 前提条件 メディエーションを統合する前に、アプリに`VAMP SDK`を導入している必要があります。 `VAMP SDK`の導入方法については、[こちら](/vamp/android/integration-guide)をご確認ください。 また、使用する広告フォーマットも実装済みである必要があります。 各広告フォーマットの実装については、[こちら](/vamp/android/ad-format)をご確認ください。 --- ## LINE広告ネットワークの統合 import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # LINE広告ネットワークの統合 このガイドではAndroidアプリに`VAMP SDK`のLINE広告ネットワークアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされている`VAMPLINEAdsAdapter`の最新バージョンはこちらになります。 :::note[Note] アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、広告を表示することはできません。 ::: ## gradleでアダプターをインストール まずは、gradleでアダプターをインストールします。 build.gradle(app-level)に以下を追記します。 ``` dependencies { ・・・(省略)・・・ implementation 'jp.supership.vamp:vamp-lineads-adapter:[Version]' } ``` ## AndroidManifest.xmlの設定 特に追加するpermissionはありません。 ## proguardの設定 SDKを導入したアプリを難読化する際は以下の設定値をproguardの設定ファイルに追加してください。 難読化後の表示確認も必ず行ってください。 ``` -keep class com.five_corp.ad.** { *; } ``` ## VAMPLINEAdsAdapterの更新履歴 ### Version 3.1.100(2026-07-15) - LINE広告ネットワーク SDK 3.1.1と互換性があります。 - 最低サポートOSバージョンがAndroid 6.0(Marshmallow)になりました。 - LINE広告ネットワーク SDK 3.1.1の更新内容(2026-05-14): AGP version 8.6.1 でのビルドを可能にしました。 ### Version 3.0.100(2026-01-20) - LINE広告ネットワーク SDK 3.0.1と互換性があります。 - LINE更新内容: SDKの起動後にIABTCF_gdprAppliesの値が1からそれ以外の値に変化するとクラッシュしてしまうバグを修正しました。 ### Version 2.9.2025102800 (2025-10-29) [リリースノート](https://adsnetwork-docs.linebiz.com/fivesdk-android/release-note.html) - PowerManager.isScreenOnの例外発生時にクラッシュするバグを修正しました。 - メイン以外の静止画アセットのロードに失敗する可能性があるバグを修正しました。 ### Version 2.9.2025092400 (2025-09-29) [リリースノート](https://adsnetwork-docs.linebiz.com/fivesdk-android/release-note.html) - 初期化リクエストが送信できず、広告が表示できなくなるバグを修正しました。 ### Version 2.9.2025051900 (2025-05-29) [リリースノート](https://adsnetwork-docs.linebiz.com/fivesdk-android/release-note.html) - HttpURLConnection が RuntimeException を発生させた場合に、アプリ側にその RuntimeException が伝搬してしまうバグを修正しました。 - windowOptOutEdgeToEdgeEnforcement を使用しない実装に変更しました。 ### Version 2.9.2025031700(2025-03-28) [リリースノート](https://adsnetwork-docs.linebiz.com/fivesdk-android/release-note.html) - FiveAdCustomLayout の一部使用方法によっては、動画プレイヤーが動画再生に失敗してimpressionが発生しないバグを修正しました。 - Android 15以上において、フルスクリーン広告の閉じるボタンとDisplay cutoutが重なってしまうバグを修正しました。 - Android 15以上において、広告通報機能がナビゲーションバーの裏側に描画されてしまうバグを修正しました。 - setDecorFitsSystemWindows の呼び出しを削除しました。 ### Version 2.9.2025011000(2025-01-15) - LINE広告ネットワーク SDK v2.9.20250110と互換性があります。 - LINE更新内容(2025-01-10):対象APIレベル(targetSdkVersion)35に対応しました。 ### Version 2.8.2024082700(2024-08-28) - LINE広告ネットワーク SDK v2.8.20240808と互換性があります。 - LINE更新内容(2024-08-27):v2.8.20240806バージョンで発生した動画ファイルを再生できなくなるバグを修正しました。v2.8.20240806バージョンで更新された以下のアップデートを含んでいます。対象APIレベル(targetSdkVersion)34に対応しました。FiveAdInterface.getState APIを非推奨化しました。com.google.android.material:materialへの依存を追加しました。内部ロジックを改善しました。 ### Version 2.8.2024080800(2024-08-14) - LINE広告ネットワーク SDK v2.8.20240808と互換性があります。 - LINE更新内容(2024-08-08):v2.8.20240806バージョンには動画ファイルを再生できなくなるバグが確認されたため、v2.8.20240722バージョンをv2.8.20240808バージョンとして再リリースしました。 ### Version 2.7.20240515.0(2024-05-23) - LINE広告ネットワーク SDK 2.7.20240515と互換性があります。 - LINE更新内容:特定の環境下でクラッシュするバグを修正しました。androidx.preference:preferenceへの依存を追加しました。FiveAd.getSdkVersion() APIを非推奨化しました。代わりに FiveAd.getSdkSemanticVersion() APIをご利用ください。 ### Version 2.7.20240126.0(2024-02-01) - LINE広告ネットワーク SDK 2.7.20240126と互換性があります。 - バージョン20240112で削除したActivityとスロットIDを引数に取る動画リワード広告やインタースティシャル広告のコンストラクタを復活させました。バージョン20240112において動画リワードやインタースティシャル広告が表示されなくなった方は当バージョンへのアップデートをお願いします。 ### Version 2.6.20230607.1(2023-10-18) - LINE広告ネットワーク SDK 2.6.20230607と互換性があります。 - VAMPLINEAdsAdapterのみアップデート ### Version 2.6.20230607.0(2023-06-08) - LINE広告ネットワーク SDK 2.6.20230607と互換性があります。 - LINE広告ネットワーク修正内容(2023-06-07)com.google.android.exoplayer:exoplayer-core:2.18.1 への依存が追加されました。内部ロジックを改善しました。 ### Version 2.6.20230215.1(2023-03-01) - LINE広告ネットワーク SDK 2.6.20230215と互換性があります。 - LINE広告ネットワーク修正内容(2023-02-15)変更なし。※VAMPアダプターのみ修正。 ### Version 2.6.20230215.0(2023-02-20) - LINE広告ネットワーク SDK 2.6.20230215と互換性があります。 - LINE広告ネットワーク修正内容(2023-02-15)依存ライブラリ com.google.android.gms:play-services-ads-identifier のバージョンを 16.0.0 から 18.0.1 に引き上げました。以下のライブラリへの依存が追加されました。androidx.lifecycle:lifecycle-common:2.5.1。androidx.lifecycle:lifecycle-process:2.5.1。targetCompatibility JavaVersion.VERSION_1_8が必須になりました。内部ロジックを改善しました。 ### Version 2.5.20221226.0(2023-01-10) - LINE広告ネットワーク SDK 2.5.20221226と互換性があります。 - LINE広告ネットワーク修正内容(2022-12-26)最小APIレベルを19に引き上げました。対象APIレベル31に対応しました。一部のOSバージョンかつ一部のデバイスの条件を共に満たす場合に、フルスクリーン広告表示中に部分的に背景が表示される問題を修正しました。非推奨APIのFiveAdListenerを削除しました。移行が済んでいない方はマイグレーションガイドを参考に移行してください。フルスクリーン広告を非メインスレッドから表示した上で動画プレイヤーにエラーが発生した場合に、クラッシュするバグを修正しました。内部ロジックを改善しました。 ### Version 2.4.20220617.0(2022-07-26) - LINE広告ネットワーク SDK 2.4.20220617と互換性があります。 ### Version 2.4.20220216.0 - LINE広告ネットワーク SDK 2.4.20220216と互換性があります。 ### Version 2.4.20211029.0 - LINE広告ネットワーク SDK 2.4.20211029と互換性があります。 ### Version 2.3.20210514.0 - LINE広告ネットワーク SDK 2.3.20210514と互換性があります。 ### Version 2.3.20210511.0 - LINE広告ネットワーク SDK 2.3.20210511と互換性があります。 - このバージョンからはFiveAd.jarを手動で導入する必要がなくなりました。 ### Version 20210317.0 - LINE広告ネットワーク SDK 20210317と互換性があります。 - VAMP SDK v4.1.0以降が必要です。 --- ## maioの統合 import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # maioの統合 このガイドではAndroidアプリに`VAMP SDK`のmaioアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされている`VAMPMaioAdapter`の最新バージョンはこちらになります。 :::note[Note] アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、広告を表示することはできません。 ::: ## gradleでアダプターをインストール まずは、gradleでアダプターをインストールします。 build.gradle(project-level)に以下のmaven URLを追記します。 ``` allprojects { repositories { ・・・(省略)・・・ maven { url "https://imobile-maio.github.io/maven" } } } ``` build.gradle(app-level)に以下を追記します。 ``` dependencies { ・・・(省略)・・・ implementation 'jp.supership.vamp:vamp-maio-adapter:[Version]' } ``` ## AndroidManifest.xmlの設定 特に追加するpermissionはありません。 ## proguardの設定 SDKを導入したアプリを難読化する際は以下の設定値をproguardの設定ファイルに追加してください。 難読化後の表示確認も必ず行ってください。 ``` -keep class jp.maio.sdk.android.** { *; } ``` ## VAMPMaioAdapterの更新履歴 ### Version 2.0.900(2026-07-30) - maio SDK 2.0.9(2026-07-24)と互換性があります。 - 更新内容:[初期化時の不具合修正](https://github.com/imobile/MaioSDK-v2-Android/releases/tag/v2.0.9) ### Version 2.0.800(2026-01-14) - maio SDK 2.0.8(2025-12-10)と互換性があります。 - 更新内容:[エンドカード不具合修正](https://github.com/imobile/MaioSDK-v2-Android/releases/tag/v2.0.8) ### Version 2.0.700(2025-10-28) - maio SDK 2.0.7(2025-10-23)と互換性があります。 - 更新内容:[再生時不具合修正](https://github.com/imobile/MaioSDK-v2-Android/releases/tag/v2.0.7) ### Version 2.0.500(2025-06-26) - maio SDK 2.0.5(2025-06-10)と互換性があります。 - 更新内容:[Android 15画面下部表示不具合対応](https://github.com/imobile/MaioSDK-v2-Android/releases/tag/v2.0.5) ### Version 2.0.400(2025-04-09) - maio SDK 2.0.4(2025-04-01)と互換性があります。 - 更新内容:[Android API 23以下の対応](https://github.com/imobile/MaioSDK-v2-Android/releases/tag/v2.0.4) ### Version 1.1.16.3(2023-10-18) - maio SDK 1.1.16と互換性があります。 - VAMPmaioAdapterのみアップデート ### Version 1.1.16.2(2022-10-18) - maio SDK 1.1.16と互換性があります。 - VAMPのmaioアダプターのみ更新。maio SDKは変更無し。 ### Version 1.1.16.1(2022-08-02) - maio SDK 1.1.16と互換性があります。メモリリーク対応。 ### Version 1.1.16.0 - maio SDK 1.1.16と互換性があります。 ### Version 1.1.15.0 - maio SDK 1.1.15と互換性があります。 ### Version 1.1.14.0 - maio SDK 1.1.14と互換性があります。 - VAMP SDK v4.1.0以降が必要です。 --- ## Pangleの統合 import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # Pangleの統合 このガイドではAndroidアプリにVAMP SDKのPangleアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされているVAMPPangleAdapterの最新バージョンはこちらになります。 :::note[Note] App Open Ads(アプリ起動時広告)は VAMPPangleAdapter 7.9.10200(Pangle SDK 7.9.1.2 同梱)以降、VAMP Android SDK v5.3.5 以降で対応しています。 ::: ## gradleでアダプターをインストール まずは、gradleでアダプターをインストールします。 build.gradle(project-level)に以下のmaven URLを追記します。 ```groovy ・・・(省略)・・・ maven { url 'https://artifact.bytedance.com/repository/pangle' } ``` build.gradle(app-level)に以下を追記します。 ```groovy dependencies { ・・・(省略)・・・ implementation 'jp.supership.vamp:vamp-pangle-adapter:[Version]' } ``` ## AndroidManifest.xmlの設定 以下のパーミッションをAndroidManifestに追記します。 ```xml ``` :::note[Note] WAKE_LOCKパーミッションはVAMPPangleAdapter 4.3.0.6.0以降不要となりました。 ::: TTMultiProviderをAndroidManifestに追記します。 :::note[Note] VAMPPangleAdapter 4.3.0.6.0以降は以下の記述は不要です。 ::: ```xml ``` ## proguardの設定 SDKを導入したアプリを難読化する際は以下の設定値をproguardの設定ファイルに追加してください。 難読化後の表示確認も必ず行ってください。 ``` -keep class com.bytedance.sdk.** { *; } -keep class com.pgl.sys.ces.* {*;} ``` ## VAMPPangleAdapter の更新履歴 ### Version 8.2.400(2026-08-05) - Pangle SDK 8.2.0.4と互換性があります。 - Pangle変更内容(2026-07-27): - ランディングページ描画の改善 - まれに発生するNullPointerExceptionクラッシュの修正 - 動画再生パフォーマンスの改善 - メモリ使用量の削減 - App Open Ads広告でまれにアプリアイコンが空になる問題の修正 - ランディングページ読み込みパフォーマンスの最適化 ### Version 8.1.400(2026-07-13) - Pangle SDK 8.1.0.4と互換性があります。 - Pangle変更内容(2026-06-26): - 画像読み込みパフォーマンスの改善 - ランディングページ描画の改善 ### Version 8.0.500(2026-06-05) - Pangle SDK 8.0.0.5と互換性があります。 - Pangle変更内容(2026-05-18): - SO ライブラリ読み込み失敗の最適化(`UnsatisfiedLinkError: dlopen failed: library "libtt_ugen_layout.so" not found`) ### Version 7.9.10200(2026-05-13) - Pangle SDK 7.9.1.2と互換性があります。 - App Open Ads(アプリ起動時広告)に対応しました。 - Pangle変更内容(2026-03-20): - NPE 修正(`com.bytedance.sdk.component.zp.pf.setVisibility(int)` on null reference)、OOM 最適化、`libpglarmor.so` のクラッシュ修正 ### Version 7.9.900(2026-02-12) - Pangle SDK 7.9.0.9と互換性があります。 - Pangle変更内容(2026-02-09): - Deprecated the following API: `getBiddingToken`, `setGDPRConsent`, `getGDPRConsent` - Added API: `getBiddingToken(Context, PAGBiddingRequest, PAGBidCallback)` - Style optimization - Countdown optimization - Optimized the compilation warning issue of apg8 namespace ### Version 7.8.50900(2026-02-02) - Pangle SDK 7.8.5.9と互換性があります。 - Pangle変更内容(2026-01-22): - Style optimization - Fixed occasional ANR glitches ### Version 7.8.50200(2026-01-06) - Pangle SDK 7.8.5.2と互換性があります。 - Pangle変更内容(2025-12-25): - Optimized app open ads style - Encryption upgrade to enhance business data protection - Optimized the ad ID acquisition logic to improve advertising performance - Reduced unnecessary object creation for memory optimization - Removed two activities: `com.bytedance.sdk.openadsdk.activity.TTInterstitialActivity` and `com.bytedance.sdk.openadsdk.activity.TTInterstitialExpressActivity` ### Version 7.7.200(2025-10-29) - Pangle SDK 7.7.0.2と互換性があります。 - Pangle変更内容: - Enhancement and Others: Fixed occasional NPE - `java.lang.NullPointerException: Attempt to invoke virtual method 'void com.bytedance.sdk.openadsdk.activity.psq.gmn()' on a null object reference` - `java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference` - Optimized AOA caching logic - Optimized style issues ### Version 7.6.500(2025-10-20) - Pangle SDK 7.6.0.5と互換性があります。 - Pangle変更内容: - Enhancement and Others: Optimized ad closing logic. - Fixed occasional NPE problem: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' on a null object reference at com.bytedance.sdk.openadsdk.component.EO.IlO(SourceFile:354). - Optimized ad styles. 時折発生していた NPE(java.lang.NullPointerException: com.bytedance.sdk.openadsdk.component.EO.IlO(SourceFile:354))により、null オブジェクト参照で仮想メソッド 'void android.widget.ImageView.setImageBitmap(android.graphics.Bitmap)' を呼び出そうとしていた問題を修正し、広告スタイルを最適化しました。 ### Version 7.6.400(2025-10-08) - Pangle SDK 7.6.0.4と互換性があります。 - Pangle変更内容(2025-09-25):Enhancement and Others Optimized ad closing logic ### Version 7.5.400(2025-09-08) - Pangle SDK 7.5.0.4と互換性があります。 - Pangle変更内容(2025-09-04):Enhancement and Others - Fixed the occasional NPE problem java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.Intent android.app.Activity.getIntent()' on a null object reference ### Version 7.1.700(2025-05-13) - Pangle SDK 7.1.0.7と互換性があります。 - Pangle変更内容(2025-04-24):Enhancement and Others - Fix the problem of 'Caused by: java.lang.UnsatisfiedLinkError: dlopen failed 'libtt_ugen_layout.so' not found' caused by calling getDecorView --- ## UnityAdsの統合 import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # UnityAdsの統合 このガイドではAndroidアプリに`VAMP SDK`のUnityAdsアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされている`VAMPUnityAdsAdapter`の最新バージョンはこちらになります。 :::note[Note] アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、広告を表示することはできません。 ::: ## gradleでアダプターをインストール まずは、gradleでアダプターをインストールします。 build.gradle(project-level)に以下を追記します。 ``` allprojects { repositories { ・・・(省略)・・・ mavenCentral() } } ``` build.gradle(app-level)に以下を追記します。 ``` dependencies { ・・・(省略)・・・ implementation 'jp.supership.vamp:vamp-unityads-adapter:[Version]' } ``` ## AndroidManifest.xmlの設定 特に追加するpermissionはありません。 ## proguardの設定 SDKを導入したアプリを難読化する際は以下の設定値をproguardの設定ファイルに追加してください。 難読化後の表示確認も必ず行ってください。 ``` -keep class com.unity3d.ads.** { *; } ``` ## VAMPUnityAdsAdapterの更新履歴 ### Version 4.20.0(2026-08-20) - UnityAds SDK 4.20.0と互換性があります。 - [UnityAds変更内容(2026-08-14)](https://docs.unity.com/ads/en-us/manual/Changelog) - WebViewプール機構の新設により、広告読み込みの信頼性を向上しました。 - Android 8でのクラッシュを修正し、ANRを削減しました。 - AGP 9(R8 minification)に対応しました。AGP 9 で minify を有効にする場合は 4.20.0 以降が必要です。 - `RewardedAd.show()` / `InterstitialAd.show()` の第1引数の型が `Activity` から `Context` に変更されました。 ### Version 4.19.0(2026-07-14) - UnityAds SDK 4.19.0と互換性があります。 - [UnityAds変更内容(2026-06-26)](https://docs.unity.com/ads/en-us/manual/Changelog) - Kotlinを2.1.xにアップグレードしました。 - バグ修正と安定性の改善を行いました。 ### Version 4.16.600(2026-02-04) - UnityAds SDK 4.16.6と互換性があります。 - [UnityAds変更内容(2026-01-22)](https://docs.unity.com/ads/en-us/manual/Changelog) - WebView 処理の改善(AndroidWebViewContainer 関連クラスの修正) - バグ修正 ### Version 4.16.500(2026-01-14) - UnityAds SDK 4.16.5と互換性があります。 - [UnityAds変更内容(2025-12-05)](https://docs.unity.com/ads/en-us/manual/Changelog) - 低メモリ端末の性能改善 - バナー挙動改善 - Play Store非搭載端末のクラッシュ修正 ### Version 4.16.400(2025-11-17) - UnityAds SDK 4.16.4と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog) - アプリの安定性を向上させるため、メモリの少ないデバイスで発生していたメモリ不足によるクラッシュを修正しました。 - 広告の操作中に戻るボタンが予期せず動作する可能性がある問題を修正しました。 ### Version 4.16.300(2025-10-14) - UnityAds SDK 4.16.3と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog) - 初期化中に問題が検出された場合にフォールバック ロジックを最適化しました。 ### Version 4.16.200(2025-10-09) - UnityAds SDK 4.16.2と互換性があります。 - [UnityAds変更内容(2025-10-02)](https://docs.unity.com/ads/en-us/manual/Changelog) - バナー API を更新し、メディエーション パートナーとの互換性を向上させて、バナーの統合をよりスムーズにしました。 - よりスムーズな取引を実現するために、Google Play Billing Library v8 のアプリ内購入サポートを更新しました。 - プログラマティック キャンペーンに影響する Open Measurement のバグを修正しました。 ### Version 4.16.1(2025-09-08) - UnityAds SDK 4.16.1と互換性があります。 - [UnityAds変更内容(2025-08-13)](https://docs.unity.com/ads/en-us/manual/Changelog)- Reduced Unity Ads SDK initialization time. ### Version 4.16.0(2025-07-28) - UnityAds SDK 4.16.0と互換性があります。 - [UnityAds変更内容(2025-07-23)](https://docs.unity.com/ads/en-us/manual/Changelog)- Improved handling to ensure ads can display correctly after the app screen closes. ### Version 4.15.100(2025-07-03) - UnityAds SDK 4.15.1と互換性があります。 - [UnityAds変更内容(2025-07-03)](https://docs.unity.com/ads/en-us/manual/Changelog)- Fixed an ad lifecycle issue potentially denying the display of subsequent ads in a session. Updated the Proguard consumer file for improved Acquire Optimizations support. ### Version 4.15.0(2025-06-19) - UnityAds SDK 4.15.0と互換性があります。 - [UnityAds変更内容(2025-05-28)](https://docs.unity.com/ads/en-us/manual/Changelog)- Added support for the Android display content edge-to-edge feature. - Added a new getToken API that supports ad formats. Providing an ad format - optimizes ad loading processes for faster ad delivery. - Improved asset memory usage. - Improved error handling. - Fixed issue with streaming ad performance on low-end devices. ### Version 4.13.100(2025-01-23) - UnityAds SDK 4.13.1と互換性があります。 - [UnityAds変更内容(2025-01-30)](https://docs.unity.com/ads/en-us/manual/Changelog)Fixed a crash that could occur when attempting to re-initialize the SDK inside the initialization complete callback. ### Version 4.13.0(2025-01-23) - UnityAds SDK 4.13.0と互換性があります。 - [UnityAds変更内容(2025-01-14)](https://docs.unity.com/ads/en-us/manual/Changelog)Fixed a potential Null Pointer Error for Banners.Fixed a potential deserialization issue in the Android Player.Improved reporting for initialization failures.Fixed an issue with operative message event retries following an error message.Improved data requests to simplify reporting complexity. ### Version 4.12.500(2024-12-11) - UnityAds SDK 4.12.5と互換性があります。 - [UnityAds変更内容(2024-11-21)](https://docs.unity.com/ads/en-us/manual/Changelog):Fixed an issue to improve internal counters. ### Version 4.12.400(2024-10-29) - UnityAds SDK 4.12.4と互換性があります。 - [UnityAds変更内容(2024-10-24)](https://docs.unity.com/ads/en-us/manual/Changelog):Fixed a crash that occurred when flushing diagnostics events.Fixed a crash that occurred during communication with the Google Play Billing Library.Fixed an issue where the internal state was not set prior to calling IUnityAdsInitializationListener, leading to later session errors. ### Version 4.12.300(2024-10-01) - UnityAds SDK 4.12.3と互換性があります。 - [UnityAds変更内容(2024-09-20)](https://docs.unity.com/ads/en-us/manual/Changelog):Fixed an issue that caused a NullPointerException on banner show. Fixed an issue with ShowOptions serialization which sometimes caused a crash.Fixed a race condition in getToken that led to null tokens being returned in some cases.Adjusted packaging to allow for better minification when using ProGuard. ### Version 4.12.200(2024-08-19) - UnityAds SDK 4.12.0と互換性があります。 - [UnityAds変更内容(2024-08-06)](https://docs.unity.com/ads/en-us/manual/Changelog):Fixed an issue with Proguard minification leading to runtime exceptions.Fixed an issue where the billing service disconnections could lead to a crash in some configurations.Fixed an issue where when the activity is destroyed from external sources, the Ad Player still responds with a complete event.Fixed an issue where ad show failures would prevent subsequent ad shows from starting.Fixed an issue where the ad display orientation would not update from the device leading to incorrect end card orientations. ### Version 4.10.0.0(2024-06-03) - UnityAds SDK 4.10.0と互換性があります。 - [UnityAds変更内容(2024-03-25)](https://docs.unity.com/ads/en-us/manual/Changelog):Fixed an error where banner loaded callbacks were triggered twice.Fixed a java.lang.NoSuchMethodError issue that affected a subset of publishers using Unity Ads SDK 4.9.3. ### Version 4.9.1.1(2023-10-18) - UnityAds SDK 4.9.1と互換性があります。 - VAMPUnityAdsAdapterのみアップデート ### Version 4.9.1.0(2023-10-16) - UnityAds SDK 4.9.1と互換性があります。 - [UnityAds変更内容(2023-10-13)](https://github.com/Unity-Technologies/unity-ads-android/releases/tag/4.9.1):Fixed an issue with the getToken listener timing out and responding with a null token. ### Version 4.7.1.0(2023-05-10) - UnityAds SDK 4.7.1と互換性があります。 - [UnityAds変更内容(2023-05-08)](https://github.com/Unity-Technologies/unity-ads-android/releases/tag/4.7.1):Fixed a change that required a newer Gradle build version to be used to build the Android project which was incompatible with the Gradle version shipped with current LTS Unity Editors. ### Version 4.6.1.0(2023-03-22) - UnityAds SDK 4.6.1と互換性があります。 - [UnityAds変更内容(2023-03-16)](https://github.com/Unity-Technologies/unity-ads-android/releases/tag/4.6.1):Reduced network requests.Note: Unity Ads has introduced new dependencies as of SDK version 4.5.0. Manually including the linked aar, will lead to runtime errors if dependencies are not properly resolved. It is recommended to use a package management system such as Gradle to handle dependency management. Integration steps can be found here: https://docs.unity.com/ads/en/manual/InstallingTheAndroidSDK ### Version 4.6.0.0(2023-02-28) - UnityAds SDK 4.6.0と互換性があります。 - [UnityAds変更内容(2023-02-25)](https://github.com/Unity-Technologies/unity-ads-android/releases/tag/4.6.0):Improved Banner life cycle performance.Fixed a NullPointerException when Application Context is null for cached directory file path. ### Version 4.5.0.0(2022-10-18) - UnityAds SDK 4.5.0と互換性があります。 - [UnityAds変更内容(2022-12-20)](https://github.com/Unity-Technologies/unity-ads-android/releases/tag/4.5.0):Reduced number of requests that take place during initialization This release introduces new a dependency on Kotlin Improved handling of timers when dealing with app being placed in background. Fixed a crash that can occur during video playback when Media Player is in an invalid state ### Version 4.4.1.0(2022-10-18) - UnityAds SDK 4.4.1と互換性があります。 - [UnityAds 4.4.1変更内容](https://github.com/Unity-Technologies/unity-ads-android/releases/tag/4.4.1) ### Version 4.4.0.0(2022-09-13) - UnityAds SDK 4.4.0と互換性があります。 ### Version 4.3.0.0(2022-08-08) - UnityAds SDK 4.3.0と互換性があります。 ### Version 4.2.1.1(2022-07-27) - UnityAds SDK 4.2.1と互換性があります。 ### Version 4.2.1.0 - UnityAds SDK 4.2.1と互換性があります。 ### Version 4.1.0.0 - UnityAds SDK 4.1.0と互換性があります。 ### Version 4.0.1.0 - UnityAds SDK 4.0.1と互換性があります。 ### Version 3.7.5.1 - UnityAds SDK 3.7.5と互換性があります。 ### Version 3.7.5.0 - UnityAds SDK 3.7.5と互換性があります。 ### Version 3.7.2.0 - UnityAds SDK 3.7.2と互換性があります。 ### Version 3.7.1.0 - UnityAds SDK 3.7.1と互換性があります。 ### Version 3.7.0.0 - UnityAds SDK 3.7.0と互換性があります。 - VAMP SDK v4.1.0以降が必要です。 --- ## 実装のテスト 実装後のテスト方法についてのガイド ---- ## テスト用広告枠ID 以下の広告枠IDを設定することで実装を簡単にテストすることができます。 広告枠ID | 説明 | 設定されているアドネットワーク ---|---|--- 59756 | 動画リワード Androidテスト用ID | UnityAds、AdMob ## テストモードの設定 テストモードをONにすることで、テスト広告による表示確認が可能です。 RTB案件は配信されません。 :::note[Note] リリースするときは必ず削除するか、コメントアウトしてください。 ::: ### Java ```java VAMP.setTestMode(true); ``` ### Kotlin ```kotlin VAMP.setTestMode(true) ``` ## デバッグモードの設定 デバッグモードをONにすることで、Logcatでデバッグレベルのログを確認することが可能になります。 同時に、アドネットワーク各社のSDKデバッグモードも連携してONにすることができます。 :::note[Note] リリースするときは必ず削除するか、コメントアウトしてください。 ::: ### Java ```java VAMP.setDebugMode(true); ``` ### Kotlin ```kotlin VAMP.setDebugMode(true) ``` ## テストモード、デバッグモードの連携 VAMPのテストモード、デバッグモードを設定すると、以下の表の○がついているアドネットワークと連携します。 アドネットワーク | テストモード | デバッグモード ---|---|--- AdMob | ○ | - AppLovin | - | ○ maio | ○ | - UnityAds | ○ | ○ LINEAds | ○ | - --- ## 広告フォーマット(Ad-format) このページでは広告フォーマット毎の実装方法について説明します。 - [動画リワード広告](/vamp/cocos2dx/ad-format/rewarded_ad) --- ## 動画リワード広告(3) 動画リワード広告とは、アプリ内で使用可能なアイテムやポイントをユーザーに付与する代わりに、約15秒〜30秒程度の動画広告を表示する広告フォーマットです。 強制視聴型の動画広告と違い、動画視聴を希望したユーザーにのみインセンティブを付与する点で、一般的な動画広告とは異なるものです。 動画視聴後に付与する報酬(インセンティブ)の例としては、ゲーム内で使えるアイテムやコンティニューの権利、ツール系アプリの場合は有料の機能を限定的に開放するなどがあります。 ## 前提条件 - VAMP Cocos2dx Plugin v5.1.1以降 - VAMP Cocos2dx Pluginがインポート済み ※まだVAMP Cocos2dx Pluginのインポートがお済みでない場合は[こちら](/vamp/cocos2dx/integration-guide)をご参考ください。 各メソッドの仕様やオプションについては、Cocos2dxPluginリファレンスをご参照ください。 ## VAMPCocosSDKオブジェクトの初期化 動画リワード広告を表示するためにまず`VAMPCocosSDK`オブジェクトを初期化する必要があります。 次のコードスニペットでは、`VideoScene`クラスの`init`メソッド内で`VAMPCocosSDK`オブジェクトを初期化しています。 広告枠IDで`VAMPCocosSDK`を初期化します。 :::note[Note] AdGeneration管理画面で発行された広告枠IDを*****に設定します。 ::: ```c++ //VideoScene.h #include #include "cocos2d.h" #include "ui/CocosGUI.h" #include "VAMPConnection.h" class VideoScene : public cocos2d::Scene, public vamp::VAMPListener { public: virtual ~VideoScene(); bool init() override; void onExit() override; protected: // //VAMPListener // virtual void onVampReceive(const vamp::Ad& ad) override; virtual void onVampOpen(const vamp::Ad& ad) override; virtual void onVampComplete(const vamp::Ad& ad) override; virtual void onVampClose(const vamp::Ad& ad, const bool adClicked) override; virtual void onVampFailedToLoad(const vamp::Ad& ad, const vamp::error::Error error) override; virtual void onVampFailedToShow(const vamp::Ad& ad, const vamp::error::Error error) override; virtual void onVampExpired(const std::string& placementId) override; virtual void onVampLoadStart(const vamp::Ad& ad) override; virtual void onVampLoadResult(const vamp::Ad& ad, const bool success, const std::string& msg) override; protected: std::unique_ptr vamp_; }; ``` ```c++ //VideoScene.cpp #include "VideoScene.h" #include "VAMPConnection.h" using namespace vamp; VideoScene::~VideoScene() { } bool VideoScene::init() { if (!Scene::init()) { return false; } // VAMPCocosSDKの初期化 vamp_.reset(new VAMPCocosSDK("*****")); vamp_->setVAMPListener(this); return true; } void VideoScene::onExit() { Scene::onExit(); // 終了処理 vamp_.reset(); } // // VAMPListenerの実装 // void VideoScene::onVampReceive(const Ad &ad) { } void VideoScene::onVampOpen(const Ad &ad) { } void VideoScene::onVampComplete(const vamp::Ad &ad) { } void VideoScene::onVampClose(const vamp::Ad &ad, const bool adClicked) { } void VideoScene::onVampFailedToLoad(const Ad &ad, const error::Error error) { } void VideoScene::onVampFailedToShow(const Ad &ad, const error::Error error) { } void VideoScene::onVampExpired(const std::string& placementId) { } void VideoScene::onVampLoadStart(const vamp::Ad &ad) { } void VideoScene::onVampLoadResult(const vamp::Ad &ad, const bool success, const std::string& msg) { } ``` ## 広告の読み込み ```c++ vamp::Request request; vamp_->load(request); ``` 広告の読み込み完了時には`onVampReceive`に通知されます。 ## 表示(再生) ```c++ vamp_->show(); ``` ## VAMPListenerの実装 ### リスナーの登録 上記のスニペットでは、`VideoScene`クラスにVAMPListenerを実装しています。`VAMPCocosSDK`オブジェクトを初期化するタイミングでリスナーをセットしています。 ```c++ vamp_->setVAMPListener(this); ``` ### 広告表示準備完了 広告のロードが成功したタイミングで通知されます。 ```c++ void VideoScene::onVampReceive(const Ad &ad) { } ``` ### エラー エラーが発生した場合に通知されます。 ```c++ // 全アドネットワークにおいて広告が取得できなかったときに通知 void VideoScene::onVampFailedToLoad(const Ad &ad, const error::Error error) { } // 広告の表示に失敗したときに通知 void VideoScene::onVampFailedToShow(const Ad &ad, const error::Error error) { } ``` エラーは[こちら](/vamp/cocos2dx/api-error)をご確認ください。 ### 広告を閉じる 広告を閉じたタイミングで呼び出されます。 ```c++ void VideoScene::onVampClose(const vamp::Ad &ad, const bool adClicked) { } ``` ### インセンティブ付与通知 動画再生完了時、または広告が閉じられた際にインセンティブ付与が可能な状態であれば呼び出されます。 動画の再生を途中でキャンセルした場合は、本イベントは通知されません。 ```c++ void VideoScene::onVampComplete(const vamp::Ad &ad) { } ``` ### 広告取得開始 アドネットワーク毎の広告取得が開始されたときに通知します。 ```c++ void VideoScene::onVampLoadStart(const vamp::Ad &ad) { } ``` ### アドネットワーク毎の広告取得結果 アドネットワーク毎の広告取得結果が通知されます。 ```c++ void VideoScene::onVampLoadResult(const vamp::Ad &ad, const bool success, const std::string& msg) { } ``` アドネットワーク毎の広告取得結果を、 **成功** , **失敗** のどちらの場合でも通知します。 `success`引数が**true**の場合は成功です。 失敗しても次のアドネットワークがある場合、広告取得を実行します。 最終的に全てのアドネットワークの広告在庫がない場合は、 `onVampFailedToLoad`の`NoAdStock`が通知されるため、ここで処理を止めないでください。 :::note[Note] この通知をもとに`show`しないようご注意ください。`show`する判定は、`onVampReceive`イベントを受け取ったタイミングで判断ください。 ::: ### 期限切れ `onVampReceive`イベントを受けてからの有効期限(55分)が切れた際に通知されます。 広告を表示するためには、再度ロードを行う必要があります。 ```c++ void VideoScene::onVampExpired(const std::string& placementId) { } ``` --- ## エラー定義(Cocos2dx) VAMPのエラーコードの定義についてのガイド |コード|内容|発生条件(例)| |---|---|---| |Unknown|不明なエラー|起動元アプリと接続できなくなりました。| |ServerError|サーバー間通信エラー|広告枠IDが不正、またはアドジェネのサーバーでエラーが発生しているので、お問い合わせください。| |NoAdnetwork|配信可能なアドネットワークがない|アドジェネ管理画面でアドネットワークの配信がONになっていない、またはEU圏からのアクセスの場合(GDPR)発生します。| |NeedConnection|通信不通|ネットワークに接続できない状況(電波状況が悪い、機内モードなど)です。電波状況をご確認ください。| |MediationTimeout|メディエーションタイムアウト|広告のロードをリクエストした後、アドネットワークSDKから返答が得られず、15秒経過した場合に発生します。デフォルト15秒ですが、`setMediationTimeoutInMilliseconds`(Android)/ `setMediationTimeoutInSeconds:`(iOS)で秒数を変更(5秒〜60秒)できます。| |UserCancel|ユーザ都合の途中終了|AdMobなどで動画を途中でキャンセルできる場合に発生します。| |NoAdStock|広告在庫が無い。またはアドネットワーク側エラー。|在庫が無いので、再度loadをしてもらう必要があります。連続で発生する場合、時間を置いてからloadをする必要があります。フリクエンシーキャップにかかっている場合があります。| |SettingError|設定エラー|アドネットワークアダプターがインポートされていないなど、プロジェクトの設定に不備があります。Androidの場合はパーミッションやGooglePlayServiceライブラリが不足していないか、iOSの場合はVAMPアダプターが実装されているかご確認ください。| |NotSupportedOsVersion|サポート対象外のOSバージョンです|対応していないOSのバージョンなので、ダイアログでユーザーに広告機能が使えない旨の通知をしてください。| |NotLoaded|広告がロードされていない|広告のロードが完了していないときに表示しようとした場合に発生します。広告のロードが完了した後にshowメソッドを実行してください。| |AdnetworkError|アドネットワークにてエラーが発生した|アドネットワーク側でエラーが発生しました。| |InvalidParameter|パラメータが不正|不正なパラメータが設定されています。広告枠IDまたはActivityが不正です。| |FrequencyCapped|フリークエンシーキャップ(非推奨)|この機能は削除されました| |RequestTimeout|リクエストタイムアウト|広告のロードをリクエストした後、アドジェネサーバから一定時間応答が得られなかった場合に発生します。(v5.1.1で追加)| --- ## VAMP Cocos2dx Pluginのドキュメント Cocos2dxアプリにVAMP SDKを導入する ---- Cocos2dx製アプリで`VAMP SDK`を使用して広告を表示するためには、まず、`VAMP SDK`をCocos2dxアプリに導入します。 SDKの導入が済んだら、広告フォーマット毎に必要な実装をしていきます。 ### Github https://github.com/AdGeneration/VAMP-Cocos2d-x-Plugin ---- - [VAMP v5 スタートガイド](/vamp/cocos2dx/integration-guide) VAMP SDKの導入手順についてのガイド - [広告フォーマット](/vamp/cocos2dx/ad-format) 広告フォーマット毎に実装方法についてのガイド - [エラー定義](/vamp/cocos2dx/api-error) VAMPのエラーコードの定義についてのガイド - [実装のテスト](/vamp/cocos2dx/test) 実装後のテスト方法についてのガイド --- ## VAMP v5 スタートガイド VAMP SDKの導入手順についてのガイド ## 更新履歴 - [最新ReleaseNote](https://github.com/AdGeneration/VAMP-Cocos2d-x-Plugin/releases) ### v5.3.4(2026-02-24) - VAMP Android/iOS SDK v5.3.4に対応しました - Android: https://github.com/AdGeneration/VAMP-Android-SDK/releases/tag/v5.3.4 - iOS: https://github.com/AdGeneration/VAMP-iOS-SDK/releases/tag/v5.3.4 ## はじめに Cocos2dxでの開発に必要な環境がインストールされていることを前提としています ## 動作確認環境 |ツール名 |ver. | |:------------:|:------------:| |Cocos2dx |3.17.2 | |Xcode |26 | |Android Studio|2025.2.1 | |NDK |r25c | |Gradle |8.10 | |Gradle Plugin |8.1.2 | ※AndroidはサポートOSがMarshmallow(6.0)以降となります ## Cocos2dx Pluginをダウンロードする ### Cocos2dx Plugin https://github.com/AdGeneration/VAMP-Cocos2d-x-Plugin/releases ### vamp_cocos2dx_plugin_[Version].zipファイルの内容 ``` - java/ ... Android用javaファイル - src/ - VAMPConnection.h ... Android/iOS共通C++ヘッダファイル - VAMPConnection.cpp ... Android用C++実装ファイル - VAMPConnection.mm ... iOS用C++実装ファイル ``` *[Version]にはSDKのバージョン番号が入ります。 ## Android用SDKをプロジェクトに追加する ### SDKの導入 1. [VAMP Android SDKのドキュメント](/vamp/android/)に従って、VAMPおよび各アドネットワークのSDKを導入 2. ダウンロードしたCocos2dx Pluginのjava/*.javaをAndroidプロジェクトのsrcフォルダに入れる(javaフォルダの中をフォルダごとコピー) ![Javaファイルの追加](/img/import_java_sdk.png) 3. VAMPConnection.hおよびVAMPConnection.cppをClassesフォルダに入れる ![VAMPConnectionの追加](/img/import_vamp_connection_cpp.png) *VAMPConnection.hはAndroid/iOSで共通のヘッダファイルです。 4. Android.mkに以下を追記 ``` LOCAL_SRC_FILES := hellocpp/main.cpp \ ../../../Classes/AppDelegate.cpp \ 〜省略〜 ../../../Classes/VAMPConnection.cpp // 追記 ``` *Classesフォルダへのパスは環境に合わせて適宜書き換えてください。 ### Proguardの設定 VAMPおよび各アドネットワークのProguardの設定については下記を参照してください。 - [VAMP](/vamp/android/integration-guide#4-proguard%E3%81%AE%E8%A8%AD%E5%AE%9A) - [AdMob](/vamp/android/mediation/admob#proguard%E3%81%AE%E8%A8%AD%E5%AE%9A) - [AppLovin](/vamp/android/mediation/applovin#proguard%E3%81%AE%E8%A8%AD%E5%AE%9A) - [LINEAds](/vamp/android/mediation/lineads#proguard%E3%81%AE%E8%A8%AD%E5%AE%9A) - [maio](/vamp/android/mediation/maio#proguard%E3%81%AE%E8%A8%AD%E5%AE%9A) - [Pangle](/vamp/android/mediation/pangle#proguard%E3%81%AE%E8%A8%AD%E5%AE%9A) - [UnityAds](/vamp/android/mediation/unityads#proguard%E3%81%AE%E8%A8%AD%E5%AE%9A) また、上記設定の他に以下の設定を追加します。 ```proguard # VAMP Cocos2d-x Plugin -keepclasseswithmembers class jp.supership.vampcocos2dx.** { *; } # Cocos2d-x -keep class org.cocos2dx.lib.** { *; } -keepclasseswithmembers class * { native ; } ``` :::note[Note] 難読化後の表示確認も必ず行ってください。 ::: ### AndroidManifest.xmlの設定 Androidアプリでは、使用するAdnetworkによってAndroidManifest.xmlに設定をする必要があります。 `VAMP`のAndroidManifest.xmlの設定に関しては、[こちら](/vamp/android/integration-guide#2-androidmanifestxml%E3%81%AE%E8%A8%AD%E5%AE%9A)をご確認ください。 その他アドネットワークのAndroidManifest.xmlの設定に関しては、[こちら](/vamp/android/mediation)をご確認ください。 ### その他の設定 その他の設定については[Androidのスタートガイド](/vamp/android/integration-guide)をご確認ください。 ## iOS用SDKをプロジェクトに追加する ### SDKの導入 1. Podfileに以下を追加 ``` pod 'VAMPCocos2dx' ``` 2. 必要に応じて各アドネットワークアダプタを追加(参考:[VAMP iOS SDKのドキュメント](/vamp/ios/)) ``` pod 'VAMPAdmobAdapter' pod 'VAMPAppLovinAdapter' pod 'VAMPLINEAdsAdapter' pod 'VAMPMaioAdapter' pod 'VAMPPangleAdapter' pod 'VAMPUnityAdsAdapter' ``` 3. Xcode上で、VAMPConnection.hおよびVAMPConnection.mmをClassesにドラッグ&ドロップして追加 ![VAMPConnectionの追加](/img/import_vamp_connection_mm.png) *VAMPConnection.hはAndroid/iOSで共通のヘッダファイルです。 ## 注意事項 - [Androidの注意事項](/vamp/android/integration-guide#5-注意事項) - [iOSの注意事項](/vamp/ios/integration-guide#注意事項) --- ## 実装のテスト(Cocos2dx) 実装後のテスト方法についてのガイド ## テスト用の広告枠ID テスト用の広告枠IDはiOSとAndroidで異なります。 テストをするOSのテスト枠をご確認ください。 - [iOSテスト枠](/vamp/ios/test#テスト用広告枠id) - [Androidテスト枠](/vamp/android/test#テスト用広告枠id) ## テストモードの設定 テストモードをONにすることで、テスト広告による表示確認が可能です。 RTB案件は配信されません。 :::note[Note] リリースするときは必ず削除するか、コメントアウトしてください。 ::: ``` VAMPCocosSDK::setTestMode(true); ``` ## デバッグモードの設定 デバッグモードをONにすることで、詳細なログが出力されます。 :::note[Note] リリースするときは必ず削除するか、コメントアウトしてください。 ::: ``` VAMPCocosSDK::setDebugMode(true); ``` ## テストモード、デバッグモードの連携 以下からVAMPのテストモード、デバッグモードに対応しているアドネットワークをご確認いただけます。 - [iOS](/vamp/ios/test#テストモードデバッグモードの連携) - [Android](/vamp/android/test#テストモードデバッグモードの連携) --- ## VAMP SDK インテグレーションガイド import WhatsNewList from '@site/src/components/WhatsNew/WhatsNewList'; import WhatsNewCount from '@site/src/components/WhatsNew/WhatsNewCount'; import Link from '@docusaurus/Link'; import VAMPMediationTable from '@site/src/components/SDKVersions/VAMPMediationTable'; export const newsnum = 5; # VAMP SDKインテグレーションガイド :::warning[サイト統合のお知らせ] Ad Generation SDKとVAMP SDKのドキュメントを 2025年12月 に統合しました。 より充実したコンテンツと改善されたナビゲーションで開発をサポートします。 ::: {(count) => ( <> 📢 最新情報({count}件) )} すべての更新情報を見る → ## プラットフォーム別導入ガイド iOS Android Unity Cocos2dx ## iOS対応一覧 ## Android対応一覧 --- ## 【iOS】App Open Ads(アプリ起動時広告) import Tabs from '@theme/Tabs'; import TabItem from '@theme/TabItem'; # 【iOS】App Open Ads(アプリ起動時広告) App Open Ads(アプリ起動時広告)は、アプリの読み込み画面やバックグラウンドからの復帰画面を収益化するための全画面広告フォーマットです。ユーザーがアプリを起動したタイミングや、フォアグラウンドに切り替えたタイミングで表示されます。ユーザーはいつでも広告を閉じることができます。 実装は以下の3ステップで行います: 1. 広告を事前にロードする 2. アプリのライフサイクルイベントを監視し、適切なタイミングで広告を表示する 3. デリゲートでコールバックを処理する ## 前提条件 - VAMP SDK v5.3.5 以降(VAMP 全体の最小要件) - VAMPPangleAdapter 7.9.800 (Pangle SDK 7.9.0.8)以降 - Xcode 26.1 以降(App Open Ads で利用する Pangle SDK の最小要件) - 対応アドネットワーク: 現時点では Pangle 各メソッドの仕様やオプションについては、iOSリファレンスをご参照ください。 テスト時の広告枠IDについては[テスト](/vamp/ios/test)を参照してください。 現時点の iOS App Open Ads は、`VAMP SDK + VAMPPangleAdapter` の組み合わせでご利用ください。`VAMPPangleAdapter` を Swift Package Manager(SPM)で導入すると、Pangle SDK も連動して解決されます。`Ads-Global` を個別に追加する必要はありません。 導入方法そのものは、以下のページを参照してください。 - VAMP SDK本体: [スタートガイド](/vamp/ios/integration-guide) - Pangleアダプター: [Pangleの統合](/vamp/ios/mediation/pangle) ## 実装方針 安定した実装には、広告のロードに加えてアプリのライフサイクル制御が重要です。**いつロードし、いつ表示し、いつ再ロードするか** をアプリ側でも明確に管理してください。 実装時は、以下の考え方で組み込むことを推奨します。 1. アプリ起動直後に広告をロードする 2. バックグラウンド復帰時は、表示可能な広告がある場合のみ即表示する 3. 復帰時に広告が未準備なら、その場では表示せず次回用のロードだけ行う 4. 広告表示中は追加の `load` / `show` を行わない(App Open Ads 自身の表示中だけでなく、リワード広告など他フォーマットの全画面広告の表示中も `show` を行わない) 5. 広告を閉じた直後、または表示失敗直後に次回用の広告を再ロードする 特に iOS では、`didBecomeActive` / `sceneDidBecomeActive` が広告表示中にも発火する場合があります。このタイミングで追加の `load` を実行すると、アプリ側の状態管理が壊れ、バックグラウンド復帰時に広告が表示されなくなる原因になります。 そのため、以下のような状態を持つ構成にすると実装しやすくなります。 - `isInitialLaunch` - 初回起動時のみ、ロード完了後に即表示するためのフラグ - `isLoadingAppOpenAd` - 同じ placementID に対する二重ロードを防ぐためのフラグ - `isShowingAppOpenAd` - 広告表示中の `didBecomeActive` / `sceneDidBecomeActive` を無視するためのフラグ - `isShowingOtherFullscreenAd` - リワード広告など、他フォーマットの全画面広告の表示中に App Open Ads の表示を抑止するためのフラグ(詳細は「[注意事項 > 他フォーマットの広告表示中は表示しない](#他フォーマットの広告表示中は表示しない)」を参照) 上記 4 つを使っておくと、初回起動・バックグラウンド復帰・広告クローズ後の再ロード・他フォーマットとの重なり防止を安全に制御しやすくなります。 ## 広告の読み込み 次のコードスニペットでは、広告の読み込みをする場合の実装例です。 delegateには`VAMPAppOpenAdLoadDelegate`を設定してください。 AdGeneration管理画面で発行された広告枠IDを*****に設定します。 ```swift import VAMP class AppDelegate: UIResponder, UIApplicationDelegate, VAMPAppOpenAdLoadDelegate { let placementId = "*****" // 広告枠IDを設定してください func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { let request = VAMPRequest() VAMPAppOpenAd.load(withPlacementID: placementId, request: request, delegate: self) return true } } ``` ```objectivec #import @interface AppDelegate () @end @implementation AppDelegate static NSString * const kPlacementId = @"*****"; // 広告枠IDを設定してください - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { VAMPRequest *request = VAMPRequest.request; [VAMPAppOpenAd loadWithPlacementID:kPlacementId request:request delegate:self]; return YES; } @end ``` 広告の読み込みに成功した場合、`VAMPAppOpenAdLoadDelegate`の`appOpenAdDidReceiveWithPlacementID:`デリゲートメソッドが呼ばれます。 ※App Open Ads はアプリ起動の早い段階で読み込みを開始し、バックグラウンド復帰時にすぐ表示できるようキャッシュしておくことを推奨します。 ※`load` を呼ぶたびに必ず新規ネットワークリクエストが発生する前提で実装しないでください。App Open Ads は「表示可能な広告があるか」と「今ロード中か」をアプリ側でも管理し、不要な重複ロードを避けることを推奨します。 ## 広告読み込み時のデリゲート 広告読み込み時の通知を受け取るための`VAMPAppOpenAdLoadDelegate`のデリゲートメソッドについて解説します。 このデリゲートは`VAMPAppOpenAd`の`loadWithPlacementID:`(広告読み込み時)で設定します。 ### 広告表示準備完了 広告のロードが成功したタイミングで呼び出されます。 ```swift func appOpenAdDidReceive(withPlacementID placementID: String) ``` ```objectivec - (void)appOpenAdDidReceiveWithPlacementID:(NSString *)placementID ``` ### 広告読み込み失敗 広告の読み込みに失敗した際に呼び出されます。 ```swift func appOpenAdDidFailToLoad(withPlacementID placementID: String, error: VAMPError) ``` ```objectivec - (void)appOpenAdDidFailToLoadWithPlacementID:(NSString *)placementID error:(VAMPError *)error ``` 詳細については[エラーコード一覧](/vamp/ios/api-error)を参照してください。 ### 期限切れ `appOpenAdDidExpireWithPlacementID:` は公開 API として定義されていますが、少なくとも現時点で対応している Pangle 連携では、このコールバックは通常利用されません。さらに、Pangle では有効期限超過を SDK 側で一律に `appOpenAd:didFailToShowWithError:` へ落とす前提にもなっていません。expire 通知や表示失敗を有効期限判定の唯一の契機とせず、広告を閉じた後や表示失敗後は必ず次回用の広告を再ロードしてください。 ※有効期限についての詳細は「[注意事項 > 広告の有効期限](#広告の有効期限)」を参照してください。 ※将来、対応アドネットワークの拡張にあわせて expire 通知の仕様を見直す可能性があります。 ```swift func appOpenAdDidExpire(withPlacementID placementID: String) ``` ```objectivec - (void)appOpenAdDidExpireWithPlacementID:(NSString *)placementID ``` ## 広告の表示 delegateには`VAMPAppOpenAdShowDelegate`を設定してください。 ```swift if let appOpenAd = VAMPAppOpenAd.of(placementID: placementId) { // 広告の表示 appOpenAd.show(from: self, delegate: self) } ``` ```objectivec VAMPAppOpenAd *appOpenAd = [VAMPAppOpenAd appOpenAdOfPlacementID:kPlacementId]; if (appOpenAd) { // 広告の表示 [appOpenAd showFromViewController:self delegate:self]; } ``` ## アプリのライフサイクルに統合する ### バックグラウンド復帰時の表示 App Open Adsの主なユースケースは、アプリがバックグラウンドからフォアグラウンドに復帰したタイミングでの広告表示です。 UIKit ベースのアプリでは `applicationDidBecomeActive(_:)` を起点に制御できますが、Scene / SwiftUI ベースのアプリでは `sceneDidBecomeActive(_:)` 側で先に復帰を検知する場合があります。公開 sample でも、App Open Ads 制御は共通メソッドへ寄せ、`UIApplicationDelegate` と `UIWindowSceneDelegate` の両方から同じ処理を呼ぶ構成を採用しています。 ```swift import UIKit import VAMP final class AppDelegate: UIResponder, UIApplicationDelegate { private let placementId = "*****" private var isInitialLaunch = true private var isLoadingAppOpenAd = false private var isShowingAppOpenAd = false // リワード広告など他フォーマットの全画面広告の表示中は true にする // (リワード側の rewardedAdDidOpen(_:) で true、 // rewardedAd(_:didCloseWithClickedFlag:) と // rewardedAd(_:didFailToShowWithError:) の両方で false に戻す) var isShowingOtherFullscreenAd = false private var isSchedulingActiveRetry = false private var activeRetryCount = 0 private let maxActiveRetryCount = 10 private var activeRetryTask: Task? private var activeRetryGeneration = 0 func application(_ _: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { loadAppOpenAd() return true } func applicationDidBecomeActive(_ _: UIApplication) { handleDidBecomeActive(resetRetryBudget: true) } func handleDidBecomeActive(resetRetryBudget: Bool = false) { if resetRetryBudget { activeRetryGeneration += 1 activeRetryTask?.cancel() activeRetryTask = nil isSchedulingActiveRetry = false activeRetryCount = 0 } guard UIApplication.shared.applicationState == .active else { scheduleActiveHandlingRetryIfNeeded() return } guard UIApplication.shared.topViewController() != nil else { scheduleActiveHandlingRetryIfNeeded() return } guard !isShowingAppOpenAd else { return } activeRetryCount = 0 showAdIfAvailable() } private func loadAppOpenAd(with placementID: String? = nil) { guard !isLoadingAppOpenAd else { return } isLoadingAppOpenAd = true let request = VAMPRequest() VAMPAppOpenAd.load(withPlacementID: placementID ?? placementId, request: request, delegate: self) } private func showAdIfAvailable() { guard !isShowingAppOpenAd else { return } // リワード広告など他フォーマットの全画面広告の表示中は表示しない guard !isShowingOtherFullscreenAd else { return } guard let appOpenAd = VAMPAppOpenAd.of(placementID: placementId) else { // 復帰時に広告が未準備なら、その場では表示せず次回用のロードだけ行う loadAppOpenAd() return } guard let viewController = UIApplication.shared.topViewController() else { // 起動直後などで表示先 VC が未確定な場合は短時間だけ再評価する scheduleActiveHandlingRetryIfNeeded() return } isShowingAppOpenAd = true appOpenAd.show(from: viewController, delegate: self) } private func scheduleActiveHandlingRetryIfNeeded() { guard !isSchedulingActiveRetry else { return } guard activeRetryCount < maxActiveRetryCount else { return } isSchedulingActiveRetry = true activeRetryCount += 1 activeRetryGeneration += 1 let generation = activeRetryGeneration activeRetryTask = Task { @MainActor [weak self] in guard let self else { return } do { try await Task.sleep(nanoseconds: 300_000_000) } catch { guard self.activeRetryGeneration == generation else { return } self.isSchedulingActiveRetry = false self.activeRetryTask = nil return } guard self.activeRetryGeneration == generation else { return } self.isSchedulingActiveRetry = false self.activeRetryTask = nil self.handleDidBecomeActive() } } } extension AppDelegate: VAMPAppOpenAdLoadDelegate { func appOpenAdDidReceive(withPlacementID _: String) { Task { @MainActor in isLoadingAppOpenAd = false // 初回起動時のみ、ロード完了後に即表示する if isInitialLaunch { showAdIfAvailable() } } } func appOpenAdDidFailToLoad(withPlacementID _: String, error _: VAMPError) { Task { @MainActor in isLoadingAppOpenAd = false isInitialLaunch = false } } } extension AppDelegate: VAMPAppOpenAdShowDelegate { func appOpenAdDidOpen(_ _: VAMPAppOpenAd) { Task { @MainActor in isInitialLaunch = false } } func appOpenAd(_ appOpenAd: VAMPAppOpenAd, didCloseWithClickedFlag _: Bool) { Task { @MainActor in isShowingAppOpenAd = false loadAppOpenAd(with: appOpenAd.placementID) } } func appOpenAd(_ appOpenAd: VAMPAppOpenAd, didFailToShowWithError _: VAMPError) { Task { @MainActor in isShowingAppOpenAd = false loadAppOpenAd(with: appOpenAd.placementID) isInitialLaunch = false } } } final class SceneDelegate: UIResponder, UIWindowSceneDelegate { func sceneDidBecomeActive(_ _: UIScene) { (UIApplication.shared.delegate as? AppDelegate)?.handleDidBecomeActive(resetRetryBudget: true) } } private extension UIApplication { func topViewController(base: UIViewController? = nil) -> UIViewController? { let windowScenes = connectedScenes.compactMap { $0 as? UIWindowScene } let preferredWindow = ( windowScenes .filter { $0.activationState == .foregroundActive } .flatMap { $0.windows } .first { $0.isKeyWindow } ) ?? ( windowScenes .filter { $0.activationState == .foregroundInactive } .flatMap { $0.windows } .first { $0.isKeyWindow } ) let baseViewController = base ?? preferredWindow?.rootViewController if let navigationController = baseViewController as? UINavigationController, let visibleViewController = navigationController.visibleViewController { return topViewController(base: visibleViewController) } if let tabBarController = baseViewController as? UITabBarController, let selectedViewController = tabBarController.selectedViewController { return topViewController(base: selectedViewController) } if let presentedViewController = baseViewController?.presentedViewController { return topViewController(base: presentedViewController) } return baseViewController } } ``` ```objectivec @interface AppDelegate () // リワード広告など他フォーマットの全画面広告の表示中は YES にする // (リワード側の rewardedAdDidOpen: で YES、didCloseWithClickedFlag: と // didFailToShowWithError: の両方で NO に戻す。外部から設定するためプロパティにする) @property (nonatomic, assign) BOOL isShowingOtherFullscreenAd; @end @implementation AppDelegate { BOOL _isInitialLaunch; BOOL _isLoadingAppOpenAd; BOOL _isShowingAppOpenAd; } - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { _isInitialLaunch = YES; [self loadAppOpenAdWithPlacementID:nil]; return YES; } - (void)applicationDidBecomeActive:(UIApplication *)__unused application { [self handleDidBecomeActive]; } - (void)handleDidBecomeActive { if (_isShowingAppOpenAd) { return; } [self showAdIfAvailable]; } - (void)loadAppOpenAdWithPlacementID:(NSString *)placementID { if (_isLoadingAppOpenAd) { return; } _isLoadingAppOpenAd = YES; VAMPRequest *request = VAMPRequest.request; [VAMPAppOpenAd loadWithPlacementID:placementID ?: kPlacementId request:request delegate:self]; } - (void)showAdIfAvailable { if (_isShowingAppOpenAd) { return; } // リワード広告など他フォーマットの全画面広告の表示中は表示しない if (self.isShowingOtherFullscreenAd) { return; } VAMPAppOpenAd *appOpenAd = [VAMPAppOpenAd appOpenAdOfPlacementID:kPlacementId]; if (appOpenAd) { if (self.window.rootViewController) { // show 呼び出しの直前にフラグを立てる(appOpenAdDidOpen: を待つと、 // show 発行〜表示開始通知の間に didBecomeActive が再発火した場合に // ガードが効かない窓が残るため。表示失敗時は // appOpenAd:didFailToShowWithError: で NO に戻る) _isShowingAppOpenAd = YES; [appOpenAd showFromViewController:self.window.rootViewController delegate:self]; } } else if (!_isLoadingAppOpenAd) { [self loadAppOpenAdWithPlacementID:nil]; } } #pragma mark - VAMPAppOpenAdLoadDelegate - (void)appOpenAdDidReceiveWithPlacementID:(NSString *)placementID { _isLoadingAppOpenAd = NO; if (_isInitialLaunch) { [self showAdIfAvailable]; } } - (void)appOpenAdDidFailToLoadWithPlacementID:(NSString *)placementID error:(VAMPError *)error { _isLoadingAppOpenAd = NO; _isInitialLaunch = NO; } #pragma mark - VAMPAppOpenAdShowDelegate - (void)appOpenAdDidOpen:(VAMPAppOpenAd *)appOpenAd { // _isShowingAppOpenAd は show 呼び出しの直前に YES 済み(showAdIfAvailable 参照) _isInitialLaunch = NO; } - (void)appOpenAd:(VAMPAppOpenAd *)appOpenAd didCloseWithClickedFlag:(BOOL)adClicked { _isShowingAppOpenAd = NO; // 次回表示用に再ロード [self loadAppOpenAdWithPlacementID:appOpenAd.placementID]; } - (void)appOpenAd:(VAMPAppOpenAd *)appOpenAd didFailToShowWithError:(VAMPError *)error { _isShowingAppOpenAd = NO; // 表示失敗時も次回表示用に再ロード [self loadAppOpenAdWithPlacementID:appOpenAd.placementID]; _isInitialLaunch = NO; } @end ``` **注意:** バックグラウンド復帰の検知には `UIApplication.willEnterForegroundNotification` と、`UIApplication.didBecomeActiveNotification` / `applicationDidBecomeActive(_:)` 系の 2 つの選択肢があります。`didBecomeActive` 系はアプリがアクティブ状態に遷移した後に呼ばれるため、UI の準備が整った状態で広告を表示しやすく、より安全です。 ※SceneDelegateを使用している場合は、`UIWindowSceneDelegate.sceneDidBecomeActive(_:)` からも同じ共通処理を呼ぶ構成にしてください。 **Swift Concurrency(Swift 6 / Strict Concurrency Checking)をお使いの場合:** `AppDelegate` などを `@MainActor` で宣言したクラスでデリゲートを実装する際は、必要なデリゲートメソッドに `nonisolated` を付け、UI 更新を含むプロパティの更新や SDK の呼び出しは `Task { @MainActor in ... }` 内で行うようにしてください。一方、このページの Swift コード例はクラス自体を `@MainActor` にしていない前提のため、`nonisolated` は不要です。Strict Concurrency Checking を有効にしたうえでクラスを `@MainActor` 化する場合のみ、`nonisolated` + `Task { @MainActor in ... }` のパターンを適用してください。 ### Sceneベースアプリでの実装上の注意 iOS 13 以降で `SceneDelegate` や SwiftUI App Lifecycle を利用しているアプリでは、`applicationDidBecomeActive(_:)` だけではバックグラウンド復帰時のイベントを安定して拾えない場合があります。 この場合は、アプリ全体で共通の App Open Ads 制御メソッドを 1 つ用意し、以下の両方から同じ処理を呼ぶ構成を推奨します。 - `UIApplicationDelegate.applicationDidBecomeActive(_:)` - `UIWindowSceneDelegate.sceneDidBecomeActive(_:)` ただし、Scene ベースアプリでは以下の 2 点に注意してください。 1. 起動直後は `sceneDidBecomeActive(_:)` が先に発火し、まだ `rootViewController` や最前面の `UIViewController` が準備できていない場合がある このタイミングでは無理に `show` を行わず、必要なら短時間だけ再評価しつつ、初回 `load` が進んでいるならその結果を待ってください。 直上の Objective-C 例は `self.window.rootViewController` を使った簡略版です。`SceneDelegate` や SwiftUI App Lifecycle を使う構成では、そのまま固定の表示先として流用せず、表示直前に現在の最前面 `UIViewController` を解決してください。 2. 広告表示中にも `sceneDidBecomeActive(_:)` が発火する場合がある このタイミングで追加の `load` を開始すると、アプリ側の状態が壊れ、以降の復帰時に広告が表示されなくなる原因になります。広告表示中は `didBecomeActive` 系で追加の `load` / `show` を行わない構成を推奨します。 ### 初回起動時の表示方針 初回起動時は、ロード済み広告のキャッシュがまだ存在しません。そのため、以下のように考えてください。 - `didFinishLaunching` またはそれに相当する初期化処理で `load` を開始する - 初回起動時のみ、`appOpenAdDidReceiveWithPlacementID:` を受けたタイミングで即 `show` する - 初回 `load` に失敗した場合は、その起動セッションでは表示できない可能性がある 初回起動時に「まだ広告がないから即座に再ロードする」「一定時間後に強制表示する」といった制御は推奨しません。App Open Ads は起動直後の自然な表示を想定したフォーマットのため、広告未準備のまま起動が進んだ場合は、そのセッションでは通常画面へ遷移してください。 ### コールドスタート時の表示 アプリの初回起動時(Cold Start)に広告を表示する場合、SDK初期化と広告ロードが完了するまで時間がかかる可能性があります。初回起動時はロード済み広告のキャッシュがないため、広告が表示されないことがあります。 初回起動時に広告を表示する必要がある場合は、ロード完了のデリゲート(`appOpenAdDidReceiveWithPlacementID:`)を受け取ったタイミングで表示してください。 ## 広告表示時のデリゲート `VAMPAppOpenAdShowDelegate`のデリゲートメソッドについて解説します。 このデリゲートは`VAMPAppOpenAd`の`showFromViewController:`(広告表示時)で設定します。 ### 広告表示開始 広告の表示が開始されたタイミングで呼び出されます。 ```swift func appOpenAdDidOpen(_ appOpenAd: VAMPAppOpenAd) ``` ```objectivec - (void)appOpenAdDidOpen:(VAMPAppOpenAd *)appOpenAd ``` ### 広告を閉じる 広告を閉じたタイミングで呼び出されます。 ```swift func appOpenAd(_ appOpenAd: VAMPAppOpenAd, didCloseWithClickedFlag adClicked: Bool) ``` ```objectivec - (void)appOpenAd:(VAMPAppOpenAd *)appOpenAd didCloseWithClickedFlag:(BOOL)adClicked ``` ### 広告表示失敗 広告の表示に失敗した際に呼び出されます。 ```swift func appOpenAd(_ appOpenAd: VAMPAppOpenAd, didFailToShowWithError error: VAMPError) ``` ```objectivec - (void)appOpenAd:(VAMPAppOpenAd *)appOpenAd didFailToShowWithError:(VAMPError *)error ``` 詳細については[エラーコード一覧](/vamp/ios/api-error)を参照してください。 ## 注意事項 ### 広告表示中のロードについて 広告の表示中(`appOpenAdDidOpen:`から`appOpenAd:didCloseWithClickedFlag:`が呼ばれるまでの間)は、広告のロードを実行しないでください。表示中にロードを呼び出した場合、リクエストは無視されます。 広告を閉じた後(`appOpenAd:didCloseWithClickedFlag:`)または表示失敗後(`appOpenAd:didFailToShowWithError:`)に再ロードを行ってください。 ### 復帰時の再表示方針 バックグラウンド復帰時は、以下のような挙動にすることを推奨します。 - 表示可能な広告がある場合: 即表示する - 広告が未準備の場合: その場では表示せず、次回用に `load` だけ行う このとき、「復帰した瞬間に広告が未準備だった場合、ロード完了後にそのまま後追いで自動表示する」挙動は推奨しません。ユーザーがすでに通常画面で操作を始めている可能性があるためです。 実装上は、`showAdIfAvailable()` の中で広告未準備時に `loadAppOpenAd()` を呼ぶだけに留め、後追い表示は行わない構成にしてください。 ### 他フォーマットの広告表示中は表示しない `didBecomeActive` / `sceneDidBecomeActive` は、リワード広告など**他フォーマットの広告表示中**にも発火する場合があります(例: リワード広告の再生中に広告をタップして Safari へ遷移し、アプリへ復帰した場合)。`isShowingAppOpenAd` は App Open Ads 自身の表示状態しか見ていないため、このケースでは復帰時の表示処理が素通りし、**表示中のリワード広告の上に App Open Ads が重なって表示されます**。 SDK は他フォーマットの広告が表示中でも `show` の呼び出しをブロックしません。また、他フォーマットの表示状態を SDK に問い合わせる API はありません。重なりを防ぐには、アプリ側で「他フォーマットの全画面広告が表示中かどうか」を保持し、App Open Ads の表示判定に組み込んでください。 リワード広告と併用する場合の実装例です。[`VAMPRewardedAdShowDelegate`](/vamp/ios/ad-format/rewarded-ad#広告表示時のデリゲート) のコールバックでフラグを更新します。 ```swift // リワード広告側のデリゲート実装(VAMPRewardedAdShowDelegate) private var appDelegate: AppDelegate? { UIApplication.shared.delegate as? AppDelegate } func rewardedAdDidOpen(_ rewardedAd: VAMPRewardedAd) { appDelegate?.isShowingOtherFullscreenAd = true } func rewardedAd(_ rewardedAd: VAMPRewardedAd, didCloseWithClickedFlag adClicked: Bool) { appDelegate?.isShowingOtherFullscreenAd = false } func rewardedAd(_ rewardedAd: VAMPRewardedAd, didFailToShowWithError error: VAMPError) { // 表示失敗時に戻し忘れると、フラグが立ったままになり // 以後 App Open Ads が表示されなくなります appDelegate?.isShowingOtherFullscreenAd = false } ``` ```objectivec // リワード広告側のデリゲート実装(VAMPRewardedAdShowDelegate) - (AppDelegate *)appDelegate { return (AppDelegate *)[UIApplication sharedApplication].delegate; } - (void)rewardedAdDidOpen:(VAMPRewardedAd *)rewardedAd { self.appDelegate.isShowingOtherFullscreenAd = YES; } - (void)rewardedAd:(VAMPRewardedAd *)rewardedAd didCloseWithClickedFlag:(BOOL)adClicked { self.appDelegate.isShowingOtherFullscreenAd = NO; } - (void)rewardedAd:(VAMPRewardedAd *)rewardedAd didFailToShowWithError:(VAMPError *)error { // 表示失敗時に戻し忘れると、フラグが立ったままになり // 以後 App Open Ads が表示されなくなります self.appDelegate.isShowingOtherFullscreenAd = NO; } ``` フラグの更新は必ず上記の 3 箇所(`rewardedAdDidOpen:` で ON、`rewardedAd:didCloseWithClickedFlag:` と `rewardedAd:didFailToShowWithError:` の**両方**で OFF)をセットで実装してください。App Open Ads 側は「[バックグラウンド復帰時の表示](#バックグラウンド復帰時の表示)」のコード例のように、`showAdIfAvailable` の先頭でこのフラグを確認して表示をスキップします。 ### アプリ側で管理すべき状態 App Open Ads を安定して組み込むには、SDK の `load` / `show` を呼ぶだけでなく、アプリ側で以下の状態を管理してください。 - `isInitialLaunch` - 初回起動時のみ、ロード完了後に即表示するために使用 - `isLoadingAppOpenAd` - 二重ロードを防止するために使用 - `isShowingAppOpenAd` - 広告表示中の active 通知を無視するために使用 - `isShowingOtherFullscreenAd` - リワード広告など他フォーマットの全画面広告の表示中に App Open Ads の表示を抑止するために使用(「[他フォーマットの広告表示中は表示しない](#他フォーマットの広告表示中は表示しない)」参照) これらの状態を持たずに、`didBecomeActive` / `sceneDidBecomeActive` のたびに単純に `load` / `show` を呼ぶ実装は避けてください。 ### 実装者が誤りやすいポイント - `willEnterForeground` だけで制御してしまう UI の準備前に広告表示を試み、`show` が空振りしやすくなります。 - 広告表示中の active 通知で再度 `load` してしまう 復帰時に広告が表示されなくなる原因になります。 - リワード広告など他フォーマットの広告表示中の active 通知で `show` してしまう 表示中の広告の上に App Open Ads が重なって表示されます。「[他フォーマットの広告表示中は表示しない](#他フォーマットの広告表示中は表示しない)」のフラグ管理で抑止してください。 - `rootViewController` がまだ存在しないタイミングで `show` してしまう 起動直後や Scene 初期化中は、表示できずに終わる場合があります。 - 起動直後の UI 準備前や `onAppear` で ATT など別の許諾ダイアログを要求してしまう App Open Ads の表示導線と競合し、広告表示や許諾ダイアログのどちらも空振りする場合があります。初回許諾が必要な場合は、広告表示導線と競合しない active 状態で要求してください。 - 初回起動時とバックグラウンド復帰時を同じロジックで扱ってしまう 初回起動時は `didReceive` 契機の即表示、復帰時は ready なら表示・未準備なら次回用ロード、という違いを分けて実装してください。 - 広告を閉じたあとに再ロードしない 次回復帰時に即表示できなくなります。 ### 広告の有効期限 ロード済みの広告にはキャッシュ有効期限があります。有効期限を過ぎた広告を表示した場合、有効なインプレッションとしてカウントされず、収益に影響する可能性があります。 **Pangle の有効期限ポリシーは 1 時間です。** 1時間を超えた広告表示は有効インプレッションとしてカウントされません。 ただし、現行の iOS App Open Ads 実装では、Pangle は有効期限超過を SDK 側で一律に `appOpenAd:didFailToShowWithError:` へ落とす前提にはなっていません。Pangle 連携時は expire 通知や表示失敗だけに依存せず、広告を閉じた後や表示失敗後に必ず再ロードする構成を前提にしてください。 ※`appOpenAdDidExpireWithPlacementID:` は公開 API として定義されていますが、少なくとも現時点の Pangle 連携では通常通知されません。詳細は「[広告読み込み時のデリゲート > 期限切れ](#期限切れ)」を参照してください。 ### 表示頻度の制御 バックグラウンドからの復帰のたびに広告を表示すると、ユーザー体験が悪化する可能性があります。以下のような制御を検討してください。 - 前回の広告表示からの最低インターバル(例: N分以上経過) - 1日あたりの表示回数上限 --- ## 広告フォーマット(3) 広告フォーマット毎に実装方法についてのガイド ---- このページでは広告フォーマット毎の実装方法について説明します。 - [動画リワード広告](/vamp/ios/ad-format/rewarded-ad) - [App Open Ads(アプリ起動時広告)](/vamp/ios/ad-format/app-open-ad) --- ## 動画リワード広告(4) 動画リワード広告とは、アプリ内で使用可能なアイテムやポイントをユーザーに付与する代わりに、約15秒〜30秒程度の動画広告を表示する広告フォーマットです。 強制視聴型の動画広告と違い、動画視聴を希望したユーザーにのみインセンティブを付与する点で、一般的な動画広告とは異なるものです。 動画視聴後に付与する報酬(インセンティブ)の例としては、ゲーム内で使えるアイテムやコンティニューの権利、ツール系アプリの場合は有料の機能を限定的に開放するなどがあります。 ## 前提条件 - VAMP SDK v5.1.0以降 - VAMP SDKがインポート済み 各メソッドの仕様やオプションについては、iOSリファレンスをご参照ください。 ## 広告の読み込み 次のコードスニペットでは、`ViewController`の`viewDidLoad`メソッド内で広告の読み込みをする場合の実装例です。 delegateには`VAMPRewardedAdLoadDelegate`もしくは `VAMPRewardedAdLoadAdvancedDelegate`を設定してください。 AdGeneration管理画面で発行された広告枠IDを*****に設定します。 ``` #import @interface AdViewController : UIViewController @end @implementation AdViewController static NSString * const kPlacementId = @"*****"; // 広告枠IDを設定してください - (void) viewDidLoad { [super viewDidLoad]; VAMPRequest *request = VAMPRequest.request; [VAMPRewardedAd loadWithPlacementID:kPlacementId request:request delegate:self]; } @end ``` ``` import VAMP class AdViewController : UIViewController, VAMPRewardedAdLoadDelegate { let placementId = "*****" // 広告枠IDを設定してください override func viewDidLoad() { super.viewDidLoad() let request = VAMPRequest() VAMPRewardedAd.load(withPlacementID: placementId, request: request, delegate: self) } } ``` 広告の読み込みに成功した場合、`VAMPRewardedAdLoadDelegate`の`rewardedAdDidReceiveWithPlacementID:`デリゲートメソッドが呼ばれます。 ## 表示(再生) delegateには`VAMPRewardedAdShowDelegate`を設定してください。 ``` VAMPRewardedAd *rewardedAd = [VAMPRewardedAd rewardedAdOfPlacementID:kPlacementId]; if (rewardedAd) { // 広告の表示 [rewardedAd showFromViewController:self delegate:self]; } ``` ``` if let rewardedAd = VAMPRewardedAd.of(placementID: placementId) { // 広告の表示 rewardedAd.show(from: self, delegate: self) } ``` ## 広告読み込み時のデリゲート 広告読み込み時の通知を受け取るための`VAMPRewardedAdLoadDelegate`のデリゲートメソッドについて解説します。 このデリゲートは`VAMPRewardedAd`の`loadWithPlacementID:`(広告読み込み時)で設定します。 ### 広告表示準備完了 広告のロードが成功したタイミングで呼び出されます。 ``` - (void)rewardedAdDidReceiveWithPlacementID:(NSString *)placementID ``` ``` func rewardedAdDidReceive(withPlacementID placementID: String) ``` ### 広告読み込み失敗 広告の読み込みに失敗した際に呼び出されます。 ``` // 全アドネットワークにおいて広告が取得できなかったときに通知 - (void)rewardedAdDidFailToLoadWithPlacementID:(NSString *)placementID error:(VAMPError *)error ``` ``` // 全アドネットワークにおいて広告が取得できなかったときに通知 func rewardedAdDidFailToLoad(withPlacementID placementID: String, error: VAMPError) ``` 詳細については[エラーコード一覧](/vamp/ios/api-error)を参照してください。 ### 期限切れ `rewardedAdDidReceiveWithPlacementID:`を受けてからの有効期限(55分)が切れた際に通知されます。 広告を表示するためには、再度ロードを行う必要があります。 ``` - (void) rewardedAdDidExpireWithPlacementID:(NSString *)placementID ``` ``` func rewardedAdDidExpire(withPlacementID placementID: String) ``` ### アドネットワーク毎の広告取得結果 アドネットワーク毎の広告取得結果を、 **成功** , **失敗** のどちらの場合でも通知します。 errorが`nil`の場合は成功です。 失敗しても次のアドネットワークがある場合、広告取得を実行します。 最終的に全てのアドネットワークの広告在庫がない場合は、 `rewardedAdDidFailToLoadWithPlacementID:error:`に`VAMPErrorCodeNoAdStock`が通知されるため、ここで処理を止めないでください。 ※この通知を利用する際は`VAMPRewardedAdLoadDelegate`ではなく、`VAMPRewardedAdLoadAdvancedDelegate`を実装してください。 ``` - (void) rewardedAdDidLoad:(NSString *)adNetworkName withPlacementID:(NSString *)placementID error:(nullable VAMPError *)error; ``` ``` func rewardedAdDidLoad(_ adNetworkName: String, withPlacementID placementID: String, error: VAMPError?) ``` この通知をもとに`show`しないようご注意ください。`show`する判定は、`rewardedAdDidReceiveWithPlacementID:`を受け取ったタイミングで判断してください。 ## 広告表示時のデリゲート `VAMPRewardedAdShowDelegate`のデリゲートメソッドについて解説します。 このデリゲートは`VAMPRewardedAd`の`showFromViewController:`(広告表示時)で設定します。 ### 広告を閉じる 広告を閉じたタイミングで呼び出されます。 ``` - (void)rewardedAd:(VAMPRewardedAd *)rewardedAd didCloseWithClickedFlag:(BOOL)adClicked ``` ``` func rewardedAd(_ rewardedAd: VAMPRewardedAd, didCloseWithClickedFlag adClicked: Bool) ``` ### インセンティブ付与通知 動画再生完了時、または広告が閉じられた際にインセンティブ付与が可能な状態であれば呼び出されます。 動画の再生を途中でキャンセルした場合は、本デリゲートメソッドは呼び出されません。 ``` - (void)rewardedAdDidComplete:(VAMPRewardedAd *)rewardedAd ``` ``` func rewardedAdDidComplete(_ rewardedAd: VAMPRewardedAd) ``` ### 広告表示開始 広告の表示が開始されたタイミングで呼び出されます。 ``` - (void)rewardedAdDidOpen:(VAMPRewardedAd *)rewardedAd ``` ``` func rewardedAdDidOpen(_ rewardedAd: VAMPRewardedAd) ``` ### 広告表示失敗 広告の表示に失敗した際に呼び出されます。 ``` // 広告の表示に失敗すると通知されます。 - (void)rewardedAd:(VAMPRewardedAd *)rewardedAd didFailToShowWithError:(VAMPError *)error ``` ``` // 広告の表示に失敗すると通知されます。 func rewardedAd(_ rewardedAd: VAMPRewardedAd, didFailToShowWithError error: VAMPError) ``` 詳細については[エラーコード一覧](/vamp/ios/api-error)を参照してください。 ## 注意事項 ### App Open Ads と併用する場合 App Open Ads(アプリ起動時広告)を併用しているアプリでは、リワード広告の表示中にアプリがバックグラウンドへ遷移して復帰すると(例: 広告タップで Safari へ遷移して戻る)、復帰イベントを契機に App Open Ads がリワード広告の上に重なって表示される場合があります。 これを防ぐには、本ページの `rewardedAdDidOpen(_:)` / `rewardedAd(_:didCloseWithClickedFlag:)` / `rewardedAd(_:didFailToShowWithError:)` を利用して「リワード広告の表示中」フラグをアプリ側で管理し、App Open Ads の表示判定に組み込んでください。実装方法は「[【iOS】App Open Ads > 注意事項 > 他フォーマットの広告表示中は表示しない](/vamp/ios/ad-format/app-open-ad#他フォーマットの広告表示中は表示しない)」を参照してください。 --- ## エラー定義(Ios) VAMPのエラーコードの定義についてのガイド ---- コード | 内容 | 発生条件 ---|---|--- VAMPErrorCodeNotSupportedOsVersion | 非対応OSバージョン | 対応していないOSバージョンなので、ダイアログでユーザーに広告機能が使えない旨の通知をしてください。 VAMPErrorCodeUnknown | 不明なエラー | 不明なエラーが発生しました。 VAMPErrorCodeServerError | サーバー間通信エラー | 広告枠IDが不正、またはアドジェネサーバでエラーが発生しているため、お問い合わせください。 VAMPErrorCodeNoAdnetwork | 配信可能なアドネットワークがない | アドジェネ管理画面でアドネットワークの配信がONになっていない、またはEU圏からのアクセスの場合でも発生します(GDPR対応)。 VAMPErrorCodeNeedConnection | 通信不通 | ネットワークに接続できない状況(電波状況が悪い、機内モードなど)です。電波状況をご確認ください。機内モード(設定>Wi-FiをOFFになっていること)で、loadすると発生します。 VAMPErrorCodeMediationTimeout | メディエーションタイムアウト | 広告のロードをリクエストした後、アドネットワークSDKから返答が得られず、15秒経過した場合にこのエラーが発生します。 VAMPErrorCodeUserCancel | ユーザ都合の途中終了 | AdMobなどで動画を途中でキャンセルした場合に発生します。 VAMPErrorCodeNoAdStock | 広告在庫無しまたは表示可能なアドネットワークが1件もない | 在庫が無いため、再度ロードしてください。連続で発生する場合、時間を置いてからロードしてください。フリクエンシーキャップにかかっている場合があります。 VAMPErrorCodeAdnetworkError | アドネットワークにてエラーが発生した | アドネットワーク側でエラーが発生しました。 VAMPErrorCodeSettingError | 設定エラー | VAMPアダプターが実装されているかご確認ください。 VAMPErrorCodeNotLoadedAd | 広告がロードされていない | 広告がロードされていない時に表示しようとした場合に発生します。 VAMPErrorCodeInvalidParameter | パラメータが不正 | 不正なパラメータが設定されています。placementIdを空にした場合や、`setContentURL:error:` に上限(512文字)を超えるURLを設定した場合(v5.3.7〜)に発生します。 VAMPErrorCodeFrequencyCapped | フリークエンシーキャップ(DEPRECATED) | この機能は削除されました。 VAMPErrorCodeRequestTimeout | リクエストタイムアウト | 広告のロードをリクエストした後、アドジェネサーバから一定時間応答が得られなかった場合に発生します。(v5.1.0で追加) --- ## VAMP iOS SDKのドキュメント import VAMPMediationTable from '@site/src/components/SDKVersions/VAMPMediationTable'; # VAMP iOS SDKのドキュメント iOSアプリにVAMP SDKを導入する ## 対応一覧 iOSアプリで`VAMP SDK`を使用して広告を表示するためには、 まず、`VAMP SDK`をiOSアプリに導入します。 SDKの導入が済んだら、広告フォーマット毎に必要な実装をしていきます。 ## Githubリポジトリ https://github.com/AdGeneration/VAMP-iOS-SDK ## 詳細 - [SDKをCocoaPodsでインストール](/vamp/ios/install-sdk-with-cocoapods) - VAMP SDKをCocoaPodsでインストールする方法についてのガイド - [VAMP スタートガイド](/vamp/ios/integration-guide) - VAMP SDKの導入手順についてのガイド - [広告フォーマット](/vamp/ios/ad-format/) - 広告フォーマット毎に実装方法についてのガイド - [エラー定義](/vamp/ios/api-error) - VAMPのエラーコードの定義についてのガイド - [iOS14対応](/vamp/ios/ios14) - iOS14対応についてのガイド - [実装のテスト](/vamp/ios/test) - 実装後のテスト方法についてのガイド - [v5 SDK移行ガイド](/vamp/ios/v5) - v4からv5へのSDK移行ガイド - [メディエーション](/vamp/ios/mediation/) - メディエーションの統合方法についてのガイド --- ## SDKをCocoaPodsでインストール VAMP SDKをCocoaPodsでインストールする方法についてのガイド [CocoaPods](https://guides.cocoapods.org/using/getting-started)を使って簡単にSDKをインストールすることができます。 CocoaPodsのインストール手順など詳しくは[公式のドキュメント](https://guides.cocoapods.org/using/using-cocoapods)を参考にしてください。 ## プロジェクトにVAMP SDKをインストール ### Podfileを編集 - 最新のVAMP SDKをインストールする場合 `pod 'VAMP-SDK'` - バージョンを指定してインストールする場合 `pod 'VAMP-SDK', "[VERSION]"` 例) v5.2.0の場合 `pod 'VAMP-SDK', "5.2.0"` ### インストール `pod install` `pod install`コマンドを実行したディレクトリ配下に[プロジェクト名]**.xcworkspace** が生成されます。 :::note [プロジェクト名].xcodeprojの代わりに、[プロジェクト名].xcworkspaceをXcodeで開いて開発してください。 ::: ## 依存関係 VAMP SDKはSSCore(共通基盤ライブラリ)に依存しています。CocoaPodsを使用してインストールする場合、SSCore 3.0.0が自動的にインストールされます。 --- ## VAMP v5 スタートガイド(Ios) VAMP SDKの導入手順についてのガイド ---- - [最新ReleaseNote](https://github.com/AdGeneration/VAMP-iOS-SDK/releases) - App Content URL対応(2026-07-22 VAMP v5.3.7〜) - 内部処理を改善しました(2026-05-26 VAMP v5.3.6〜) - Swift Package Manager(SPM)配布(2025-07-15 VAMP v5.3.3〜) - 対象Xcodeバージョン:Xcode 16.4以降(2026-03-11 VAMP v5.3.5〜) - HyperID機能の削除(2025-02-04 VAMP v5.3.1〜) - 対象iOSバージョン:12.0以降(2024-02-19 VAMP v5.1.1〜) ## 動作確認環境 - iOS 12.0以降 - Xcode 26.3以降 ## SDKインストール手順 開発環境としてXcodeを利用し、iOSアプリケーション開発に必要な環境がインストールされていることを前提としています。 ## Swift Package Manager(SPM)インストール **注意事項** **⚠️** SPMとCocoaPodsを併用して実装するケースには対応しておりません。 - CocoaPodsからSPMへ移行する際は、依存関係の競合を防ぐため、**pod deintegrate** コマンドでプロジェクトからCocoaPodsの設定を完全に削除してください。 - **Xcode 16.3** 以降でSPMに対応しています。 - SPMでの配布は、**VAMP v5.3.3** 以降(2025-07-15)から対応しています。 - VAMPアダプターのSPM配布は、AdMob、Pangle、AppLovin、UnityAds、maio、LINEAdsの各アドネットワークに対応しています。 - LINEAdsは **VAMPLINEAdsAdapter v3.0.100**(2026-05-26)からSPMでの配布に対応しています。 Xcodeのメニューから「File」→「Add Package Dependencies」を選択し、右上の検索窓に以下のURLを入力して追加します。 VAMP v5.3.3以降はSwift Package Managerでのインストールが可能です。 https://github.com/AdGeneration/VAMP-iOS-SDK.git ### VAMPアダプター インストール AdMob、Pangle、AppLovin、UnityAds、maio、LINEAds のVAMPアダプターもSPMで配布しています。必要に応じて、以下のリポジトリURLを追加してください。 - **AdMob** `https://github.com/AdGeneration/VAMP-AdMob-iOS-Adapter.git` - **Pangle** `https://github.com/AdGeneration/VAMP-Pangle-iOS-Adapter.git` - **AppLovin** `https://github.com/AdGeneration/VAMP-AppLovin-iOS-Adapter.git` - **UnityAds** `https://github.com/AdGeneration/VAMP-UnityAds-iOS-Adapter.git` - **maio** `https://github.com/AdGeneration/VAMP-Maio-iOS-Adapter.git` - **LINEAds** `https://github.com/AdGeneration/VAMP-LINEAds-iOS-Adapter.git` ### Build Settingsの修正 - Build SettingsのLinking > Other Linker Flagsに`-ObjC`を指定してください。 ### iOS14以降の対応 iOS14以降の対応については、[こちら](ios14)を参照してください。 ### CocoaPodsを使ってインストール [こちら](install-sdk-with-cocoapods)を参照してください。 ### 手動でインストール 最新のVAMP SDKをCocoaPodsで入手するか、担当に依頼して個別に入手してください。 入手した **VAMP.zip** を解凍して **VAMP.xcframework** をワークスペースにドラッグ アンド ドロップします。 ## Swiftでの実装 プロジェクト直下に、以下の一行を追記したhファイルを作成します(例ではHeader.h)。 ``` #import ``` Build Settingsの「SwiftCompiler-Code Generation」内の「Objective-C Bridging Header」にHeader.hを設定します。 [![Objective-C Bridging Headerの設定](/img/man_objective_c_bridging_header.png)](/img/man_objective_c_bridging_header.png) ## App Content URLの設定 **VAMP v5.3.7** 以降(2026-07-22)で対応しています。SSCore 3.7.0以降が必要です(CocoaPods / SPMではVAMP SDKの依存関係として対応バージョンが自動的にインストールされます)。 アプリの主要コンテンツに一致するウェブサイトURLを設定できます。設定したURLは、コンテンツターゲティングのために広告リクエストの `atp` パラメータとして付与されます。 `VAMPRequest` の `setContentURL:error:` メソッドで設定します。広告のロード手順については[動画リワード広告](/vamp/ios/ad-format/rewarded-ad)を参照してください。 ### Objective-C ```objective-c VAMPRequest *request = VAMPRequest.request; NSError *error = nil; if (![request setContentURL:@"https://www.example.com/contents" error:&error]) { // 設定に失敗した場合の処理 NSLog(@"setContentURL error: %@", error); } [VAMPRewardedAd loadWithPlacementID:kPlacementId request:request delegate:self]; ``` ### Swift ```swift let request = VAMPRequest() do { try request.setContentURL("https://www.example.com/contents") } catch { // 設定に失敗した場合の処理 print("setContentURL error: \(error)") } VAMPRewardedAd.load(withPlacementID: placementId, request: request, delegate: self) ``` **仕様** - URLの上限は512文字(UTF-16 code unit)です。前後の空白・改行を除去(trim)した後の長さで判定されます。 - 上限を超過した場合、`setContentURL:error:` は `NO`(Swiftではエラーをスロー)を返し、`VAMPErrorCodeInvalidParameter` のエラーを返します。このとき、それまでに設定されていたURLもクリアされます。 - 上限超過などで設定に失敗した場合も、広告のロード自体はブロックされません。 - `nil` を渡すと設定を解除できます。trim後に空文字列となる場合も未設定(`nil`)として扱われます。 - 設定したURLは `contentURL` プロパティ(読み取り専用)で参照できます。trim後の値が保持されます。 - AdMobメディエーションを利用している場合、設定値はAdMobのコンテンツマッピングにも伝播します。詳細は[AdMobの統合](/vamp/ios/mediation/admob#コンテンツマッピングapp-content-url)を参照してください。 ## 注意事項 - 通信状況や動画広告によってはロードに時間がかかる場合があります。特に各アドネットワークの初回のロードは時間がかかる傾向にありますのでご注意ください。 --- ## iOS14 ATT対応 iOS14 App Tracking Transparency対応についてのガイド ---- iOS14からは、[App Tracking Transparency](https://developer.apple.com/documentation/apptrackingtransparency?language=objc)を使ってアプリトラッキングの承認リクエストをするためのダイアログを表示し、ユーザが許可するまでIDFAを取得できなくなりました。 このダイアログを提示しない場合、IDFAは0となり、広告収入の損失に繋がる可能性があります。 このドキュメントでは、iOS14をサポートするために必要な対応について説明します。 ### 前提条件 - VAMP SDK 4.1.0以降(v5含む) ### App Tracking Transparencyでユーザの許諾をリクエスト IDFAを取得するためには`App Tracking Transparency`でユーザの許諾を得る必要があります。 #### 1. Info.plistにNSUserTrackingUsageDescriptionを追加 Info.plistに**NSUserTrackingUsageDescription** をキーに使用方法の説明を追加します。 :::note[Note] ※説明を追加せずにユーザの許諾をリクエストしようとすると、アプリがクラッシュします。 ::: 以下は説明文のサンプルです。 ``` NSUserTrackingUsageDescription App would like to access IDFA for tracking purpose ``` この説明文は以下のようにダイアログ内で表示されます。 #### 2. ユーザの許諾をリクエスト 許諾ダイアログを表示するには、`ATTrackingManager`の`requestTrackingAuthorizationWithCompletionHandler`を実装します。 完了コールバックが呼ばれてから広告をロードすることをお勧めします。 ``` #import ... - (void)requestIDFA { [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) { }]; } ``` App Tracking Transparencyの詳細については、[公式ドキュメント](https://developer.apple.com/documentation/apptrackingtransparency?language=objc)を参考にしてください。 ### SKAdNetworkの設定 アドネットワークのSDKがSKAdNetworkに対応している場合、AdNetworkIDをInfo.plistに設定することで、 IDFAが利用できなくても、コンバージョンを追跡することができます。 `SKAdNetworkItems`キーに対して、`SKAdNetworkIdentifier`を追加し、AdNetworkIDを設定します。 ``` SKAdNetworkItems SKAdNetworkIdentifier [ADNETWORK_ID] ``` :::note[Note] `SKAdNetworkIdentifier`の値は将来的に変更されたり、追加される可能性があります。 ::: ![SKAdNetworkItemsの設定](/img/man_sk_adnetwork_items_info.png) 各社のSKAdNetworkIdentifierの一覧は[こちら](https://ad-generation.jp/support/adg-help/Implementation-guide/skadnetworkid)からご覧になれます。 ### デフォルトブラウザ変更 iOS14でデフォルトのブラウザアプリをSafari以外に切り替えた際に正しく遷移できなくなるケースがあるため、info.plistに下記を追加してください。 ```xml LSApplicationQueriesSchemes http https ``` ![デフォルトブラウザ変更](/img/man_ios14_default_browser.png) --- ## AdMobの統合(Mediation) import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # AdMobの統合 このガイドではiOSアプリに`VAMP SDK`のAdMobアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされている`VAMPAdMobAdapter`の最新バージョンはこちらになります。 :::note[Note] アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、広告を表示することはできません。 ::: ## Swift Package Manager(SPM) インストール **注意事項** :::warning SPMとCocoaPodsを併用して実装するケースには対応しておりません。 - CocoaPodsからSPMへ移行する際は、依存関係の競合を防ぐため、**pod deintegrate** コマンドでプロジェクトからCocoaPodsの設定を完全に削除してください。 - **Xcode 16.3** 以降でSPMに対応しています。 - SPMでの配布は、**VAMP v5.3.3** 以降(2025-07-15)から対応しています。 ::: Xcodeのメニューから「File」→「Add Package Dependencies」を選択し、右上の検索窓に以下のURLを入力して追加します。 ### VAMPアダプター インストール AdMobのVAMPアダプターもSPMで配布しています。必要に応じて、以下のリポジトリURLを追加してください。 **AdMob** https://github.com/AdGeneration/VAMP-AdMob-iOS-Adapter.git ## CocoaPodsでアダプターをインストール まずは、CocoaPodsでアダプターをインストールします。 プロジェクトのPodfileに以下の行を追加します。 ``` pod 'VAMPAdmobAdapter' ``` バージョンを指定する場合は以下のようにします。 ``` pod 'VAMPAdmobAdapter', "[VERSION]" ``` ## プロジェクトの設定 AdMob v7.42.0からはAdMobのapp IDをInfo.plistに追加する必要があります。 ```xml GADApplicationIdentifier ca-app-pub-3940256099942544~1458002511 ``` [![AdMobInfoPlist設定](/img/man_admob_info_plist.png)](/img/man_admob_info_plist.png) :::note[Note] 上記のIDはTest IDなので実際のapp IDを使用してください。 もし追加していない場合は以下のメッセージがログに出力され、クラッシュします。 "The Google Mobile Ads SDK was initialized incorrectly." ::: ## 依存するフレームワーク `AdMob SDK`が依存するフレームワークはありません。 ## コンテンツマッピング(App Content URL) **VAMP v5.3.7**(SSCore 3.7.0以降)および **VAMPAdMobAdapter 13.6.2** 以降で対応しています。 `VAMPRequest` の `setContentURL:error:` で設定したApp Content URLは、AdMobメディエーション経由の広告リクエスト時に `GADRequest` の `contentURL`(Googleの[コンテンツマッピング](https://developers.google.com/admob/ios/targeting?hl=ja#content_mapping))にも設定されます。 設定方法や仕様の詳細は[スタートガイドのApp Content URLの設定](/vamp/ios/integration-guide#app-content-urlの設定)を参照してください。 ## VAMPAdMobAdapterの更新履歴 ### VAMPAdMobAdapter 13.9.0 (更新日 2026-08-27) - AdMob SDK 13.9.0 と互換性があります。 - AdMob変更内容(2026-08-26): - スワイプ可能インタースティシャル広告向けの signal collection / rendering API を追加しました。 - `GADSwipeableInterstitialAd` に `+loadWithAdResponseString:completionHandler:` メソッドを追加しました。 - `GADSwipeableInterstitialSignalRequest` クラスを追加しました。 ### VAMPAdMobAdapter 13.8.0 (更新日 2026-08-19) - AdMob SDK 13.8.0 と互換性があります。 - AdMob変更内容(2026-08-17): - メディエーションで custom event ad sources を利用する場合、`GADResponseInfo.loadedAdNetworkResponseInfo.adNetworkClassName` が `GADMAdapterCustomEvents` ではなくカスタムイベントのクラス名を返すようになりました。 - iPad の画面回転時に全画面広告が意図せず閉じられる事象を防ぐため、screen-fit の検証ロジックをリファクタリングしました。 - Ad inspector を無効化する `GADDisableAdInspector` Boolean plist キーを追加しました。 ### VAMPAdMobAdapter 13.7.0 (更新日 2026-08-03) - AdMob SDK 13.7.0 と互換性があります。 - AdMob変更内容(2026-07-22): - `CGSizeFromGADAdSize` 関数を更新し、バックグラウンドスレッドで fluid 広告の幅を計算する際に、キャッシュされた画面の向きではなく portrait の向きをデフォルトとして使用するようになりました。 ### VAMPAdMobAdapter 13.6.2 (更新日 2026-07-22) - AdMob SDK 13.6.0 と互換性があります。 - `VAMPRequest` の `setContentURL:error:` で設定したApp Content URLを `GADRequest.contentURL`(コンテンツマッピング)へ伝播するようになりました(VAMP v5.3.7以降)。 - AdMobの依存パッケージを正しいバージョンに修正しました。 - AdMob変更内容(2026-06-24): - Google Mobile Ads SDK 13.3.0 のアンブレラヘッダーにベータヘッダーファイルが欠落していたことによる Xcode コンパイラ警告を解消しました。 ### VAMPAdMobAdapter 13.5.0 (更新日 2026-06-25) - AdMob SDK 13.5.0 と互換性があります。 - AdMob変更内容: - GADSwipeableInterstitialAd フォーマット向けの API を追加しました(スワイプ可能なインタースティシャル広告はプライベートベータです)。 - 以前にアタッチされたシグナルハンドラと適切に連鎖するようクラッシュレポーターを更新し、クラッシュレポートツールが完全なスタックトレースを取得できるようにしました。 - 広告のプリロード:次にプリロードされる広告のレスポンス情報をキューから削除せずに確認するための adResponseInfoWithPreloadID: メソッドを追加しました。 ### VAMPAdMobAdapter 13.0.0 (更新日 2026-02-09) - AdMob SDK 13.0.0 と互換性があります。 - AdMob変更内容: - 互換性を破る変更を含むメジャーアップデート - 最小デプロイターゲットがiOS 13.0に引き上げ - 以前非推奨だったAPIが削除 - アンカーアダプティブバナーAPIの置き換え(Large版へ) - タイムアウトエラー報告の修正 - iPad環境での特定クラッシュの解決 ### VAMPAdMobAdapter 12.14.0 (更新日 2025-12-22) - AdMob SDK 12.14.0 と互換性があります。 - バグの修正とパフォーマンスの改善を行いました。 ### VAMPAdMobAdapter 12.12.0 (更新日 2025-10-14) - AdMob SDK 12.12.0 と互換性があります。 - Fixed a crash on iOS 15 and lower when setting the scene property on a GADRequest object. - GADRequest オブジェクトでシーン プロパティを設定するときに iOS 15 以前で発生するクラッシュを修正しました。 ### VAMPAdMobAdapter 12.11.0 (更新日 2025-09-18) - AdMob SDK 12.11.0 と互換性があります。 - Bug fixes and performance improvements. - バグ修正とパフォーマンスの改善。 ### Version 12.8.1(Adapter更新日 2025-08-04) - AdMob SDK 12.8.0と互換性があります。 - AdMob変更内容:Expanded support for adjustable window sizes on iOS 26 iPads. Improved handling for cases where SKStoreProductViewControllerDelegate's productViewControllerDidFinish(_:) method is not called. ### Version 12.5.0(Adapter更新日 2025-06-09) - AdMob SDK 12.5.0と互換性があります。 - AdMob変更内容:Made changes to the way the SDK interacts with AVAudioSession that improves compatibility with Unity’s audio engine. ### Version 12.4.0(Adapter更新日 2025-05-27) - AdMob SDK 12.4.0と互換性があります。 - AdMob変更内容:Resolved an issue preventing custom clicks on custom native video ads. ### Version 12.2.0(Adapter更新日 2025-03-17) - AdMob SDK 12.2.0と互換性があります。 - AdMob変更内容:Bug fixes and performance improvements.Updated the minimum supported Xcode version to 16.0. ### Version 11.12.0(2024-12-05) - AdMob SDK 11.12.0と互換性があります。 - AdMob変更内容:Fixed an issue where GADFullScreenContentDelegate methods were not called if the ad object was released before the ad finishes presenting.Open Measurement: Updated to OM SDK 1.5.2. ### Version 11.7.0(2024-08-06) - AdMob SDK 11.7.0と互換性があります。 - AdMob変更内容:Deprecated GADQueryInfo APIs. For generating query information, use +[GADMobileAds generateSignal:completionHandler:] instead.Allowlisted publishers can now use GADRequest.customTargeting to segment mediation groups using custom key-value pairs. ### Version 11.2.0.0(2024-03-18) - AdMob SDK 11.2.0と互換性があります。 - AdMob変更内容:Added support for privacy manifest files. - Improved some response error codes to correctly identify network failures instead of no fills. - Updated the SDK's Info.plist to work around a Swift Package Manager issue on Xcode 15.3. - Ad Inspector: Added support for displaying .plist information and IAB TCF values. ### Version 10.13.0.0(2023-11-13) - AdMob SDK 10.13.0と互換性があります。 - AdMob変更内容:Added the publisherPrivacyPersonalizationState property.Deprecated GADAdFormatUnknown. ### Version 10.10.0.1(2023-10-18) - AdMob SDK 10.10.0と互換性があります。 - VAMPAdMobAdapterのみアップデート ### Version 10.10.0.0(2023-08-31) - AdMob SDK 10.10.0と互換性があります。 - AdMob変更内容:Ad inspector: Added SDK support to display plugin information.Note: The ad inspector interface is scheduled to launch this feature at a later date, which requires a minimum SDK version of 10.10.0.Removed console logs that recommend adding simulator IDs in the testDeviceIdentifiers API. Simulators are already in test mode by default. ### Version 10.9.0.0(2023-08-03) - AdMob SDK 10.9.0と互換性があります。 - AdMob変更内容:Ad inspector: Added SDK support for exporting ad responses.Note: The ad inspector interface is scheduled to launch this feature at a later date,which requires a minimum SDK version of 10.9.0.Fixed audio issue where even if the ad is muted, the audio session would unexpectedly stop the background music when the video ends.Added support for passing an ad unit ID when generating GADQueryInfo. ### Version 10.8.0.0(2023-07-19) - AdMob SDK 10.8.0と互換性があります。 - AdMob変更内容:Ad inspector now displays the error that occurred when the session fails to start.Made minor changes to the way adWillPresentFullScreenContent:, adWillDismissFullScreenContent:, and adDidDismissFullScreenContent: delegate callbacks are handled by delegates for mediated ads. These changes make mediated ads behave more like first-party ads.Third-party SDKs that call adWillPresentFullScreenContent: followed by adDidDismissFullScreenContent: multiple times now trigger multiple callbacks, rather than only for the first set of calls.When third-party full screen ads fail to present, ad:didFailToPresentFullScreenContentWithError: is called instead of adWillPresentFullScreenContent: and adDidDismissFullScreenContent:. ### Version 10.5.0.0(2023-05-16) - AdMob SDK 10.5.0と互換性があります。 - AdMob変更内容:Fixed a memory leak that occurred when creating a GADQueryInfo object. ### Version 10.3.0.0(2023-03-28) - AdMob SDK 10.3.0と互換性があります。 - AdMob変更内容:Bug fixes and performance improvements. ### Version 10.2.0.0(2023-03-16) - AdMob SDK 10.2.0と互換性があります。 - AdMob変更内容:Added an isMuted property to GADVideoController. - AdMob v10からGoogle Mobile Ads SDK バージョン 10.0.0 が広告を配信する iOS の最小バージョンは iOS 12 です。Google Mobile Ads SDK バージョン 10.0.0 にアップグレードしても、iOS 11 および iOS 10 端末のアプリが壊れることはありませんが、これらの端末に広告は配信されません。 ### Version 9.14.0.0(2022-12-12) - AdMob SDK 9.14.0と互換性があります。 - AdMob変更内容:アプリ起動時広告: +loadWithAdUnitID:request:orientation:completionHandler: のサポートが終了し、+loadWithAdUnitID:request:completionHandler: に置き換えられました。アプリ起動時広告を読み込むと、他の全画面フォーマットと一致する、デバイスの現在の向きが想定されるようになりました。アプリ起動時広告にメディエーションのサポートを追加しました。広告インスペクタ: Ad InspectorのUIから広告をリクエストして表示するためのSDK サポートを追加しました。 ### Version 9.13.0.0(2022-11-10) - AdMob SDK 9.13.0と互換性があります。 - AdMob変更内容:ネイティブ広告で、追加のクリック アクションがサポートされるようになりました。バグの修正とパフォーマンスの改善を行いました。 ### Version 9.11.0.0(2022-10-03) - AdMob SDK 9.11.0と互換性があります。 - AdMob変更内容:バグの修正とパフォーマンスの改善を行いました。 ### Version 9.10.0.0(2022-09-13) - AdMob SDK 9.10.0と互換性があります。 - AdMob変更内容:iOS 16 に対応した公式リリース。 iLTV: GADAdNetworkResponseInfo に以下のプロパティを追加しました。 adSourceID adSourceInstanceName adSourceName GADResponseInfo に以下のプロパティを追加しました。 extrasDictionary ### Version 9.9.0.0(2022-08-16) - AdMob SDK 9.9.0と互換性があります。 ### Version 9.8.0.0(2022-08-02) - AdMob SDK 9.8.0と互換性があります。 ### Version 9.6.0.0 - AdMob SDK 9.6.0と互換性があります。 ### Version 9.3.0.0 - AdMob SDK 9.3.0と互換性があります。 ### Version 9.1.0.0 - AdMob SDK 9.1.0と互換性があります。 - **AdMobフレームワークはiOS10以上に対応しています。iOS9以下ではクラッシュしますのでご注意ください。** - **iOS10での広告の配信が停止します Google Mobile AdsSDKバージョン9.0.0がサポートするiOSの最小バージョンはiOS11です。 Google Mobile Ads SDKバージョン9.0.0にアップグレードしても、iOS 10デバイスでアプリが破損することはありませんが、これらのデバイスでは広告は配信されません。** ### Version 8.13.0.0 - AdMob SDK 8.13.0と互換性があります。 ### Version 8.11.0.0 - AdMob SDK 8.11.0と互換性があります。 - サポートOSバージョンをiOS10に変更しました。 ### Version 8.8.0.0 - AdMob SDK 8.8.0と互換性があります。 ### Version 8.6.0.0 - AdMob SDK 8.6.0と互換性があります。 ### Version 8.5.0.0 - AdMob SDK 8.5.0と互換性があります。 ### Version 8.4.0.0 - AdMob SDK 8.4.0と互換性があります。 ### Version 8.2.0.1 - AdMob SDK 8.2.0と互換性があります。 - VAMP SDK v4.1.0.1以降が必要です。 --- ## AppLovinの統合(Mediation) import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # AppLovinの統合 このガイドではiOSアプリに`VAMP SDK`のAppLovinアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされている`VAMPAppLovinAdapter`の最新バージョンはこちらになります。 :::note[Note] アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、広告を表示することはできません。 ::: ## Swift Package Manager(SPM) インストール **注意事項** :::warning SPMとCocoaPodsを併用して実装するケースには対応しておりません。 - CocoaPodsからSPMへ移行する際は、依存関係の競合を防ぐため、**pod deintegrate** コマンドでプロジェクトからCocoaPodsの設定を完全に削除してください。 - **Xcode 16.3** 以降でSPMに対応しています。 - SPMでの配布は、**VAMP v5.3.3** 以降(2025-07-15)から対応しています。 ::: Xcodeのメニューから「File」→「Add Package Dependencies」を選択し、右上の検索窓に以下のURLを入力して追加します。 #### VAMPアダプター インストール AppLovinのVAMPアダプターもSPMで配布しています。必要に応じて、以下のリポジトリURLを追加してください。 **AppLovin** https://github.com/AdGeneration/VAMP-AppLovin-iOS-Adapter.git ## CocoaPodsでアダプターをインストール まずは、CocoaPodsでアダプターをインストールします。 プロジェクトのPodfileに以下の行を追加します。 ``` pod 'VAMPAppLovinAdapter' ``` バージョンを指定する場合は以下のようにします。 ``` pod 'VAMPAppLovinAdapter', "[VERSION]" ``` ## 依存フレームワーク CocoaPods/SPMの依存解決により個別追加は不要です。 ## 更新履歴 ### VAMPAppLovinAdapter 13.6.400(2026-08-19) - AppLovin SDK 13.6.4(2026-08-11)と互換性があります。 - 更新内容:Add support for user information parameters. / Remove VK Ad Network (MyTarget) adapter detection. / Various improvements and bug fixes. - ユーザー情報パラメータのサポートを追加。VK Ad Network (MyTarget) アダプター検出を削除。さまざまな改善とバグ修正。 ### VAMPAppLovinAdapter 13.6.300(2026-06-29) - AppLovin SDK 13.6.3(2026-06-03)と互換性があります。 - 更新内容:Minor fixes and improvements. - 軽微な修正と改善。 ### VAMPAppLovinAdapter 13.5.0(2025-10-22) - AppLovin SDK 13.5.0(2025-10-21)と互換性があります。 - 更新内容:Various improvements and bug fixes. - さまざまな改善とバグ修正。 ### VAMPAppLovinAdapter 13.3.101 - AppLovin SDK 13.3.1と互換性があります。 - 更新内容(2025-06-14):Firebase SDK 使用時に iOS 15 以前を実行しているデバイスで発生するクラッシュを修正しました - - #459 Xcode 16.0 でビルドされました。 ### VAMPAppLovinAdapter 13.2.0 - AppLovin SDK 13.2.0と互換性があります。 - 更新内容(2025-04-01):Set minimum OS version to 12.0. - Deprecate public APIs that take in an ALSdk argument. - Delete old SDK initialization APIs. - Remove catching of exceptions in ad callbacks. - Adaptive banner updates to support more networks, please check out our - latest docs for details. - Update MaxAdView / MAAdView public API to use configuration object to - configure adaptive ad views. - Fix debug user geography not passed to Google UMP when set via init APIs. - Treat test users as non-gdpr if debugUserGeography is set to other. - Fix SKOverlay being displayed permanently after a full screen ad is displayed. - Fix EXC_BREAKPOINT -[ALWKWebView loadHTMLString:withBaseURL:]. - Fix OMIDApplovinLightJSExecutor crash. - Fix -[ALHTTPRequest .cxx_destruct] crash. ### VAMPAppLovinAdapter 13.1.0 - AppLovin SDK 13.1.0と互換性があります。 - 更新内容(2025-01-27):Update -[ALSdk availableMediatedNetworks:] API to include init status.Deprecate -[MAAd adReviewCreativeIdentifier] API.Remove deprecated Terms flow.Fix app audio session deactivating on ad close.Various memory leak and crash fixes. ### VAMPAppLovinAdapter 13.0.100 - AppLovin SDK 13.0.1と互換性があります。 - 更新内容(2024-10-27):Remove terms flow. ### VAMPAppLovinAdapter 12.5.0.0 - AppLovin SDK 12.5.0と互換性があります。 - 更新内容(2024-05-16):Fix +[ALLogger isVerboseForSdk:] crash.Various fixes to the new init APIs.Removed the settings property from ALSdkInitializationConfiguration. Please use ALSdk.shared.settings to modify the SDK settings. ### VAMPAppLovinAdapter 12.4.1.0 - AppLovin SDK 12.4.1と互換性があります。 - 更新内容(2024-04-05):Update SDK to allow Apple App Store Connect to be able to detect privacy manifest correctly. - SDK を更新して、Apple App Store Connect がプライバシー マニフェストを正しく検出できるようにします。 ### VAMPAppLovinAdapter 12.3.0.0 - AppLovin SDK 12.3.0と互換性があります。 - 更新内容(2024-03-04):Add new improved SDK Init APIs to enforce SDK initialization with all necessary parameters.Add support for disabling all user-level logs #294. Fix ALConnectionManager crashes. --- ## メディエーション(Mediation) import VAMPMediationTable from '@site/src/components/SDKVersions/VAMPMediationTable'; # メディエーション メディエーションの統合方法についてのガイド ---- VAMPメディエーションは、VAMPの他にサードパーティのアドネットワークの広告を配信できるようにする機能です。 VAMPメディエーションは、複数のアドネットワークに広告リクエストを送信し、最適な広告ネットワークを表示し、広告掲載率・収益を最大化します。 ## 前提条件 メディエーションを統合する前に、アプリに`VAMP SDK`を導入している必要があります。 `VAMP SDK`の導入方法については、[こちら](/vamp/ios/integration-guide)をご確認ください。 また、使用する広告フォーマットも実装済みである必要があります。 各広告フォーマットの実装については、[こちら](/vamp/ios/ad-format)をご確認ください。 --- ## LINE広告ネットワークの統合(Mediation) import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # LINE広告ネットワークの統合 このガイドではiOSアプリに`VAMP SDK`のLINE広告ネットワークのアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされている`VAMPLINEAdsAdapter`の最新バージョンはこちらになります。 :::note[Note] アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、広告を表示することはできません。 ::: ## Swift Package Manager(SPM)インストール **注意事項** :::warning SPMとCocoaPodsを併用して実装するケースには対応しておりません。 - CocoaPodsからSPMへ移行する際は、依存関係の競合を防ぐため、**pod deintegrate** コマンドでプロジェクトからCocoaPodsの設定を完全に削除してください。 - LINE広告ネットワークのVAMPアダプターは **VAMPLINEAdsAdapter v3.0.100**(2026-05-26)からSPMでの配布に対応しています。 ::: Xcodeのメニューから「File」→「Add Package Dependencies」を選択し、右上の検索窓に以下のURLを入力して追加します。 #### VAMPアダプターインストール LINE広告ネットワークのVAMPアダプターもSPMで配布しています。以下のリポジトリURLを追加してください。LINE広告ネットワークSDK(FiveAd)はSPMの依存解決により自動的に導入されるため、個別のダウンロードは不要です。 **LINEAds** https://github.com/AdGeneration/VAMP-LINEAds-iOS-Adapter.git ## CocoaPodsでアダプターをインストール まずは、CocoaPodsでアダプターをインストールします。 プロジェクトのPodfileに以下の行を追加します。 ``` pod 'VAMPLINEAdsAdapter' ``` バージョンを指定する場合は以下のようにします。 ``` pod 'VAMPLINEAdsAdapter', "[VERSION]" ``` ## 依存するフレームワーク `LINE広告ネットワーク SDK`は以下のフレームワークに依存しています。 - AdSupport - AVFoundation - CoreMedia - CoreTelephony - SystemConfiguration - AudioToolbox - WebKit - StoreKit ## VAMPLINEAdsAdapter の更新履歴 ### Version v3.1.0 (2026-08-26) - [LINE広告ネットワークSDK v3.1.0](https://adsnetwork-docs.linebiz.com/fivesdk-ios/release-note.html)と互換性があります。 - LINE広告ネットワークSDK 変更内容(2026-08-24): - FADConfigのappId以外の全ての設定を非推奨化しました。これらの設定の代わりにFADAdSlotConfigを利用してください。 - FADConfig.isTestを非推奨化し、FADAdSlotConfig.setAdTestModeEnabled:を追加しました。 - FADConfig.maxAdAgeRatingを非推奨化し、FADAdSlotConfig.setMaxAdAgeRating:を追加しました。 - FADConfig.needChildDirectedTreatmentを非推奨化し、FADAdSlotConfig.setChildDirected:を追加しました。 - FADConfig.loadFromInfoDictionaryを非推奨化しました。 - FADConfig.enableSoundByDefault:を非推奨化しました。音声設定はFADAdInterface.enableSound:またはサーバー側設定の利用を推奨します。 - FADSettings.enableSound / isSoundEnabledを削除しました。 - FADNeedGdprNonPersonalizedAdsTreatmentを非推奨化しました。 - メディエーション情報を登録できるAPI FADAdSlotConfig.setMediationName:version:を追加しました。 - FADCreativeTypeをNS_ENUMとして利用できるよう整理しました。Swiftでは.movieなどのenum表現を利用できます。 - 長期間未使用だった一部の古いエラーコード定義を削除しました。 - FADErrorCodeに関する旧来の互換定数について非推奨化を行いました。 - FADAdLoader.collectSignalWithConfig:withSignalCallback:を非推奨化しました。代わりとして、collectSignalWithSlotId:withSignalCallback:の利用を推奨します。 - 広告ロード時のエラー発生を抑制するため、内部ロジックを改善しました。 ### Version v3.0.100 (2026-02-19) - [LINE広告ネットワークSDK v3.0.1](https://adsnetwork-docs.linebiz.com/fivesdk-ios/release-note.html)と互換性があります。 - SDKの実装にSwiftを利用するようになりました(Swift 5.9 / Xcode 15系以降が必要)。 - 公開APIの変更はありません。 ### Version v2.9.2025111900 (2026-01-05) - サンプルアプリの実装方法を変更しました。 - [LINE広告ネットワークSDK v2.9.20251119](https://adsnetwork-docs.linebiz.com/fivesdk-ios/release-note.html)と互換性があります。 - 内部ロジックを改善しました。 ### Version v2.9.2025093000 (2025-10-02) - サンプルアプリの実装方法を変更しました。 - [LINE広告ネットワークSDK v2.9.20250930](https://adsnetwork-docs.linebiz.com/fivesdk-ios/release-note.html)と互換性があります。 - 軽微な修正を実施しました。 ### Version v2.9.2025082500 (2025-09-01) - [LINE広告ネットワークSDK v2.9.20250825](https://adsnetwork-docs.linebiz.com/fivesdk-ios/release-note.html)と互換性があります。 - 内部ロジックを改善しました。 ### Version v2.9.2025080500 (2025-08-07) - LINE広告ネットワークSDK v2.9.20250805と互換性があります。 - 軽微な修正を実施しました。 ### Version v2.9.2025050700 (2025-05-07) - LINE広告ネットワークSDK v2.9.20250507と互換性があります。 - LINE広告ネットワークSDK 更新内容:サポートする下限iOSバージョンを15.0に引き上げました。内部ロジックを改善しました。 ### Version v2.9.2024110600 (2024-11-12) - LINE広告ネットワークSDK v2.9.20241106と互換性があります。内部ロジックを改善しました。 ### Version 2.8.2024082700(2024-08-27) - LINE広告ネットワークSDK 2.8.20240827と互換性があります。LINE広告ネットワーク更新内容:フルスクリーン広告の内部ロジックを改善しました。 ### Version 2.7.20240411.0(2024-04-18) - LINE広告ネットワークSDK 2.7.20240411と互換性があります。LINE広告ネットワーク更新内容:Privacy Manifest関連の対応で一部実装を修正しました。 ### Version 2.7.20240318.0(2024-03-18) - LINE広告ネットワーク SDK 2.7.20240318と互換性があります。 - FADInterstitialおよびFADVideoRewardの従来のshowAPIを非推奨化しました。代わりにUIViewControllerを引数としてとるshowWithViewController(Swiftの場合は show)を提供するようにしました。 - versionAPIを非推奨化しました。代わりにsemanticVersionAPIをご利用ください。 - SystemConfiguration frameworkへの依存を削除し、代わりにNetwork frameworkへの依存を追加しました。 - SDK初回起動時に、SDK初期化直後にloadAdAsyncを呼ぶとBadSlotIdエラーで失敗することがある問題を修正しました。 - カスタムプロダクトページに対応しました。 - 内部ロジックを改善しました。 ### Version 2.7.20240214.0(2024-03-12) - LINE広告ネットワーク SDK 2.7.20240214と互換性があります。 - CocoaPodsによってSDKを導入している場合にPrivacy Manifestが正しく認識されるようになりました。 ### Version 2.7.20240126.0(2024-02-01) - LINE広告ネットワーク SDK 2.7.20240126と互換性があります。 - Privacy Manifest関連の対応を実施しました。2024年春までに最新バージョンへのアップデートをお願いいたします。 ### Version 2.7.20231115.0(2023-12-25) - LINE広告ネットワーク SDK 2.7.20231115と互換性があります。 - 広告イベントを取得するAPIを変更しました。 - 動画リワード広告でリワードを付与するAPIを変更しました。 - 内部ロジックを改善しました。 - 詳しくはマイグレーションガイドをご確認ください: [iOS FiveSDK導入ガイド - 20231115広告イベント取得方法の変更](https://adsnetwork-docs.linebiz.com/fivesdk-ios/migration-guide/20231115-new-ad-events.html) ### Version 2.6.20230609.1(2023-10-18) - LINE広告ネットワーク SDK 2.6.20230609と互換性があります。 - VAMPLINEAdsAdapterのみアップデート ### Version 2.6.20230609.0(2023-06-13) - LINE広告ネットワーク SDK 2.6.20230609と互換性があります。 - LINEAds修正内容(2023-06-09):Xcode14以降での環境にのみ対応。内部ロジックを改善しました。 ### Version 2.6.20230215.0(2023-01-31) - LINE広告ネットワーク SDK 2.6.20230215と互換性があります。 - LINEAds修正内容(2023-02-15):Xcode14以降での環境にのみ対応。内部ロジックを改善しました。 ### Version 2.5.20221226.0(2023-01-31) - LINE広告ネットワーク SDK 20221226と互換性があります。 - LINEAds修正内容(2022-12-26):Xcode14以降での環境にのみ対応。サポートする下限iOSバージョンを11に引き上げました。非推奨APIのFADDelegateを削除しました。移行が済んでいない方はマイグレーションガイドを参考に移行してください。内部ロジックを改善しました。 ### Version 2.4.20220722.0(2022-08-01) - LINE広告ネットワーク SDK 20220722と互換性があります。 ### Version 2.4.20220630.0 - LINE広告ネットワーク SDK 20220630と互換性があります。 ### Version 2.4.20220225.0 - LINE広告ネットワーク SDK 20220225と互換性があります。 ### Version 2.4.20211028.0 - LINE広告ネットワーク SDK 20211028と互換性があります。 ### Version 2.4.20211004.0 - LINE広告ネットワーク SDK 20211004と互換性があります。 ### Version 2.3.20210524.0 - LINE広告ネットワーク SDK 20210524と互換性があります。 ### Version 2.3.20210326.1 - LINE広告ネットワーク SDK 20210326と互換性があります。 - CocoaPodsに対応しました。 - サポートOSをiOS10以降に変更しました。 ### Version 20210122.0 - LINE広告ネットワーク SDK 20210122と互換性があります。 - VAMP SDK v4.1.0.1以降が必要です。 --- ## maioの統合(Mediation) import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # maioの統合 このガイドではiOSアプリに`VAMP SDK`のmaioアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされている`VAMPMaioAdapter`の最新バージョンはこちらになります。 :::note[Note] アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、広告を表示することはできません。 ::: ## Swift Package Manager(SPM)インストール **注意事項** :::warning SPMとCocoaPodsを併用して実装するケースには対応しておりません。 - CocoaPodsからSPMへ移行する際は、依存関係の競合を防ぐため、**pod deintegrate** コマンドでプロジェクトからCocoaPodsの設定を完全に削除してください。 - **Xcode 16.3** 以降でSPMに対応しています。 - SPMでの配布は、**VAMP v5.3.3** 以降(2025-07-15)から対応しています。 ::: Xcodeのメニューから「File」→「Add Package Dependencies」を選択し、右上の検索窓に以下のURLを入力して追加します。 #### VAMPアダプターインストール maioのVAMPアダプターもSPMで配布しています。必要に応じて、以下のリポジトリURLを追加してください。 **maio** https://github.com/AdGeneration/VAMP-maio-iOS-Adapter.git ## CocoaPodsでアダプターをインストール まずは、CocoaPodsでアダプターをインストールします。 プロジェクトのPodfileに以下の行を追加します。 ``` pod 'VAMPMaioAdapter' ``` バージョンを指定する場合は以下のようにします。 ``` pod 'VAMPMaioAdapter', "[VERSION]" ``` ## 依存フレームワーク CocoaPods/SPMの依存解決により個別追加は不要です。 ## VAMPMaioAdapterの更新履歴 ### Version 2.2.200(2026-08-17) - maio SDK 2.2.2と互換性があります。 - maio変更内容(2026-08-10):バナー広告がViewHierarchyに追加された状態で画面外に移動した場合に、クラッシュする場合がある問題を修正しました。 ### Version 2.2.100(2026-02-26) - maio SDK 2.2.1と互換性があります。 - maio変更内容: - v2.2.0(2025-09-18):バナー広告に対応 - v2.2.1(2026-02-19):広告を読み込んでから時間が経過した場合に、システム命令によって広告に不具合が発生する問題を改善 ### Version 2.1.600(2025-02-13) - maio SDK 2.1.6(2024-06-13更新)と互換性があります。 - maio更新内容:バックグラウンドスレッドにて広告を初期化した際、クラッシュしてしまう問題を修正しました。バックグラウンドスレッドにてインスタンスを破棄をした際、クラッシュしてしまう問題を修正しました。 ### Version 2.1.501(2024-08-27) - Store審査で指摘を受けたPrivacy Manifestを修正。maio SDKは変更なし。 - maio SDK 2.1.5(2024-06-13更新)と互換性があります。 ### Version 2.1.500(2024-07-25) - maio SDK 2.1.5(2024-06-13更新)と互換性があります。 - 広告の読み込みとインスタンスの破棄を細かく繰り返した時、稀にクラッシュするおそれがあった問題を修正しました。動画広告の視聴後、稀にクラッシュする場合がある現象を修正しました。 ### Version 2.1.4.0(2024-03-18) - maio SDK 2.1.4(2024-03-14更新)と互換性があります。 - maio を組み込んだアプリケーションで「プライバシーレポートの生成」 を行った場合に、maio起因のエラーが発生しないようにしました。 ### Version 2.1.2.0(2024-01-22) - maio SDK 2.1.2(2024-01-19更新)と互換性があります。 - iOS 17において、まれにアプリ内ストアを閉じたあと操作できなくなる場合がある現象を修正しました。 - 特定の状況下において、広告ロード時にクラッシュする場合がある問題を修正しました。 ### Version 2.1.1.0(2023-11-07) - maio SDK 2.1.1と互換性があります。 - maio SDK v2のメジャーアップデート対応。Supported: iOS 14.0+ (Xcode 14.1+)。※古いiOSバージョン対応が必要な場合は1.6系を利用ください。 - 更新内容(2023-10-11):MaioVersion が適切な値を返すように修正しました。 ### Version 1.6.3.2(2023-10-18) - maio SDK 1.6.3と互換性があります。 - VAMPmaioAdapterのみアップデート ### Version 1.6.3.1(2023-07-13) - maio SDK 1.6.3と互換性があります。 ### Version 1.6.3.0(2022-11-07) - maio SDK 1.6.3と互換性があります。 - maio変更内容2022年10月28日:排他制御の問題で、一部予期せぬクラッシュが発生する問題に対応しました。 ### Version 1.6.2.0 - maio SDK 1.6.2と互換性があります。 ### Version 1.6.1.0 - maio SDK 1.6.1と互換性があります。 ### Version 1.6.0.1 - maio SDK 1.6.0と互換性があります。 ### Version 1.6.0.0 - maio SDK 1.6.0と互換性があります。 - VAMP SDK v4.3.0以上が必要です。 ### Version 1.5.8.1 - maio SDK 1.5.8と互換性があります。 - VAMP SDK v4.3.0以上v4.4.0未満が必要です。 ### Version 1.5.6.0 - maio SDK 1.5.6.0と互換性があります。 - VAMP SDK v4.1.0.1以降が必要です。 --- ## Pangleの統合(Mediation) import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # Pangleの統合 このガイドではiOSアプリに`VAMP SDK`のPangleアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされている`VAMPPangleAdapter`の最新バージョンはこちらになります。 :::note[Note] アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、広告を表示することはできません。 ::: ## Swift Package Manager(SPM) インストール **注意事項** :::warning SPMとCocoaPodsを併用して実装するケースには対応しておりません。 - CocoaPodsからSPMへ移行する際は、依存関係の競合を防ぐため、**pod deintegrate** コマンドでプロジェクトからCocoaPodsの設定を完全に削除してください。 - **Xcode 16.3** 以降でSPMに対応しています。 - SPMでの配布は、**VAMP v5.3.3** 以降(2025-07-15)から対応しています。 ::: Xcodeのメニューから「File」→「Add Package Dependencies」を選択し、右上の検索窓に以下のURLを入力して追加します。 #### VAMPアダプターインストール PangleのVAMPアダプターもSPMで配布しています。必要に応じて、以下のリポジトリURLを追加してください。 **Pangle** https://github.com/AdGeneration/VAMP-Pangle-iOS-Adapter.git ## CocoaPodsでアダプターをインストール まずは、CocoaPodsでアダプターをインストールします。 プロジェクトのPodfileに以下の行を追加します。 ``` pod 'VAMPPangleAdapter' ``` バージョンを指定する場合は以下のようにします。 ``` pod 'VAMPPangleAdapter', "[VERSION]" ``` ## プロジェクトの設定 プロジェクトplistファイルで`App Transport Security Settings`を追加するには、まず左側の展開矢印をクリックし、さらに右側のプラスマークをクリックしてAllow Arbitrary Loadsオプションを追加し、値をYESに設定します。 ![App Transport Security Settings](/img/man_app_tracking_security_settings.png) :::note[Note] Pangle SDK APIは全HTTPSをサポートしていますが、広告主のクリエイティブが非HTTPSの場合もあります。 ::: Source Codeで設定する場合は、以下を記述してください。 ```xml NSAppTransportSecurity NSAllowsArbitraryLoads ``` ## 依存するフレームワーク `Pangle SDK`は以下のフレームワークに依存しています。 - StoreKit.framework - MobileCoreServices.framework - WebKit.framework - MediaPlayer.framework - CoreMedia.framework - AVFoundation.framework - CoreTelephony.framework - CoreLocation.framework - SystemConfiguration.framework - AdSupport.framework - CoreMotion.framework - Accelerate.framework - libresolv.9.tbd - libc++.tbd - libz.tbd - libsqlite3.tbd - libxml2.tbd ## VAMPPangleAdapterの更新履歴 ### Version 8.2.10000(2026-08-18) - Pangle SDK 8.2.1.0と互換性があります。 - Pangle変更内容(2026-08-14): - クラッシュ修正: `-[PAGObserverProxy removeSelfObserveringIredObject:]`, `-[PAGObserveredDeallocListener dealloc]` ### Version 8.2.900(2026-08-07) - Pangle SDK 8.2.0.9と互換性があります。 - Pangle変更内容(2026-08-06): - ランディングページのスタイルを改善 - マルチスレッド問題を修正: `-[PAGYYClassMethodInfo initWithMethod:]`, `+[NSString stringWithUTF8String:]` - クラッシュ修正: `-[PAGDatabase PAGTo_NowAre:fields:]`, `-[PAGDatabase PAGP1_MustIdx]` ### Version 8.2.800(2026-08-04) - Pangle SDK 8.2.0.8と互換性があります。 - Pangle変更内容(2026-07-31): - クリックURLトラッキングの信頼性を向上 - media_ext データ取得ロジックの最適化 - OOMクラッシュ緩和のためのメモリ使用量削減: `+[PAGCypherTool PAGDic_R2Line:withKey:prefixString:]`, `-[NSData(NSData) _base64EncodingAsString:withOptions:]` - 広告レンダリングとUIスタイルの改善 ### Version 8.2.700(2026-08-04) - Pangle SDK 8.2.0.7と互換性があります。 - Pangle変更内容(2026-07-27): - データベースパフォーマンスの最適化 - スタイルの最適化 - リクエスト保護 - 断続的に発生する不正なリダイレクトの問題を修正 - 特定のシナリオで発生する音声中断を修正 - クラッシュ修正: `+[UIImage pag_compatImageNamed]`, `+[PAGLInterstitialAd loadAdWithSlotID:request:completionHandler:]`, `-[PAGEventTracker _checkIfNeedSendWhenSaveSuccessWithWaitingCount:isRealTime:]`, `+[PAGCypherTool _encryptData:error:]` ほか ### Version 8.1.10100(2026-07-16) - Pangle SDK 8.1.1.1と互換性があります。 - Pangle変更内容(2026-07-02): - 断続的に発生する不正なリダイレクトの問題を修正 ### Version 8.1.900(2026-06-23) - Pangle SDK 8.1.0.9と互換性があります。 - Pangle変更内容(2026-06-18): - 特定のシナリオで発生する音声中断を修正 - クラッシュ修正: `+[UIImage pag_compatImageNamed]`, `+[PAGLInterstitialAd loadAdWithSlotID:request:completionHandler:]`, `-[PAGEventTracker _checkIfNeedSendWhenSaveSuccessWithWaitingCount:isRealTime:]`, `+[PAGCypherTool _encryptData:error:]` ### Version 8.0.10000(2026-06-03) - Pangle SDK 8.0.1.0と互換性があります。メジャーバージョンアップ(7.x → 8.x)。 - Pangle変更内容: - クラッシュ修正: `'UIApplicationInvalidInterfaceOrientation'`(`[PAGEasyInteractionViewController shouldAutorotate]`) - クラッシュ修正: `+[PAGAPIClient PAGTmp_HopoLd:slotParams:extraParams:reqType:]`, `-[PAGDevice dictionaryValue]` - クラッシュ修正: `-[PAGWebViewController webViewWebContentProcessDidTerminate:]`, `-[WKWebView reload]` - クラッシュ修正: `+[NSJSONSerialization(PAGSafeSerializaiton) pag_dataJsonSerializationWithObject:options:error:]` - クラッシュ修正: `-[PAGLOTImageCacheImp setImage:forKey:]` - 例外検知・レポートの改善 - WebView 再利用機構の最適化 - スタイルの最適化 ### Version 7.9.800(2026-03-23) - App Open Ads(アプリ起動時広告)対応(Xcode 26.1〜) - Pangle SDK 7.9.0.8と互換性があります。 - Pangle変更内容: - クラッシュ修正: `-[PAGPurePlayableLoadingViewController .cxx_destruct]` - ランディングページカウントダウンの最適化 - スタイルの最適化 ### Version 7.9.600(2026-02-12) - Pangle SDK 7.9.0.6と互換性があります。 - Pangle変更内容(2026-02-05): - IABメニューバーのダークモード対応 - プレイヤーログの追加 - Deprecated API: `getBiddingToken:` → `getBiddingTokenWithRequest:completion:` を使用 - クラッシュ修正: `-[__NSURLSessionLocal _downloadTaskWithTaskForClass:]`, `-[PAGRewardedVideoPreloader PAGPos_BeNULL:adSlotAdType:success:failure:]` - スタイルの最適化 - ランディングページのクリック領域の最適化 - JSONシリアライゼーション保護 --- ## UnityAdsの統合(Mediation) import VAMPNetworkDetailTable from '@site/src/components/SDKVersions/VAMPNetworkDetailTable'; # UnityAdsの統合 このガイドではiOSアプリに`VAMP SDK`のUnityAdsアダプターを導入する方法について説明します。 ## 最新のアダプター 現在リリースされている`VAMPUnityAdsAdapter`の最新バージョンはこちらになります。 :::note[Note] アダプターによってサポートされているOSバージョンでも、VAMP SDKによってサポートされているOSバージョンでなければ、広告を表示することはできません。 ::: ## Swift Package Manager(SPM)インストール **注意事項** :::warning SPMとCocoaPodsを併用して実装するケースには対応しておりません。 - CocoaPodsからSPMへ移行する際は、依存関係の競合を防ぐため、**pod deintegrate** コマンドでプロジェクトからCocoaPodsの設定を完全に削除してください。 - **Xcode 16.3** 以降でSPMに対応しています。 - SPMでの配布は、**VAMP v5.3.3** 以降(2025-07-15)から対応しています。 ::: Xcodeのメニューから「File」→「Add Package Dependencies」を選択し、右上の検索窓に以下のURLを入力して追加します。 ### VAMPアダプターインストール UnityAdsのVAMPアダプターもSPMで配布しています。必要に応じて、以下のリポジトリURLを追加してください。 **UnityAds** https://github.com/AdGeneration/VAMP-UnityAds-iOS-Adapter.git ## CocoaPodsでアダプターをインストール まずは、CocoaPodsでアダプターをインストールします。 プロジェクトのPodfileに以下の行を追加します。 ``` pod 'VAMPUnityAdsAdapter' ``` バージョンを指定する場合は以下のようにします。 ``` pod 'VAMPUnityAdsAdapter', "[VERSION]" ``` ## 依存するフレームワーク `UnityAds SDK`は以下のフレームワークに依存しています。 - CFNetwork ## VAMPUnityAdsAdapter の更新履歴 ### Version 4.20.0 (2026-08-20) - UnityAds SDK 4.20.0と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/en-us/grow/ads/changelog) - 4.20.0(2026-08-14): 広告読み込みの信頼性と全体的なパフォーマンスを改善。前回の広告サイクルで App Store のプロダクトシートが開いたままの状態で表示した際のクラッシュを修正、その他の安定性の改善 ### Version 4.19.0 (2026-07-16) - UnityAds SDK 4.19.0と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/en-us/grow/ads/changelog) - 4.19.0(2026-06-26): バグ修正と安定性の改善 ### Version 4.18.100 (2026-06-29) - UnityAds SDK 4.18.1と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/en-us/grow/ads/changelog) - 4.18.1(2026-05-28): まれに発生するクラッシュを修正 ### Version 4.16.500 (2026-01-15) - UnityAds SDK 4.16.5と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/en-us/grow/ads/changelog) - 4.16.5(2025-12-04): 変更無し - 4.16.4(2025-11-14): iOS の IAP イベント処理改善 - 4.16.2(2025-10-02): offerwall SDK 既存導入アプリに offerwall 広告を有効化 ### Version 4.16.100 (2025-09-04) - [UnityAds 4.16.1 (2025-08-13)の変更内容](https://docs.unity.com/ads/en-us/manual/Changelog) - Reduced Unity Ads SDK initialization time. ### Version 4.16.0(2025-07-28) - UnityAds SDK 4.16.0と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog)(2025-07-23)Upgraded the minimum Target iOS version to 13. ### Version 4.15.0(2025-06-30) - UnityAds SDK 4.15.0と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog)(2025-05-28)Added a new getToken API that supports ad formats. Providing an ad format optimizes ad loading processes for faster ad delivery. - Refined Show error message to improve consistency across mediation error messaging. - Improved asset memory usage. - Fixed behavior of error message Cannot show the ad while another is already being shown, which appeared when no ads were showing。 ### Version 4.14.200(2025-05-12) - UnityAds SDK 4.14.2と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog)(2025-04-16)Added a safeguard to prevent an issue affecting acquisition improvement in some iOS apps.Fixed an issue affecting banner error reporting. ### Version 4.13.200(2025-02-26) - UnityAds SDK 4.13.2と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog)(2025-02-26):Optimized ad impression opportunities in some scenarios. ### Version 4.13.1(2025-02-13) - UnityAds SDK 4.13.1と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog)(2025-01-29):Fixed framework warnings related to the UnityAdsCommon.h file in the Unity Ads framework.Fixed an issue where the initialization callback would not fire when calling initialization multiple times. ### Version 4.13.0(2025-01-23) - UnityAds SDK 4.13.0と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog)(2024-11-21):Fixed an issue that could cause a crash when changing the device mute status.Standardized metric names to simplify reporting complexity. ### Version 4.12.500(2024-12-11) - UnityAds SDK 4.12.5と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog)(2024-11-21):Fixed an issue to improve internal counters. Updated the location of the iOS cache folder. ### Version 4.12.300(2024-09-26) - UnityAds SDK 4.12.3と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog)(2024-09-20):Added a fix for some mobile devices which included an incorrect User Agent when making requests.Fixed a crash that sometimes occurred when calling getSharedSessionId.Fixed a crash that sometimes occurred when sending some diagnostics metrics.Fixed a crash that sometimes occurred when detecting a mute state during playbacks. ### Version 4.12.200(2024-08-19) - UnityAds SDK 4.12.2と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog)(2024-08-06):Fixed an issue that could sometimes cause the Show method to report a timeout even after a successful display of an ad.Fixed the user agent string to report correctly when some tablets were used in desktop mode.Fixed an issue where the ad display orientation would not update from the device leading to incorrect end card orientations. ### Version 4.12.101(2024-07-29) - UnityAds SDK 4.12.1と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog#Version_4.12.1_-_released_2024-07-04)(2024-07-04):Added additional network metrics to improve downstream performance.Extended Apple podspec to cover additional use cases. ### Version 4.10.0.0(2024-03-27) - UnityAds SDK 4.10.0と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog#Version_4.10_-_released_2024-03-25)(2024-03-25):Added support for the Apple Privacy Manifest update to ensure publisher compliance with new App Store submission requirements.Fixed a crash that occurred when fetching token during initialization.Fixed an issue that occurred when network requests retry and the server responds with an error. ### Version 4.9.2.0(2023-12-20) - UnityAds SDK 4.9.2と互換性があります。 - [UnityAds変更内容](https://docs.unity.com/ads/en-us/manual/Changelog#Version_4.9.2_-_released_2023-11-08)(2023-11-08):Fixed an issue when building with Xcode 15 and targeting iOS versions below 12. - ※Xcode15でのビルドが必要となります。Xcode14でビルドする場合は、UnityAdsアダプターv4.9.1.1以下をご利用ください。 ### Version 4.9.1.1(2023-10-18) - UnityAds SDK 4.9.1と互換性があります。 - VAMPUnityAdsAdapterのみアップデート ### Version 4.9.1.0(2023-10-16) - UnityAds SDK 4.9.1と互換性があります。 - [UnityAds変更内容](https://github.com/Unity-Technologies/unity-ads-ios/releases/tag/4.9.1)(2023-10-13):Increased banner demand.Fixed a crash due to unimplemented delegate methods which should have been optional.Fixed an issue with diagnostic metrics so they can now be sent. ### Version 4.7.1.0(2023-05-10) - UnityAds SDK 4.7.1と互換性があります。 - [UnityAds変更内容](https://github.com/Unity-Technologies/unity-ads-ios/releases/tag/4.7.1)(2023-05-10):Added a safety check for viewId to prevent exceptions that occur when deallocating a banner object. ### Version 4.6.1.1(2023-03-22) - UnityAds SDK 4.6.1と互換性があります。 - [UnityAds変更内容](https://github.com/Unity-Technologies/unity-ads-ios/releases/tag/4.6.1)(2023-03-16):Restored Xcode 13 support. ### Version 4.6.0.0(2023-02-28) - UnityAds SDK 4.6.0と互換性があります。 - [UnityAds変更内容](https://github.com/Unity-Technologies/unity-ads-ios/releases/tag/4.6.0)(2023-02-25):Updated the support library version to maintain demand performance.Optimized Swift performance.Improved Banner life cycle performance. ### Version 4.5.0.0(2022-12-22) - UnityAds SDK 4.5.0と互換性があります。 - [UnityAds変更内容](https://github.com/Unity-Technologies/unity-ads-ios/releases/tag/4.5.0)(2022-12-20):Reduced number of requests that take place during initialization.Adjust request retry logic under certain known error conditions ### Version 4.4.1.0(2022-10-06) - UnityAds SDK 4.4.1と互換性があります。 - UnityAds変更内容(2022-10-06):[Feature]Generate game session id and save to storage [Bugfix]Add sdkVersion and sdkVersionName to minimal device reader.Fix a build error when using SDK public api via swift ### Version 4.4.0.0(2022-09-07) - UnityAds SDK 4.4.0と互換性があります。 ### Version 4.3.0.0(2022-08-04) - UnityAds SDK 4.3.0と互換性があります。 ### Version 4.2.1.0 - UnityAds SDK 4.2.1と互換性があります。 ### Version 4.1.0.0 - UnityAds SDK 4.1.0と互換性があります。 ### Version 4.0.1.0 - UnityAds SDK 4.0.1と互換性があります。 ### Version 4.0.0.0 - UnityAds SDK 4.0.0と互換性があります。 ### Version 3.7.5.1 - UnityAds SDK 3.7.5と互換性があります。 ### Version 3.7.5.0 - UnityAds SDK 3.7.5と互換性があります。 - サポートOSバージョンをiOS10に変更しました。 ### Version 3.7.1.0 - UnityAds SDK 3.7.1と互換性があります。 ### Version 3.7.0.0 - UnityAds SDK 3.7.0と互換性があります。 - VAMP SDK v4.1.0.1以降が必要です。 --- ## 実装のテスト(Ios) 実装後のテスト方法についてのガイド ---- ## テスト用広告枠ID 以下の広告枠IDを設定することで実装を簡単にテストすることができます。 広告枠ID | 説明 | 設定されているアドネットワーク ---|---|--- 59755 | 動画リワード iOSテスト用ID | UnityAds、maio、AdMob ## テストモードの設定 テストモードをONにすることで、テスト広告による表示確認が可能です。 RTB案件は配信されません。 :::note[Note] リリースするときは必ず削除するか、コメントアウトしてください。 ::: ### Objective-C ```objective-c [VAMP setTestMode:YES]; ``` ### Swift ```swift VAMP.setTestMode(true) ``` ## デバッグモードの設定 デバッグモードをONにすることで、詳細なログが出力されます。 :::note[Note] リリースするときは必ず削除するか、コメントアウトしてください。 ::: ### Objective-C ```objective-c [VAMP setDebugMode:YES]; ``` ### Swift ```swift VAMP.setDebugMode(true) ``` ## テストモード、デバッグモードの連携 VAMPのテストモード、デバッグモードを設定すると、以下の表の○がついているアドネットワークと連携します。 アドネットワーク | テストモード | デバッグモード ---|---|--- AdMob | ○ | - maio | ○ | - UnityAds | ○ | ○ Pangle | - | ○ LINEAds | ○ | - --- ## v5 SDK移行ガイド v4からv5へのSDK移行ガイド ---- このページでは、iOS向けVAMP SDKのv5バージョンへの移行について説明します。 v5正式リリース **v5.1.0** は2024年2月にリリースされました。 ## SDKバージョンv4からv5への移行 ### 最小サポートOS サポートする最小のiOSバージョンは **12** になります。 ### Xcodeの最小バージョン サポートされるXcodeの最小バージョンは **16.2** となります。(2025-02-04 VAMP v5.3.1〜) ### 広告のロードおよび表示に関わる新しいAPI v5から新しいAPIを使用して広告のロードおよび表示をすることができます。 ``` + (void) loadWithPlacementID:(NSString *)placementID request:(VAMPRequest *)request delegate:(nullable id)delegate; + (nullable VAMPRewardedAd *) rewardedAdOfPlacementID:(NSString *)placementID; - (void) showFromViewController:(UIViewController *)viewController delegate:(nullable id)delegate; ``` ### 広告のロード VAMPRewardedAd.load(withPlacementID:request:delegate:)メソッドを使用して広告のロードを実行します。 placementIDは発行されたVAMPの広告枠IDを指定します。 ``` let placementID = “Your Placement ID” let request = VAMPRequest() VAMPRewardedAd.load(withPlacementID: placementID, request: request, delegate: loadDelegate) ``` delegateに後述するVAMPRewardedAdLoadDelegateプロトコルを実装したオブジェクトを渡すことで、ロードに関するイベントを受け取ることができます。 特にイベントを受け取る必要がないときはnilを渡します。 ### 広告の表示 広告のロードが完了している場合、 show(from:delegate:) メソッドを使用して広告の表示ができます。 ``` if let rewardedAd = VAMPRewardedAd.of(placementID: placementID) { rewardedAd.show(from: viewController, delegate: showDelegate) } ``` VAMPRewardedAd.of(placementID:) メソッドで VAMPRewardedAd オブジェクトを取得します。 このメソッドは広告のロードが完了している場合、 VAMPRewardedAd オブジェクトを返し、 まだロードされていない場合は **nil** を返します。 delegateに後述する VAMPRewardedAdShowDelegate プロトコルを実装したオブジェクトを渡します。 ### VAMPRewardedAdLoadDelegateプロトコルを実装する 必要に応じて VAMPRewardedAdLoadDelegate メソッドを実装します。 このプロトコルのメソッドはすべて **optional** です。 ``` extension ViewController: VAMPRewardedAdLoadDelegate { /// 広告表示が可能になると通知されます。 /// /// - Parameter placementID: 広告枠ID func rewardedAdDidReceive(withPlacementID placementID: String) { } /// 広告の取得に失敗すると通知されます。 /// /// 例) 広告取得時のタイムアウトや、全てのアドネットワークの在庫がない場合など。 /// /// - Parameters: /// - placementID: 広告枠ID /// - error: `VAMPError` オブジェクト func rewardedAdDidFailToLoad(withPlacementID placementID: String, error: VAMPError) { } /// RTBはロードが完了してから1時間経過すると、広告表示ができても無効扱いとなり、収益が発生しません。 /// /// この通知を受け取ったらロードからやり直してください。 /// /// - Parameter placementID: 広告枠ID func rewardedAdDidExpire(withPlacementID placementID: String) { } } ``` ### VAMPRewardedAdShowDelegateプロトコルを実装する VAMPRewardedAdShowDelegateメソッドを実装します。 このプロトコルのメソッドは、rewardedAdDidComplete(_:)メソッド以外は optional です。 インセンティブ付与のコードをrewardedAdDidComplete(_:)メソッドに実装します。 ``` extension ViewController: VAMPRewardedAdShowDelegate { /// 広告の表示に失敗すると通知されます。 /// /// 例) 視聴完了する前にユーザがキャンセルするなど。 /// /// - Parameters: /// - rewardedAd: `VAMPRewardedAd` オブジェクト /// - error: `VAMPError` オブジェクト func rewardedAd(_ rewardedAd: VAMPRewardedAd, didFailToShowWithError error: VAMPError) { } /// インセンティブ付与が可能になると通知されます。 /// /// ※ユーザが途中で再生をスキップしたり、動画視聴をキャンセルすると発生しません。 /// ※アドネットワークによって発生タイミングが異なります。 /// /// - Parameter rewardedAd: `VAMPRewardedAd` オブジェクト func rewardedAdDidComplete(_ rewardedAd: VAMPRewardedAd) { // TODO: インセンティブ付与 } /// 広告の表示が開始されると通知されます。 /// /// - Parameter rewardedAd: `VAMPRewardedAd` オブジェクト func rewardedAdDidOpen(_ rewardedAd: VAMPRewardedAd) { } /// 広告が閉じられると通知されます。 /// ユーザキャンセルなどの場合も通知されるため、インセンティブ付与は `VAMPRewardedAdShowDelegate#rewardedAdDidComplete:` /// で判定してください。 /// /// - Parameters: /// - rewardedAd: `VAMPRewardedAd` オブジェクト /// - adClicked: 広告がクリックされたかどうか func rewardedAd(_ rewardedAd: VAMPRewardedAd, didCloseWithClickedFlag adClicked: Bool) { } } ``` ### VAMPUserFeatureクラスおよびVAMPGender列挙型を削除しました VAMPUserFeatureクラスを削除しました(代替はありません)。 VAMPGender列挙型を削除しました(代替はありません)。 ### VAMPRewardedAdDelegateプロトコルの一部のメソッドを非推奨にしました VAMPRewardedAdDelegateプロトコルの以下のメソッドを非推奨にしました。 ``` - (void) rewardedAdDidBeginPlayback:(VAMPRewardedAd *)rewardedAd; ``` 代わりに `- (void) rewardedAdDidOpen:(VAMPRewardedAd *)rewardedAd;` メソッドを使用してください。 ### VAMPクラスの一部のメソッドを非推奨にしました VAMPクラスの以下のメソッドを非推奨にしました(代替はありません)。 ``` + (void) setMetaAudienceNetworkBidding:(BOOL)useBidding testMode:(BOOL)testMode; + (BOOL) useMetaAudienceNetworkBidding; + (BOOL) isMetaAudienceNetworkBiddingTestMode; ``` ### VAMPVideoConfigurationクラスを非推奨にしました VAMPVideoConfigurationクラスを非推奨にしました(代替はありません)。 ### エラーコードにVAMPErrorCodeRequestTimeoutを追加しました VAMPErrorCodeRequestTimeoutは広告のロードをリクエストした後、 AdGenerationサーバから一定時間応答が得られなかった場合に発生します。 --- ## 広告フォーマット(4) 広告フォーマット毎の実装方法についてのガイド ---- このページでは広告フォーマット毎の実装方法について説明します。 ---- [動画リワード広告](/vamp/unity/ad-format/rewarded_ad) --- ## 動画リワード広告(5) 動画リワード広告とは、アプリ内で使用可能なアイテムやポイントをユーザーに付与する代わりに、約15秒〜30秒程度の動画広告を表示する広告フォーマットです。 強制視聴型の動画広告と違い、動画視聴を希望したユーザーにのみインセンティブを付与する点で、一般的な動画広告とは異なるものです。 動画視聴後に付与する報酬(インセンティブ)の例としては、ゲーム内で使えるアイテムやコンティニューの権利、ツール系アプリの場合は有料の機能を限定的に開放するなどがあります。 ## 前提条件 - VAMP Unity Plugin v5.2.0以降 - VAMP Unity Pluginがインポート済み ※まだVAMP Unity Pluginのインポートがお済みでない場合は[こちら](/vamp/unity/integration-guide)をご参考ください。 各メソッドの仕様やオプションについては、UnityPluginリファレンスをご参照ください。 ## RewardedAdオブジェクトの初期化 動画リワード広告を表示するためにまず`RewardedAd`オブジェクトを初期化する必要があります。 次のコードスニペットでは、`SDKTest`クラスの`Start`メソッド内で`RewardedAd`オブジェクトを初期化しています。 VAMP Unity Pluginをインポートして、イベントを設定してください。 広告枠IDで`RewardedAd`を初期化します。 :::note[Note] AdGeneration管理画面で発行された広告枠IDを*****に設定します。 ::: ``` public class SDKTest : MonoBehaviour { #if UNITY_IOS //iOS用のページIDをセット private const string placementID = "*****"; #elif UNITY_ANDROID //Android用のページIDをセット private const string placementID = "*****"; #endif private VAMP.RewardedAd rewardedAd; void Start() { // RewardedAdを初期化します。必ずLoadより先に実行してください rewardedAd = new VAMP.RewardedAd(placementID); // リスナーを設定します rewardedAd.OnStartedLoading += HandleRewardedAdDidStartLoading; rewardedAd.OnLoaded += HandleRewardedAdDidLoad; rewardedAd.OnReceived += HandleRewardedAdDidReceive; rewardedAd.OnFailedToLoad += HandleRewardedAdDidFailToLoad; rewardedAd.OnFailedToShow += HandleRewardedAdDidFailToShow; rewardedAd.OnOpened += HandleRewardedAdDidOpen; rewardedAd.OnCompleted += HandleRewardedAdDidComplete; rewardedAd.OnClosed += HandleRewardedAdDidClose; rewardedAd.OnExpired += HandleRewardedAdDidExpire; } public void HandleRewardedAdDidReceive(object sender, VAMP.AdEventArgs args) { } public void HandleRewardedAdDidFailToLoad(object sender, VAMP.AdFailEventArgs args) { } public void HandleRewardedAdDidFailToShow(object sender, VAMP.AdFailEventArgs args) { } public void HandleRewardedAdDidOpen(object sender, VAMP.AdEventArgs args) { } public void HandleRewardedAdDidComplete(object sender, VAMP.AdEventArgs args) { } public void HandleRewardedAdDidClose(object sender, VAMP.AdCloseEventArgs args) { } public void HandleRewardedAdDidExpire(object sender, VAMP.AdEventArgs args) { } public void HandleRewardedAdDidStartLoading(object sender, VAMP.AdLoadEventArgs args) { } public void HandleRewardedAdDidLoad(object sender, VAMP.AdLoadResultEventArgs args) { } } ``` ## 広告の読み込み ``` rewardedAd.Load(new VAMP.Request.Builder().Build()); ``` 広告の読み込み完了時には`OnReceived`に通知されます。 ## 表示(再生) ``` rewardedAd.Show(); ``` ## イベント ### イベントの登録 広告の読み込みを開始する前に、イベントを登録します。 ``` rewardedAd.OnStartedLoading += HandleRewardedAdDidStartLoading; rewardedAd.OnLoaded += HandleRewardedAdDidLoad; rewardedAd.OnReceived += HandleRewardedAdDidReceive; rewardedAd.OnFailedToLoad += HandleRewardedAdDidFailToLoad; rewardedAd.OnFailedToShow += HandleRewardedAdDidFailToShow; rewardedAd.OnOpened += HandleRewardedAdDidOpen; rewardedAd.OnCompleted += HandleRewardedAdDidComplete; rewardedAd.OnClosed += HandleRewardedAdDidClose; rewardedAd.OnExpired += HandleRewardedAdDidExpire; ``` ### 広告表示準備完了 広告のロードが成功したタイミングで通知されます。 ``` public void HandleRewardedAdDidReceive(object sender, VAMP.AdEventArgs args) { } ``` ### エラー エラーが発生した場合に通知されます。 ``` //全アドネットワークにおいて広告が取得できなかったときに通知 public void HandleRewardedAdDidFailToLoad(object sender, VAMP.AdFailEventArgs args) { } //広告の表示に失敗したときに通知 public void HandleRewardedAdDidFailToShow(object sender, VAMP.AdFailEventArgs args) { } ``` エラーは[こちら](/vamp/unity/api-error)をご確認ください。 ### 広告を閉じる 広告を閉じたタイミングで呼び出されます。 ``` public void HandleRewardedAdDidClose(object sender, VAMP.AdCloseEventArgs args) { } ``` ### インセンティブ付与通知 動画再生完了時、または広告が閉じられた際にインセンティブ付与が可能な状態であれば呼び出されます。 動画の再生を途中でキャンセルした場合は、本イベントは通知されません。 ``` public void HandleRewardedAdDidComplete(object sender, VAMP.AdEventArgs args) { } ``` ### 広告取得開始 アドネットワーク毎の広告取得が開始されたときに通知します。 ``` public void HandleRewardedAdDidStartLoading(object sender, VAMP.AdLoadEventArgs args) { } ``` ### アドネットワーク毎の広告取得結果 アドネットワーク毎の広告取得結果が通知されます。 ``` public void HandleRewardedAdDidLoad(object sender, VAMP.AdLoadResultEventArgs args) { } ``` アドネットワーク毎の広告取得結果を、 **成功** , **失敗** のどちらの場合でも通知します。 `AdLoadResultEventArgs`の`IsSuccess`が**true** の場合は成功です。 失敗しても次のアドネットワークがある場合、広告取得を実行します。 最終的に全てのアドネットワークの広告在庫がない場合は、 `OnFailedToLoad`の`NO_ADSTOCK`が通知されるため、ここで処理を止めないでください。 :::note[Note] この通知をもとに`Show`しないようご注意ください。`Show`する判定は、`OnReceived`イベントを受け取ったタイミングで判断ください。 ::: ### 期限切れ `OnReceived`イベントを受けてからの有効期限(55分)が切れた際に通知されます。 広告を表示するためには、再度ロードを行う必要があります。 ``` public void HandleRewardedAdDidExpire(object sender, VAMP.AdEventArgs args) { } ``` --- ## エラー定義(Unity) VAMPのエラーコードの定義についてのガイド |コード|内容|発生条件(例)| |---|---|---| |NOT_SUPPORTED_OS_VERSION|サポート対象外のOSバージョンです|対応していないOSのバージョンなので、ダイアログでユーザーに広告機能が使えない旨の通知をしてください。| |UNKNOWN|不明なエラー|起動元アプリと接続できなくなりました。| |SERVER_ERROR|サーバ間通信エラー|広告枠IDが不正、またはアドジェネのサーバーでエラーが発生しているので、お問い合わせください。| |NO_ADNETWORK|配信可能なアドネットワークがない|アドジェネ管理画面でアドネットワークの配信がONになっていない、またはEU圏からのアクセスの場合(GDPR)発生します。| |NEED_CONNECTION|通信不通|ネットワークに接続できない状況(電波状況が悪い、機内モードなど)です。電波状況をご確認ください。| |MEDIATION_TIMEOUT|タイムアウト|アドネットワークSDKから返答が得られず、15秒経過した場合発生。デフォルト15秒ですが、SetMediationTimeoutInMillisecondsで秒数を変更(5秒〜60秒)できます。| |USER_CANCEL|ユーザ都合の途中終了|AdMobなどで動画を途中でキャンセルできる場合に発生します。| |NO_ADSTOCK|表示可能なアドネットワークが1件もない|在庫が無いので、再度loadをしてもらう必要があります。連続で発生する場合、時間を置いてからloadをする必要があります。フリクエンシーキャップにかかっている場合があります。| |ADNETWORK_ERROR|アドネットワークにてエラーが発生した|アドネットワーク側でエラーが発生しました。| |SETTING_ERROR|設定エラー|パーミッションやGooglePlayServiceライブラリが不足していないかご確認ください。| |NOT_LOADED_AD|広告のロードが完了していないときに表示しようとした|広告のロードが完了した後にshowメソッドを実行してください。| |INVALID_PARAMETER|パラメータが不正|不正なパラメータが設定されています。広告枠IDまたはActivityが不正です。| |FREQUENCY_CAPPED(DEPRECATED)|フリークエンシーキャップ|この機能は削除されました。| |REQUEST_TIMEOUT|リクエストタイムアウト|広告のロードをリクエストした後、アドジェネサーバから一定時間応答が得られなかった場合に発生します。(v5.1.1で追加)| --- ## VAMP Unity SDKのドキュメント # VAMP Unity Pluginのドキュメント UnityアプリにVAMP SDKを導入する ---- Unity製アプリで`VAMP SDK`を使用して広告を表示するためには、まず、`VAMP SDK`をUnityアプリに導入します。 SDKの導入が済んだら、広告フォーマット毎に必要な実装をしていきます。 ## Github https://github.com/AdGeneration/VAMP-Unity-Plugin ## 詳細 - [VAMP v5 スタートガイド](/vamp/unity/integration-guide) VAMP SDKの導入手順についてのガイド - [広告フォーマット](/vamp/unity/ad-format/) 広告フォーマット毎に実装方法についてのガイド - [エラー定義](/vamp/unity/api-error) VAMPのエラーコードの定義についてのガイド - [実装のテスト](/vamp/unity/test) 実装後のテスト方法についてのガイド --- ## VAMP v5 スタートガイド(Unity) VAMP SDKの導入手順についてのガイド ## 更新履歴 - [最新ReleaseNote](https://github.com/AdGeneration/VAMP-Unity-Plugin/releases) ### v5.3.5(2026-06-08) - App Open Ads に対応しました - VAMP Android/iOS SDK v5.3.5 に対応しました - Android: https://github.com/AdGeneration/VAMP-Android-SDK/releases/tag/v5.3.5 - iOS: https://github.com/AdGeneration/VAMP-iOS-SDK/releases/tag/v5.3.5 ### v5.3.4(2026-03-25) - VAMP Android/iOS SDK v5.3.4 に対応しました - Android: https://github.com/AdGeneration/VAMP-Android-SDK/releases/tag/v5.3.4 - iOS: https://github.com/AdGeneration/VAMP-iOS-SDK/releases/tag/v5.3.4 - AppLovin アダプターを追加しました(Android / iOS) - `maio` iOS アダプターを再有効化しました - Unity 6.0 LTS に対応しました ## はじめに Unityでの開発に必要な環境がインストールされていることを前提としています ## 動作確認環境 |ツール名 |ver. | |:--------------:|:---------------:| |Unity |6000.0.62f1 (Unity 6.0 LTS) | |Xcode |26.1 | |Android Studio |Android Studio Panda 2 \| 2025.3.2 | ※Android はサポート OS が 6.0 以降(API 23 以降、arm64 対応端末を想定)です ## 対応アドネットワーク | ADNW | Android | iOS | |------|---------|-----| | AdMob | ○ | ○ | | AppLovin | ○(v5.3.4〜) | ○(v5.3.4〜) | | LINEAds | ○ | ○ | | maio | ○ | ○(v5.3.4〜再対応) | | Pangle | ○ | ○ | | UnityAds | ○ | ○ | ## Unity Pluginをダウンロードする **Unity Plugin** https://github.com/AdGeneration/VAMP-Unity-Plugin/releases ## プロジェクトにpackageをインポートする Assets > Import Package > Custom Package を選択します。 ![packageのインポート画面](/img/import_custom_package.png) VAMP_UnityPluginフォルダの中のvamp_for_unity.unitypackageを選択し、インポートします。 ![packageのインポート](/img/import_unity_package.png) ## iOS用SDKをプロジェクトに追加する :::note[Note] アドネットワークについては External Dependency Manager for Unity(旧 Play Services Resolver)での導入を推奨しております。 ::: ## Android用SDKをプロジェクトに追加する :::note[Note] アドネットワークについては External Dependency Manager for Unity(旧 Play Services Resolver)での導入を推奨しております。 ::: ## 【iOS】その他のフレームワークをXcodeプロジェクトに追加する iOSで追加する必要のある`VAMP SDK`が依存するフレームワークに関しては、[こちら](/vamp/ios/integration-guide)をご確認ください。 その他アドネットワークの依存フレームワークに関しては、[こちら](/vamp/ios/mediation)から各ガイドをご確認ください。 ## 【iOS】Xcodeプロジェクトに設定を追加する iOSアプリでは、Xcodeにて以下の設定が必要です。 Targets > Build Settings > Linking > Other Linker Flagsに「-ObjC」を追加してください。 ![iOSのOtherLinkerFlags設定](/img/other_linker_flag.png) ## 【iOS】その他の設定 その他の設定については[iOSのスタートガイド](/vamp/ios/integration-guide/)をご確認ください。 ## 【Android】AndroidManifest.xmlを設定する Androidアプリでは、使用するAdnetworkによってAndroidManifest.xmlに設定をする必要があります。 `VAMP`のAndroidManifest.xmlの設定に関しては、[こちら](/vamp/android/integration-guide#2-androidmanifestxml%E3%81%AE%E8%A8%AD%E5%AE%9A)をご確認ください。 その他アドネットワークのAndroidManifest.xmlの設定に関しては、[こちら](/vamp/android/mediation)をご確認ください。 ## 【Android】proguardの設定 SDKを導入したアプリを難読化する際は以下の設定値をproguardの設定ファイルに追加してください。 難読化後の表示確認も必ず行ってください。 `VAMP`のproguardの設定に関しては、[こちら](/vamp/android/integration-guide#4-proguardの設定)をご確認ください。 その他アドネットワークのproguardについては、[こちら](/vamp/android/mediation)をご確認ください。 ## 【Android】その他の設定 その他の設定については[Androidのスタートガイド](/vamp/android/integration-guide)をご確認ください。 ## External Dependency Manager for Unity を導入する `VAMP SDK`では各社の SDK、Adapter を [External Dependency Manager for Unity(旧 Play Services Resolver)](https://github.com/googlesamples/unity-jar-resolver) でインストールすることを推奨しております。 `Dependencies.xml`の書き方は[Dependencies.xmlのサンプル](https://github.com/AdGeneration/VAMP-Unity-Plugin/blob/master/sampleApp/Assets/ExternalDependencyManager/Editor/VAMPDependencies.xml)をご確認ください。 ## 注意事項 - [Androidの注意事項](/vamp/android/integration-guide#5-注意事項) - [iOSの注意事項](/vamp/ios/integration-guide#注意事項) - `maio` iOS は v5.3.4 で再対応しました。 --- ## 実装のテスト(Unity) 実装後のテスト方法についてのガイド ## テスト用の広告枠ID テスト用の広告枠IDはiOSとAndroidで異なります。 テストをするOSのテスト枠をご確認ください。 - [iOSテスト枠](/vamp/ios/test#テスト用広告枠id) - [Androidテスト枠](/vamp/android/test#テスト用広告枠id) ## テストモードの設定 テストモードをONにすることで、テスト広告による表示確認が可能です。 RTB案件は配信されません。 :::note[Note] リリースするときは必ず削除するか、コメントアウトしてください。 ::: ``` VAMP.SDK.TestMode = true; ``` ## デバッグモードの設定 デバッグモードをONにすることで、詳細なログが出力されます。 :::note[Note] リリースするときは必ず削除するか、コメントアウトしてください。 ::: ``` VAMP.SDK.DebugMode = true; ``` ## テストモード、デバッグモードの連携 以下からVAMPのテストモード、デバッグモードに対応しているアドネットワークをご確認いただけます。 - [iOS](/vamp/ios/test#テストモードデバッグモードの連携) - [Android](/vamp/android/test#テストモードデバッグモードの連携) --- ## What's New - 最新情報 import WhatsNewListPaginated from '@site/src/components/WhatsNew/WhatsNewListPaginated'; import WhatsNewCount from '@site/src/components/WhatsNew/WhatsNewCount'; export const newsnum = 0; {(count) => ( <> 更新情報{count > 0 ? `(全${count}件)` : ''} )}