Unity 앱에 보상형 동영상 광고 추가

Audience Network를 사용하면 Facebook 광고를 통해 Android 및 iOS 앱에서 수익을 창출할 수 있습니다. 보상형 동영상 광고는 전체 화면 형식으로 노출되며, 사용자는 이 동영상 광고를 보는 대가로 온라인 통화, 앱 내 아이템, 독점 콘텐츠 등의 혜택을 받습니다. 광고는 짧은 동영상이며, 마지막 슬라이드에는 행동 유도 버튼이 포함됩니다. 사용자가 동영상을 모두 조회하면 여러분은 약속된 보상을 지급하라는 콜백을 받게 됩니다.

계속 진행하기 전에 Audience Network 시작하기Unity 시작하기 가이드를 완료했는지 확인하세요.

보상형 동영상 광고 단계

1단계: 보상형 동영상 광고 초기화

2단계: 콜백 이벤트 추가

3단계: 광고 읽어들이기

4단계: 광고 표시

1단계: 보상형 동영상 광고 초기화

보상형 동영상 광고를 표시하기 위한 첫 단계는 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

2단계: 콜백 이벤트 추가

그다음으로는 몇 개의 콜백을 구현하여 광고의 수명 주기 이벤트를 받아봅니다. 아래 예시와 같이 이벤트의 델리게이트를 등록하여 해당 이벤트를 수신합니다.

...
// 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();
    }
});
...

Unity Android에서 폐기된 광고 활동에 대한 콜백

이 내용은 Android에만 적용됩니다.

현재 Android용 Unity 게임은 메인 Unity ActivitysingleTasklaunchMode를 가질 수 있도록 지원합니다. Android 매니페스트를 위한 Unity 문서활동을 위한 Android 문서를 참조하세요.

Activity를 사용하여 InterstitialRewarded Video 광고를 표시하기 때문에 사용자가 앱을 백그라운드로 돌렸다가 앱 전환기가 아닌 아이콘으로 다시 앱을 시작하면 광고 활동이 적절히 닫히지 않은 상태에서 폐기될 수 있습니다. 다음 콜백을 사용하여 사용자가 광고를 닫았는지 확인할 수 있습니다.

삽입 광고:

this.interstitialAd.interstitialAdDidClose = (delegate() { Debug.Log("Interstitial ad did close."); this.didClose = true; if (this.interstitialAd != null) { this.interstitialAd.Dispose(); } }); #if UNITY_ANDROID /* * Android에만 적용됩니다. * 삽입 광고 활동이 적절히 닫히지 않은 상태에서 * 폐기되었을 경우에만 이 콜백이 트리거됩니다. * launchMode:singleTask가 있는 앱(예: Unity 게임)을 * 백그라운드로 돌렸다가 아이콘을 탭해서 다시 시작하면 이렇게 될 수 있습니다. */ 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 /* * Android에만 적용됩니다. * 보상형 동영상 활동이 적절히 닫히지 않은 상태에서 * 폐기되었을 경우에만 이 콜백이 트리거됩니다. launchMode:singleTask가 있는 앱(예: Unity 게임)을 * 백그라운드로 돌렸다가 아이콘을 탭해서 다시 시작하면 이렇게 될 수 있습니다. */ 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 

3단계: 광고 읽어들이기

RewardedVideoAd가 인스턴스화되고 나면 광고를 읽어들여야 합니다. 이를 위해서는 loadAd 메서드를 호출하면 됩니다.

위의 예시에서 광고 로드를 시작하는 방법은 다음과 같습니다.

...
this.rewardedVideoAd.LoadAd();
...

4단계: 광고 표시

마지막으로 광고를 로드하고 나면 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 엔드포인트와 통신하여 각 광고 노출 위치를 검증하고 보상을 허락하기에 적절한지 판단합니다.

  1. Audience Network SDK는 다음과 같은 매개변수를 사용하여 보상형 동영상 광고를 요청합니다.
    • placementId: Audience Network 노출 위치 ID
    • RewardData - 사용자 ID를 나타내는 UserId와 실제 게임 내 보상을 나타내는 Currency로 구성된 RewardData 개체
  2. 동영상 조회가 완료되면 Facebook 서버에서 앱 시크릿 코드 및 고유 거래 ID와 함께 해당 값을 지정된 엔드포인트에 전달합니다.
  3. 서버에서는 수신 후 요청을 검증하고 다음과 같은 응답을 반환합니다.
    • 200 response: 요청이 유효하므로 보상을 제공해야 합니다.
    • Non 200 response: 요청이 유효하지 않으므로 보상을 제공해서는 안 됩니다.
  4. 동영상 조회가 완료되면 마지막 슬라이드가 표시되며 다음 이벤트 중 하나가 발생합니다.
    • RewardedVideoAdDidSucceed - 3단계에서 200 response가 수신된 경우에만 트리거됩니다.
    • RewardedVideoAdDidFail - 3단계에서 200 response 외 응답이 수신된 경우에 트리거됩니다.

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에 대한 다른 콜백 외에도 RewardedVideoAdDidSucceedRewardedVideoAdDidFail 콜백을 구현해야 합니다.

광고가 로드되고 나면 일반 RewardedVideoAd 등의 Show 메서드로 광고를 렌더링할 수 있습니다.

참고 - 사용자가 마지막 슬라이드를 닫은 이후에 서버 검증 콜백이 발생할 수 있습니다. 이 콜백 중 하나가 실행될 때까지 보상형 동영상 개체 할당을 취소해서는 안 됩니다.

다음 단계

Unity 앱에서 여러 광고 형식을 통합하려면 Facebook 가이드를 참조하세요.

앱에 광고를 전송하여 수익을 창출할 준비가 완료되었다면, 앱이 Audience Network 정책Facebook 커뮤니티 규정을 준수하는지 확인한 후 검수를 위해 제출하세요.