Integration Guide - AdGeneration/VAMP-Unity-Plugin GitHub Wiki
Unityでの開発に必要な環境がインストールされていることを前提としています。
platform | version |
---|---|
iOS | 9.0+ |
Android | 4.4+ |
ver. | |
---|---|
Unity | 2019.2.2f1 |
Xcode | 11.5 |
Unity Plugin
https://github.com/AdGeneration/VAMP-Unity-Plugin/releases
※ v3.1.3からはUnityPluginを下記からSDKをダウンロードする手順は不要です。
※UnityPlugin v3.1.0はiOS SDK 3.1.0、Android SDK 3.1.2、それ以前はUnityPluginのバージョンと等しいバージョンのSDKが必要となります。
iOS SDK
https://github.com/AdGeneration/VAMP-iOS-SDK/releases/tag/3.1.0
Android SDK
https://github.com/AdGeneration/VAMP-Android-SDK/releases/tag/v3.1.2
・Plugins
├ VAMPUnitySDK.cs
└・iOS
└VAMPNI.mm
※ 同名のファイルが存在する場合は上書きされます。
※ VAMPMonoBehaviour.csはv2.0.3から不要となりました。
※ pluginsからPluginsにv3.0.6からフォルダ名を変更しました。
ダウンロードしたVAMP_Unity_vx.x.xフォルダのios/SDKフォルダの中に入っているVAMP.embeddedframeworkを、UnityプロジェクトのiOS配下のsdkフォルダに配置してください。(sdkフォルダがない場合は作成してください。)
その他、アドネットワークのSDKも同様に配置してください。
※v3.1.3以前のバージョンではiOS_vx.x.xフォルダのforUnity/SDK_forUnityフォルダの中に入っているSDKを使用してください。
※v3.2.7以降ではVAMP(iOS)、LINEAds、以外のSDKはPlayServicesResolverを使用してのインストールを推奨しています。
※AdMobを使用されない場合はこちらからVAMP_iOS_v[VERSION]_no_admob.zip
をダウンロードし、VAMP.embeddedframework
を置き換えてください。
ダウンロードしたandroid/SDKフォルダの中に入っているVAMP-vx.x.x.aar、vamp-unity-vx.x.x.aar、その他アドネットワークSDKをUnityプロジェクトのAndroid配下のlibsフォルダに配置してください。(libsフォルダがない場合は作成してください。)
※現在、VAMP、LINEAds以外はPlaySericesResolverを使ってのインストールを推奨しています。詳しくはこちらをご覧ください
※ x.x.xにはAndroid向けSDKのバージョン番号が含まれます。
※ ファイルは最新版のみ置いてください。
iOSで追加する必要のあるフレームワークに関しては、こちらをご確認ください。
iOSアプリでは、Xcodeにて以下の設定が必要です。
Targets > Build Settings > Linking > Other Linker Flagsに「-ObjC」を追加してください。
iOS14でデフォルトのブラウザAppをChromeに切り替えた際に正しく遷移できなくなるケースがあるため、info.plistに↓追記必須となります
<key>LSApplicationQueriesSchemes</key>
<array>
<string>http</string>
<string>https</string>
</array>
AdMob v7.42.0からはAdMobのapp IDをInfo.plistに追加する必要があります。
<key>GADApplicationIdentifier</key>
<string>ca-app-pub-3940256099942544~1458002511</string>
※上記のIDはTest IDなので実際のapp IDを使用してください。
もし追加していない場合は以下のメッセージがログに出力され、クラッシュします。
"The Google Mobile Ads SDK was initialized incorrectly."
※AdMobを使用されない場合はこちらからVAMP_iOS_v[VERSION]_no_admob.zip
をダウンロードし、VAMP.embeddedframework
を置き換えてください。
プロジェクトplistファイルでApp Transport Security Settingsを追加するには、まず左側の展開矢印をクリックし、さらに右側のプラスマークをクリックすると、自動的にAllow Arbitrary Loadsオプションが追加され、値がYESに変更されます。
TikTok Audience Network SDK APIは全HTTPSをサポートしていますが、広告主のクリエイティブが非HTTPSの場合もあります。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
本SDKでは提携DSPの追跡型広告を表示するためGoogle Advertising IDを使用します。 Google Advertising IDを利用するにはGoogle Play Servicesの導入が必須となります。
UnityでGoogle Play Serviceを導入するにはPlayServicesResolver等を使用してください。
また、v3.2.7からはVAMP、LINEAds以外のアドネットワークSDKの導入はPlayServicesResolerの使用を推奨しています。
Depenenciesファイルに関してはこちらをご参考ください。
環境に合わせたバージョンで、以下のAndroidライブラリをAndroidディレクトリ配下に追加します。
こちらもPlayServicesResolverを使用して追加することも可能です。
必要なライブラリについてはこちらも併せてご確認ください。
- com.google.android.gms:play-services-ads:[Version]
- com.google.android.gms:play-services-base:[Version]
- com.google.android.gms:play-services-ads-identifier:[Version]
- androidx.constraintlayout:constraintlayout:[Version]
- androidx.legacy:legacy-support-v4:[Version]
- androidx.annotation:annotation:[Version]
※ x.x.xはバージョン番号
※ parcentはnend SDK 4.0.4からは不要になりました。代わりにconstraint-layoutが必須となります
※ 格納場所
[Android SDKディレクトリ]/extras/android/m2repository/com/android/support/[ライブラリ名]/x.x.x/[ライブラリ名]-x.x.x.aar
[Android SDKディレクトリ]/extras/m2repository/com/android/support/constraint/constraint-layout/x.x.x/constraint-layout-x.x.x.aar
Androidアプリでは、使用するAdnetworkによってAndroidManifest.xmlに設定をする必要があります。
SDKを導入したアプリを難読化する際は以下の設定値をproguardの設定ファイルに追加してください。
難読化後の表示確認も必ず行ってください。
-keep class jp.supership.vamp.** { *; }
-keep class jp.supership.vamp.unity.** { *; }
VAMP以外のアドネットワークの設定に関しては、こちらを参照してください。
public class SDKTest : MonoBehaviour, VAMPUnitySDK.IVAMPListener, VAMPUnitySDK.IVAMPAdvancedListener
{
#if UNITY_IOS
//iOS用のページIDをセット
private const string placementID = "*****";
#elif UNITY_ANDROID
//Android用のページIDをセット
private const string placementID = "*****";
#endif
void Start()
{
// ~~~ VAMP初期化 ~~~
// trueを指定すると収益が発生しないテスト広告が配信されるようになります。
// ストアに申請する際は必ずfalseを設定してください
VAMPUnitySDK.setTestMode(false);
// trueを指定するとログを詳細に出力するデバッグモードになります
VAMPUnitySDK.setDebugMode(false);
// VAMPを初期化します。必ずLoadより先に実行してください
VAMPUnitySDK.initialize(placementID);
// リスナーを設定します
VAMPUnitySDK.setVAMPListener(this);
VAMPUnitySDK.setAdvancedListener(this);
// 動画広告がまだ準備されていないときはロードを開始します
VAMPUnitySDK.load();
}
// IVAMPListener
public void VAMPDidReceive(VAMPUnitySDK.VAMPAd ad)
{
// 広告表示の準備完了
Debug.LogFormat("[VAMPUnitySDK] VAMPDidReceive: placementId={0} adnwName={1} seqId={2}", ad.PlacementId, ad.AdNetworkName, ad.SeqId);
// 広告表示
VAMPUnitySDK.show();
}
public void VAMPDidFailToLoad(VAMPUnitySDK.VAMPAd ad, VAMPUnitySDK.VAMPError error)
{
// 広告準備に失敗
Debug.LogFormat("[VAMPUnitySDK] VAMPDidFailToLoad: error={0}, placementId={1}, adnwName={2}, seqId={3})", error, ad.PlacementId, ad.AdNetworkName, ad.SeqId);
}
public void VAMPDidFailToShow(VAMPUnitySDK.VAMPAd ad, VAMPUnitySDK.VAMPError error)
{
// 動画の表示に失敗
Debug.LogFormat("[VAMPUnitySDK] VAMPDidFailToShow: error={0}, placemnetId={1}, adnwName={2}, seqId={3})", error, ad.PlacementId, ad.AdNetworkName, ad.SeqId);
}
public void VAMPDidOpen(VAMPUnitySDK.VAMPAd ad)
{
// 動画表示開始
Debug.LogFormat("[VAMPUnitySDK] VAMPDidOpen: placementId={0}, adnwName={1}, seqId={2})", ad.PlacementId, ad.AdNetworkName, ad.SeqId);
}
public void VAMPDidComplete(VAMPUnitySDK.VAMPAd ad)
{
// 動画再生正常終了(インセンティブ付与可能)
Debug.LogFormat("[VAMPUnitySDK] VAMPDidComplete: placementId={0}, adnwName={1}, seqId={2})", ad.PlacementId, ad.AdNetworkName, ad.SeqId);
}
public void VAMPDidClose(VAMPUnitySDK.VAMPAd ad, bool adClicked)
{
// 動画プレーヤーやエンドカードが表示終了
// <注意:ユーザキャンセルなども含むので、インセンティブ付与はonCompleteで判定すること>
Debug.LogFormat("[VAMPUnitySDK] VAMPDidClose: placementId={0}, adnwName={1}, seqId={2} adClicked={3}", ad.PlacementId, ad.AdNetworkName, ad.SeqId, adClicked);
}
public void VAMPDidExpired(string placementId)
{
// 有効期限オーバー
// <注意:onReceiveを受けてからの有効期限が切れました。showするには再度loadを行う必要が有ります>
Debug.LogFormat("[VAMPUnitySDK] VAMPDidExpired: {0}", placementId);
}
// IVAMPAdvancedListener
public void VAMPLoadStart(VAMPUnitySDK.VAMPAd ad)
{
// 優先順位順にアドネットワークごとの広告取得を開始
Debug.LogFormat("[VAMPUnitySDK] VAMPLoadStart: placementId={0}, adnwName={1}, seqId={2})", ad.PlacementId, ad.AdNetworkName, ad.SeqId);
}
public void VAMPLoadResult(VAMPUnitySDK.VAMPAd ad, bool success, string message)
{
// アドネットワークごとの広告取得結果
Debug.LogFormat("[VAMPUnitySDK] VAMPLoadResult: placementId={0}, adnwName={1}, seqId={2}, success={3}, message={4})",
ad.PlacementId, ad.AdNetworkName, ad.SeqId, success, message);
}
}
- FANでは広告再生中に画面の向きを変更して、広告を閉じた後に画面の向きが元に戻らない不具合が確認されております。以下のような処理を追加することで回避することが可能です。
// 予めアプリの設定値を取得しておく
private static bool autorotateToPortrait;
private static bool autorotateToPortraitUpsideDown;
private static bool autorotateToLandscapeLeft;
private static bool autorotateToLandscapeRight;
// アプリのorientation
private static ScreenOrientation applicationOrientation;
...
ublic void VAMPDidClose(VAMPUnitySDK.VAMPAd ad, bool adClicked)
{
// 動画プレーヤーやエンドカードが表示終了
StartCoroutine(FixScreenOrientation());
}
public IEnumerator FixScreenOrientation()
{
Screen.orientation = applicationOrientation;
// orientationの設定が反映されるまで待機
yield return new WaitWhile(() => Screen.orientation != applicationOrientation);
Screen.orientation = ScreenOrientation.AutoRotation;
Screen.autorotateToPortrait = autorotateToPortrait;
Screen.autorotateToPortraitUpsideDown = autorotateToPortraitUpsideDown;
Screen.autorotateToLandscapeLeft = autorotateToLandscapeLeft;
Screen.autorotateToLandscapeRight = autorotateToLandscapeRight;
}
- Androidの注意事項
- iOSの注意事項
- maioはUnityバージョン2018は非推奨。Unity2019での環境推奨
- Unity2019.3以降ではUnity-iPhoneのターゲットのCopy Bundle Resourcesに
VAMPResource.bundle
、AppLovinSDKResource.bundle
、TapjoyResource.bundle
、NendResource.bundle
、BUAdSDK.bundle
を追加する必要があります。 - TapjoyのAndroidで動画再生中にアプリアイコンをタップしてアプリに復帰したときに、Closeは通知されるが、FailToShowが通知されない事象が確認されています。
その他不明点や各アドネットワークの最新の対応OSバージョンは下記からご確認ください。
https://ad-generation.jp/support/adg-help/ad-type/rewarded-video-ad