【Unity】広告で収益を最大化しよう!

f:id:sumzap_engineer_blog:20210531164557p:plain

今回はUnity のAndroid/iOS アプリに広告を導入したときの話を執筆していきたいと思います。
Unityで使用できる広告SDKは様々ありますが、Applovin MAX を使用しました。
Applovinは多様の広告媒体から、様々な種類の広告を表示する機能を備えたモバイルアプリの収益化ソリューションです。

導入

Applovin MAX SDK をUnity にインポートします。
SDK はApplovin の会員ページからダウンロードできるので、まずはアカウントを作成しましょう。

動作環境

Unity

Unity5 or Unity2017以降

Android

Jetifier が有効である必要があります。
Unity から [Assets > External Dependency Manager > Android Resolver > Settings] を選択し、[Use Jetifier] をオンにします。

iOS

Xcode12 以降が必要です。
また、CocoaPods も必要です。
CocoaPods はこちらを確認してインストールしてください。

広告の種類

  • インタースティシャル広告
  • リワード広告
  • バナー広告
  • レクタングル広告

今回は様々な広告の種類の中からリワード広告を実装してみたいと思います。
リワード広告の使い方としては、広告動画を最後まで見たらゲームがコンテニューできるよ!とか、ゲーム内通貨が貰えるよ!など色んな使い方ができます。

実装方法

Intergration Manager

MAX SDK のインポートが完了したら [AppLovin > Integration Manager] で管理画面を開きます。 f:id:sumzap_engineer_blog:20210601154706p:plain:w480

① 現在インポートされているMAX SDK のバージョン、公開されている最新のバージョンが記載されています。

② 使用したい広告媒体を選び [Install] を押します。
既にインストールされている広告媒体はCurrent Version にインストールされているバージョンが表示されます。
Google AdMob は別途AdMob のアカウントを作成しApp Key を取得する必要があります。

③ ApplovinのSDK Key を入力します。
SDK Key はこちらに記載されています。

初期化

MaxSdkを初期化し、初期化完了時のコールバックでリワード広告の各種コールバックを設定します。

void Initialize()
{
    MaxSdkCallbacks.OnSdkInitializedEvent += (MaxSdkBase.SdkConfiguration sdkConfiguration) =>
    {
        // 広告読み込み成功
        MaxSdkCallbacks.OnRewardedAdLoadedEvent += OnRewardedAdLoadedEvent;

        // 広告読み込み失敗
        MaxSdkCallbacks.OnRewardedAdLoadFailedEvent += OnRewardedAdLoadFailedEvent;

        // 広告表示失敗
        MaxSdkCallbacks.OnRewardedAdFailedToDisplayEvent += OnRewardedAdFailedToDisplayEvent;

        // 広告表示完了
        MaxSdkCallbacks.OnRewardedAdDisplayedEvent += OnRewardedAdDisplayedEvent;

        // 広告クリック
        MaxSdkCallbacks.OnRewardedAdClickedEvent += OnRewardedAdClickedEvent;

        // 広告表示終了
        MaxSdkCallbacks.OnRewardedAdHiddenEvent += OnRewardedAdHiddenEvent;

        // 広告報酬獲得
        MaxSdkCallbacks.OnRewardedAdReceivedRewardEvent += OnRewardedAdReceivedRewardEvent;
    };

    MaxSdk.SetSdkKey("SDK Key");
    MaxSdk.InitializeSdk();
}

広告読み込み

LoadRewardedAd を呼び出して広告を読み込みます。
adUnitId はApplovin の会員ページから各アプリごとに発行できます。

void LoadRewardedAd(string adUnitId)
{
    // リワード広告読み込み
    MaxSdk.LoadRewardedAd(adUnitId);
}

void OnRewardedAdLoadedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
    // リワード広告読み込み完了
}

void OnRewardedAdFailedEvent(string adUnitId, int errorCode)
{
    // リワード広告読み込み失敗
}

広告再生

広告の読み込みが完了してからShowRewardedAd を呼び出して広告を表示します。
OnRewardedAdReceivedRewardEvent のコールバックを受け取ったらアプリ内で報酬を付与するよう実装します。

void ShowRewardedAd(string adUnitId)
{
    // リワード広告表示
    MaxSdk.ShowRewardedAd(adUnitId);
}

void OnRewardedAdDisplayedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
    // リワード広告表示成功
}

void OnRewardedAdFailedToDisplayEvent(string adUnitId, int errorCode)
{
    // リワード広告表示失敗
}

void OnRewardedAdClickedEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
    // リワード広告がクリックされた
}

void OnRewardedAdHiddenEvent(string adUnitId, MaxSdkBase.AdInfo adInfo)
{
    // リワード広告表示終了
}

void OnRewardedAdReceivedRewardEvent(string adUnitId, MaxSdk.Reward reward, MaxSdkBase.AdInfo adInfo)
{
    // リワード広告報酬獲得
}

基本的な実装は以上です!
お手軽に実装できちゃいます。

トラブルシューティング

  • Android ビルドに失敗する
    com.android.builder.internal.aapt.v2.Aapt2Exception: Android resource linking failed
    このようなエラーが出ていた場合はgradleのバージョンを変更すれば直る可能性があります。
    デフォルトでは3.4.0になっているかと思います。3.4.3に変更することで私の環境ではビルドが通るようになりました。
    詳細はApplovin MAX のドキュメントを参照ください。
  • Firebase の依存解決に失敗する
    ExternalDependencyManager のバージョンとFirebase のバージョンが合っていなかったのが原因だったのか、Firebase を最新にすることで直りました。
  • iOS ビルドに失敗する
    Google-Mobile-Ads-SDK requires CocoaPods version >= 1.9.0, which is not satisfied by your current version, 1.6.1.
    このようなエラーが出ていた場合は書かれている通りCocoaPods のバージョンを1.9.0以降にアップデートすることで直りました。
  • 広告を表示するとアプリのBGM と広告の音がダブって聞こえる
    広告を表示する際にアプリのBGM は止めましょう。
  • 広告が表示されない
    広告が枯渇して表示できないことがあるようです。
    1日に表示できる回数などを制限して対応するのが良いと思います。
  • マナーモードでアプリの音がならない状態にしていても広告の音が鳴る
    youtube などと同様でマナーモードにしていても動画の音声が鳴るのと同じ仕組みのようで、音量を0にしておかないと音が鳴ってしまう広告があるようです。
    アプリ側からは端末の音量の制御ができないため、防ぎようがなさそうです。

最後に

実装は難しくなく、ドキュメントも充実しており、困っても使ってる人が多くいるので情報もたくさんあります!(英語が多いけど)
広告を実装することでアプリ内課金があるゲームでも、無課金で遊んでるユーザーの遊びの幅が広がり、収益にも繋がるというとっても良いものになっていると思います。
これから広告を実装しようという方の手助けになればと思います。