動画リワード広告は、利用者が動画広告を視聴する引き換えに、仮想通貨、アプリ内アイテム、限定コンテンツといった何らかの特典を得られる、フルスクリーンの広告サービスです。広告の長さは15~30秒で、スキップはできず、コールトゥアクションが備わったエンドカードが表示されます。動画の視聴が完了すると、提示したリワードを利用者に付与するためのコールバックが届きます。
以下に、iOSでAudience Networkから動画リワード広告を実装する方法を示します。
動画リワードはiOS 9以上でしかサポートされていないことに注意してください。
Audience Network動画リワードフォーマットが、公開SDKに含まれるようになりました。動画リワード広告はまもなく、すべてのゲームアプリで利用可能になります。最新のSDKを使用しているのに、収益化マネージャに動画リワードが表示されない場合は、今すぐ適用してください。
次に、動画コントローラーヘッダーファイル(Swiftユーザーの場合は、Swiftファイル)で、FBAudienceNetwork
をインポートし、FBRewardedVideoAdDelegate
プロトコルへの適合性を宣言し、動画リワード広告ユニットのインスタンス変数を追加します
import UIKit
import FBAudienceNetwork
class ViewController: UIViewController, FBRewardedVideoAdDelegate {
private var rewardedVideoAd: FBRewardedVideoAd?
}
動画リワードオブジェクトを初期化し、動画クリエイティブを表示する前にそれをキャシュする関数を、ビューコントローラーに追加します
override func viewDidLoad() {
super.viewDidLoad()
// Instantiate an rewarded video object.
// NOTE: the placement ID will eventually identify this as your app. You can ignore it while you are testing
// and replace it later when you have signed up.
// While you are using this temporary code you will only get test ads and if you release
// your code like this to the App Store your users will not receive ads (you will get a 'No Fill' error).
let rewardedVideoAd = FBRewardedVideoAd(placementID: "YOUR_PLACEMENT_ID")
rewardedVideoAd.delegate = self
// For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
rewardedVideoAd.load()
self.rewardedVideoAd = rewardedVideoAd
}
YOUR_PLACEMENT_ID
で表示されるIDは、テスト目的だけの一時的なIDです。
この一時的なIDを実際のコードで使用しても、ユーザーは広告を受け取りません(No Fillエラーを受け取ります)。テスト後にここに戻って、一時的なIDを実際の配置IDに置き換えてください。
実際の配置IDの生成方法については、Audience Network設定をご覧ください。
これで広告を読み込むコードが追加され、さまざまなイベントを処理する関数を追加できます。
例:
rewardedVideoAdDidLoad
により、広告がキャッシュされて広告の表示の準備ができると、アプリがそのことを認識できるようになりますrewardedVideoAdVideoComplete
により、動画視聴後にユーザーにリワードを提供するタイミングを知ることができますfunc rewardedVideoAdDidLoad(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Video ad is loaded and ready to be displayed")
}
func rewardedVideoAd(_ rewardedVideoAd: FBRewardedVideoAd, didFailWithError error: Error) {
print("Rewarded video ad failed to load")
}
func rewardedVideoAdDidClick(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Video ad clicked")
}
func rewardedVideoAdDidClose(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Rewarded Video ad closed - this can be triggered by closing the application, or closing the video end card")
}
func rewardedVideoAdVideoComplete(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Rewarded Video ad video completed - this is called after a full video view, before the ad end card is shown. You can use this event to initialize your reward")
}
最後に、動画リワード広告を表示する準備ができたら、自身のリワード機能内で次のコードを呼び出すことができます。
private func showRewardedVideoAd() {
guard let rewardedVideoAd = rewardedVideoAd, rewardedVideoAd.isAdValid else {
return
}
rewardedVideoAd.show(fromRootViewController: self)
}
動画リワード広告を表示するメソッドには、プレゼンテーションのアニメーション再生を行うための、animated
ブーリアンフラグがあります。デフォルトではYES
/ true
に設定されていますが、オーバーライドすることもできます。
シミュレーターで実行している場合、デフォルトでテスト広告が表示されます。テスト広告をデバイスで有効にするには、広告の読み込みの前に次のコードを追加します: AdSettings.addTestDevice(HASHED ID)
。デバイスで広告の読み込みを初めてリクエストする際にlog catに出力される、ハッシュ化されたIDを使用してください。
必要に応じて、動画リワード広告が閉じられた場合や動画リワードインプレッションがキャプチャされた場合に処理を実行する、以下の別の関数を追加することもできます。
func rewardedVideoAdWillClose(_ rewardedVideoAd: FBRewardedVideoAd) {
print("The user clicked on the close button, the ad is just about to close")
}
func rewardedVideoAdWillLogImpression(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Rewarded Video impression is being captured")
}
利用者のリワードをサーバー側で管理する場合に備えて、Facebookでは、検証技術を使用してこれらの処理を安全に実行するためのソリューションを用意しています。Facebookのサーバーが指定のhttpsエンドポイントとやり取りして各広告インプレッションを確認し、リワードを提供するかどうかを確認します。
onRewardServerSuccess
- ステップ3で200の応答を受け取った場合にのみトリガーされます。 onRewardServerFailed
- ステップ3で200でない応答を受け取った場合にトリガーされます。 以下は、Facebookのサーバーからの、パブリッシャーエンドポイントに動作させるURLの例です。
https://www.your_end_point.com/?token=APP_SECRET&puid=USER_ID&pc=REWARD_ID&ptid=UNIQUE_TRANSACTION_ID
この機能を有効にするには、パブリッシャーのエンドポイントをFacebookの担当者にお知らせください。
リワードデータ(USER_ID
とCURRENCY
)は、loadAd
メソッドの前後どちらでも設定できます。以下のコードスニペットにこの両方を示します。
let rewardedVideoAd = FBRewardedVideoAd(placementID: "YOUR_PLACEMENT_ID")
rewardedVideoAd.delegate = self
// Set the rewarded ad data before or after `load` method is called
rewardedVideoAd.setRewardDataWithUserID("USER_ID", withCurrency: "CURRENCY")
// For auto play video ads, it's recommended to load the ad at least 30 seconds before it is shown
rewardedVideoAd.load()
self.rewardedVideoAd = rewardedVideoAd
上記のFBRewardedVideoAdDelegate
内の関数に加えて、次のイベントを使用してアプリ内でのリワード付与の処理を行います。次の関数は前述のイベントとともに使用できます。
func rewardedVideoAdServerRewardDidFail(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Rewarded video ad not validated, or no response from server")
}
func rewardedVideoAdServerRewardDidSucceed(_ rewardedVideoAd: FBRewardedVideoAd) {
print("Rewarded video ad validated by server")
}
サーバー確認のコールバックは、利用者がエンドカードを閉じた後にのみ発生することに注意してください。これらのコールバックのいずれかを受け取るまでは、動画リワードオブジェクトの割り当てを解除しないでください。
Relevant code samples in both Swift and Objective C are available on our GitHub sample app repository
Test your ads integration with your app
Submit your app for review