Integration Guide - AdGeneration/VAMP-Unity-Plugin GitHub Wiki

Unity Plugin 実装マニュアル / 動画リワード広告(VAMP)

はじめに

Unityでの開発に必要な環境がインストールされていることを前提としています。

対応バージョン

platform version
iOS 9.0+
Android 4.4+

動作確認環境

ver.
Unity 2019.2.2f1
Xcode 11.5

1. Unity PluginとVAMPを含めた各社アドネットワークのSDKをダウンロードする

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

2. プロジェクトにpackageをインポートする

2.1 Assets > Import Package > Custom Package を選択します。

packageのインポート画面呼び出し

2.2 VAMP_UnityPluginフォルダの中のvamp_for_unity.unitypackageを選択し、インポートします。

packageのインポート

2.3 Assets配下に以下の構成でファイルが格納されます。

・Plugins
├ VAMPUnitySDK.cs
└・iOS
 └VAMPNI.mm

※ 同名のファイルが存在する場合は上書きされます。

※ VAMPMonoBehaviour.csはv2.0.3から不要となりました。

※ pluginsからPluginsにv3.0.6からフォルダ名を変更しました。

3. iOS用SDKをプロジェクトに追加する

ダウンロードした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を置き換えてください。

iOSのSDKインポート
※ ファイルは最新版のみ置いてください。

4. Android用SDKをプロジェクトに追加する

ダウンロードしたandroid/SDKフォルダの中に入っているVAMP-vx.x.x.aar、vamp-unity-vx.x.x.aar、その他アドネットワークSDKをUnityプロジェクトのAndroid配下のlibsフォルダに配置してください。(libsフォルダがない場合は作成してください。)
※現在、VAMP、LINEAds以外はPlaySericesResolverを使ってのインストールを推奨しています。詳しくはこちらをご覧ください
AndroidのSDKインポート

※ x.x.xにはAndroid向けSDKのバージョン番号が含まれます。
※ ファイルは最新版のみ置いてください。

5. 【iOS】その他のフレームワークをXcodeプロジェクトに追加する

iOSで追加する必要のあるフレームワークに関しては、こちらをご確認ください。

https://github.com/AdGeneration/VAMP-iOS-SDK/wiki/VAMP-iOS-Integration-Guide#3-%E3%81%9D%E3%81%AE%E4%BB%96framework%E3%81%AE%E8%BF%BD%E5%8A%A0

6. 【iOS】Xcodeプロジェクトに設定を追加する

iOSアプリでは、Xcodeにて以下の設定が必要です。
Targets > Build Settings > Linking > Other Linker Flagsに「-ObjC」を追加してください。
iOSのOtherLinkerFlags設定

info.plistの設定

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

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

AdMobの設定

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

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

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

※AdMobを使用されない場合はこちらからVAMP_iOS_v[VERSION]_no_admob.zipをダウンロードし、VAMP.embeddedframeworkを置き換えてください。

TikTok Audience Networkの設定

プロジェクト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>

7. PlayServicesResolverを導入する

本SDKでは提携DSPの追跡型広告を表示するためGoogle Advertising IDを使用します。 Google Advertising IDを利用するにはGoogle Play Servicesの導入が必須となります。

UnityでGoogle Play Serviceを導入するにはPlayServicesResolver等を使用してください。

また、v3.2.7からはVAMP、LINEAds以外のアドネットワークSDKの導入はPlayServicesResolerの使用を推奨しています。
Depenenciesファイルに関してはこちらをご参考ください。

https://github.com/AdGeneration/VAMP-Unity-Plugin/blob/master/sampleApp/Assets/ExternalDependencyManager/Editor/VAMPDependencies.xml

8. 【Android】その他のライブラリを追加する

環境に合わせたバージョンで、以下の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

9. 【Android】AndroidManifest.xmlを設定する

Androidアプリでは、使用するAdnetworkによってAndroidManifest.xmlに設定をする必要があります。

詳しくは[こちら] (https://github.com/AdGeneration/VAMP-Android-SDK/wiki/VAMP-Android-SDK-Manual#3-androidmanifestxml%E3%81%AE%E8%A8%AD%E5%AE%9A)を参照してください。

10. proguardの設定

SDKを導入したアプリを難読化する際は以下の設定値をproguardの設定ファイルに追加してください。

難読化後の表示確認も必ず行ってください。

AdGeneration(VAMP)

-keep class jp.supership.vamp.** { *; }
-keep class jp.supership.vamp.unity.** { *; }

VAMP以外のアドネットワークの設定に関しては、こちらを参照してください。

11. 広告表示を実装する

実装例

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);
	}

}

12. 既知の不具合

  • 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; 
}

13. 注意事項

  • Androidの注意事項
  • iOSの注意事項
  • maioはUnityバージョン2018は非推奨。Unity2019での環境推奨
  • Unity2019.3以降ではUnity-iPhoneのターゲットのCopy Bundle ResourcesにVAMPResource.bundleAppLovinSDKResource.bundleTapjoyResource.bundleNendResource.bundleBUAdSDK.bundleを追加する必要があります。
  • TapjoyのAndroidで動画再生中にアプリアイコンをタップしてアプリに復帰したときに、Closeは通知されるが、FailToShowが通知されない事象が確認されています。

14. FAQ

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

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