Audience Networkを利用すると、AndroidアプリとiOSアプリにFacebook広告を掲載して収益を生み出すことができます。リワード動画広告は、利用者が動画広告を視聴することの引き換えに、仮想通貨、アプリ内アイテム、限定コンテンツといった何らかの特典を得られる、フルスクリーンの広告サービスです。広告は短い動画によるもので、コールトゥアクションが備わったエンドカードが表示されます。動画の視聴が完了すると、利用者に提案したリワードを付与するためのコールバックが届きます。
続行する前に、必ずAudience NetworkのスタートガイドとUnityのスタートガイドすべてに目を通しておいてください。
動画リワード広告を表示するための最初のステップは、GameObject
に添付されているC#スクリプトでRewardedVideoAd
オブジェクトを作成することです。
... using AudienceNetwork; ... public class RewardedVideoAdTest : MonoBehaviour { public void LoadRewardedVideo() { // Create the rewarded video unit with a placement ID (generate your own on the Facebook app settings). // Use different ID for each ad placement in your app. this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID"); this.rewardedVideoAd.Register(this.gameObject); // Set delegates to get notified on changes or when the user interacts with the ad. this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() { Debug.Log("RewardedVideo ad loaded."); this.isLoaded = true; }); this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) { Debug.Log("RewardedVideo ad failed to load with error: " + error); }); this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() { Debug.Log("RewardedVideo ad logged impression."); }); this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() { Debug.Log("RewardedVideo ad clicked."); }); this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); // Initiate the request to load the ad. this.rewardedVideoAd.LoadAd(); } }
RewardedVideoAd
のコンストラクターには次のパラメーターがあります:
placementId
- この動画リワード広告ユニットのAudience Network配置ID。次に、いくつかのコールバックを実装して、広告のライフサイクルイベントをフォローすることができます。次の例に示すように、イベントのデリゲートを登録して、これらのイベントをリッスンします。
... // Set delegates to get notified on changes or when the user interacts with the ad. this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() { Debug.Log("RewardedVideo ad loaded."); this.isLoaded = true; }); this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) { Debug.Log("RewardedVideo ad failed to load with error: " + error); }); this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() { Debug.Log("RewardedVideo ad logged impression."); }); this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() { Debug.Log("RewardedVideo ad clicked."); }); this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); ...
これはAndroidにのみ関係します。
現在、Android用Unityゲームで、メインUnity Activity
のlaunchMode
としてサポートされているのは、singleTask
のみです。AndroidマニフェストについてはUnityのドキュメントを、アクティビティについてはAndroidのドキュメントを参照してください。
FacebookはActivity
を使用してInterstitial
広告やRewarded Video
広告を表示するため、ユーザーがバックグラウンドでアプリを実行した後、アプリスイッチャーではなくアイコンを使用してそのアプリを再起動すると、広告アクティビティが正しく終了せずに破棄される可能性があります。次のコールバックを使用して、広告がユーザーによって閉じられたかどうかを確認することができます。
インタースティシャルの場合:
this.interstitialAd.interstitialAdDidClose = (delegate() { Debug.Log("Interstitial ad did close."); this.didClose = true; if (this.interstitialAd != null) { this.interstitialAd.Dispose(); } }); #if UNITY_ANDROID /* * Only relevant to Android. * This callback will only be triggered if the Interstitial activity has * been destroyed without being properly closed.This can happen if an * app with launchMode:singleTask (such as a Unity game) goes to * background and is then relaunched by tapping the icon. */ this.interstitialAd.interstitialAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Interstitial activity destroyed without being closed first."); Debug.Log("Game should resume."); } }); #endif
動画リワードの場合:
this.rewardedVideoAd.rewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); this.didClose = true; if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); #if UNITY_ANDROID /* * Only relevant to Android. * This callback will only be triggered if the Rewarded Video activity * has been destroyed without being properly closed.This can happen if * an app with launchMode:singleTask (such as a Unity game) goes to * background and is then relaunched by tapping the icon. */ this.rewardedVideoAd.rewardedVideoAdActivityDestroyed = (delegate() { if (!this.didClose) { Debug.Log("Rewarded video activity destroyed without being closed first."); Debug.Log("Game should resume. User should not get a reward."); } }); #endif
RewardedVideoAd
がインスタンス化されたら、次のステップとして広告を読み込みます。これを行うには、loadAd
メソッドを呼び出します。
前出の例では、広告の読み込みを開始する方法を示しています。
... this.rewardedVideoAd.LoadAd(); ...
最後に、広告が読み込まれた後、Show
メソッドを呼び出して、動画リワード広告を画面にレンダリングできます。たとえば、ShowRewardedVideo
用の関数を作成して、広告を表示するときにこの関数を呼び出すことができます:
public void ShowRewardedVideo() { if (this.isLoaded) { this.rewardedVideoAd.Show(); this.isLoaded = false; } else { Debug.Log("Ad not loaded. Click load to request an ad."); } }
この機能はオプションです。動画リワード広告を利用する際、サーバー側でリワードを確認する必要はありません。これは、自分のサーバーに確認ステップを導入してセキュリティを強化するために、サーバー側でリワードを確認する場合にのみ必要です。この機能を有効にするには、パブリッシャーのエンドポイントをFacebookの担当者にお知らせください。
利用者のリワードをサーバー側で管理する場合に備えて、Facebookでは、検証技術を使用してこれらの処理を安全に実行するためのソリューションを用意しています。Facebookのサーバーが指定のhttpsエンドポイントとやり取りして各広告インプレッションを確認し、リワードを提供するかどうかを確認します。
placementId
: Audience Network配置IDRewardData
- RewardData
オブジェクトは、ユーザーIDを表すUserId
と、実際のゲーム内リワードを表すCurrency
で構成されます。200 response
: リクエストは有効であり、リワードを配信する必要があります。Non 200 response
: リクエストは有効ではなく、リワードを配信してはなりません。RewardedVideoAdDidSucceed
- ステップ3で200応答を受け取った場合にのみトリガーされます。RewardedVideoAdDidFail
- ステップ3で200応答以外を受け取った場合にトリガーされます。FacebookのサーバーからパブリッシャーのエンドポイントにアクセスするURLの例: https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID
ワークフローは次のようになります。
動画リワードオブジェクトを初期化した後、広告をロードする前に、ユーザーIDとリワードの内容をリワード広告データに渡す必要があります。この操作は、RewardData
クラスを使用して行えます。ユーザーIDとリワードの内容はどちらも文字列です。たとえば、次のようにします:
public class RewardedVideoAdTest : MonoBehaviour { ... private bool isLoaded; private RewardedVideoAd rewardedVideoAd; public void LoadRewardedVideo() //Set the rewarded ad data RewardData rewardData = new RewardData(); rewardData.UserId = "USER_ID"; rewardData.Currency = "REWARD_ID"; // Instantiate RewardedVideoAd with reward data this.rewardedVideoAd = new RewardedVideoAd("YOUR_PLACEMENT_ID", rewardData); this.rewardedVideoAd.Register(this.gameObject); // Set delegates to get notified on changes or when the user interacts with the ad. this.rewardedVideoAd.RewardedVideoAdDidLoad = (delegate() { Debug.Log("RewardedVideo ad loaded."); this.isLoaded = true; }); this.rewardedVideoAd.RewardedVideoAdDidFailWithError = (delegate(string error) { Debug.Log("RewardedVideo ad failed to load with error: " + error); }); this.rewardedVideoAd.RewardedVideoAdWillLogImpression = (delegate() { Debug.Log("RewardedVideo ad logged impression."); }); this.rewardedVideoAd.RewardedVideoAdDidClick = (delegate() { Debug.Log("RewardedVideo ad clicked."); }); this.rewardedVideoAd.RewardedVideoAdDidClose = (delegate() { Debug.Log("Rewarded video ad did close."); if (this.rewardedVideoAd != null) { this.rewardedVideoAd.Dispose(); } }); // For S2S validation you need to register the following two callback this.rewardedVideoAd.RewardedVideoAdDidSucceed = (delegate() { Debug.Log("Rewarded video ad validated by server"); }); this.rewardedVideoAd.RewardedVideoAdDidFail = (delegate() { Debug.Log("Rewarded video ad not validated, or no response from server"); }); this.rewardedVideoAd.loadAd(); } ... }
リワードが確認されたかどうかをアプリに通知するには、RewardedVideoAd
のその他のコールバックに加えて、RewardedVideoAdDidSucceed
およびRewardedVideoAdDidFail
コールバックを実装する必要があります。
広告が読み込まれた後、通常のRewardedVideoAd
と同様に、Show
メソッドを呼び出して広告をレンダリングできます。
サーバー確認のコールバックは、利用者がエンドカードを閉じた後に発生する可能性があります。これらのコールバックのいずれかを受け取るまでは、動画リワードオブジェクトの割り当てを解除しないでください。
Unityアプリ内で別の広告フォーマットを統合する方法をご確認ください。
アプリを公開して収益を得る準備が整ったら、Audience NetworkのポリシーとFacebookコミュニティ規定を順守していることを確認してから、アプリのレビューを申請します。