【Unity】広告プレースメントでリワード広告を実装する方法

unity

iPhoneアプリ向けに広告プレースメントを使ってadmobのリワード広告を実装する方法について解説します。

[toc]

プラグインのインポート

Google Mobile Ads Unity プラグインを以下のページのURLからダウンロードします。

https://developers.google.com/admob/unity/ad-placements?hl=ja

Unityでダウンロードしたプラグインをインポートします。

インポートが終わると以下のエラーが出ますが気にしないことにします。

A Native Collection has not been disposed, resulting in a memory leak. Enable Full StackTraces to get more details.

プロファイラで見て大きな問題ではなさそうなので。ビルドもできます。

広告の設定

以下の操作でアセットファイルを追加します。

「Assets」ー「Google Mobile Ads」ー「Ad Placements」

「GoogleMobileAdsPlacements.asset」がAssets/GoogleMobileAds/Resourcesに追加されます。

今回は「AdMob Demo Rewarded Ad」と名付けられたプレースメントを使います。

テスト用のユニットIDが設定されていますのでテスト広告が表示されます。

ちなみに、下の方に行くと「Add New Placement」ボタンがあります。

Admobページから取得した本番のUnitIDを入れる時には新しいプレースメントをここで追加します。

今回はテスト広告を表示させることを目的にしていますので、「AdMob Demo Rewarded Ad」を使います。

次にリワード広告のゲームオブジェクトを追加します。

ヒエラルキーにゲームオブジェクトが追加されます。

デモ用の「AdMob Demo Rewarded Ad」が指定されていることを確認します。

Callbacksの中身は以下の通りです。

ここに実行したい処理を追記していくことになります。

コールバックの設定

自分でスクリプトを新しく作ってMainCameraにアタッチします。(他のGameObjectでも可能)

using UnityEngine;
using GoogleMobileAds.Api;

//コールバックに設定する関数が定義されたクラス
public class RewardTestScript : MonoBehaviour
{
    //動画広告同意パネル。インスペクタで設定する。
    [SerializeField] GameObject WatchConfirmPanel;

    void Start()
    {
        MobileAds.Initialize((initStatus) => {
            Debug.Log("Initialized MobileAds");
        });

    }

    //動画広告同意パネルを表示する。(インスペクタでOnAdLoadedコールバックに設定)
    public void showWatchConfirmPanel()
    {
        WatchConfirmPanel.SetActive(true);
    }

    //広告読み込みが失敗した時の処理。SDKからstringのパラメータを取得できる。(インスペクタでOnAdFailedToLoadコールバックに設定)
    public void OnRewardAdFailedToLoad(string reason)
    {
        Debug.Log("リワード広告のロードに失敗 ><;" + reason);
    }

    // Rewarded Adオブジェクトの報酬獲得コールバックにセットする(インスペクタでOnUserEarnedRewardコールバックに設定)
    // SDKからRewardクラスのパラメータを取得できる。
    public void getReward(Reward reward)
    {
        Debug.Log("ユーザはリワードを取得しました。: リワードのタイプ=" +
            reward.Type + ", リワードの量=" + reward.Amount);
        WatchConfirmPanel.SetActive(false);
    }

}

3つのコールバックの設定を行います。

  • 広告のロードが成功した時の処理
  • 広告のロードが失敗した時の処理
  • 広告を見終わって報酬を獲得した時の処理

ボタンの設定

誘導ボタンと同意パネルを作ります。

誘導ボタンのクリック時の設定は以下の通り。

誘導ボタンを押すと、広告が読み込まれて以下のパネルが表示されます。

余談ですが、この同意パネルの文章はしっかり書かないとAdmobの審査で落とされることがあります。

私も落とされたことがあります。

動画を見た引き換えにゲットできる報酬を明確にしていないという理由でリジェクトされた気がします。

はい、ボタンが押された時の設定です。

AppIDの設定

Unity Editor で、メニューから [Assets]> [Google Mobile Ads])> [Settings]を選択します。

AdmobをEnabledにしてAppIDはAdmobのページから発行します。

ビルド

iOSビルドが成功すると2つのXcodeのプロジェクトができます。

Xcodeで開くのはxcworkspaceの方なので注意しましょう。

iPhoneで確認するとテスト広告が表示されました。

以上が本題です。

本番のユニットIDではどうなる?

巷ではAppStore等にアプリをアップして、リンクを通してAdmobの審査を通さないと広告が表示されないと言われています。

本当かどうかチェックするために、AppStoreにアップしていないアプリで、admobページで発行した本番のユニットIDを設定するとどうなるかやってみます。

まずは新しいプレースメントを作成し、iOSにadmobのページで発行した本番のユニットIDを設定します。

使用するプレースメントを変更。

ログを出すためにDevelopment Buildにします。

iPhoneで誘導ボタンを押すと、

広告のロードに失敗して、同意パネルは出てきませんでした。

AppStoreとAdmobの審査を同時にクリアする方法

admobのページで以下の記載がありました。

your app must be reviewed and approved before it can fully serve ads.

https://support.google.com/admob/answer/10564477

アプリをAppStoreにアップして審査を受けて承認されないと広告は配信されないようです。

初回にアプリを審査に出す時には、広告のロードが失敗してもリワードを受け取るようにするのが良いです。

  1. AppStore申請時には広告のロードが失敗しますが、リワードはゲットできる。アプリの動作に問題がないので、Appleの審査が通る。
  2. アプリがAppStoreに公開される。
  3. admob管理ページからストアリンクを通す。admobの審査は自動的に行われる。
  4. 問題がなければGoogleから承認のメールが来る。その後広告がロードされて表示されるようになる。

こうするとAppStoreへの申請は1回で大丈夫です。

ちなみにadmobのページからアプリのストアリンクを通す時には、開発者名やアプリ名で検索しても出てこない時があるので、アプリのURLで複数回検索した方が良いです。

AppStoreとadmobの審査は共に1日くらいで終わるので、広告が表示されるまで2日あれば十分でしょう。

 

ABOUTこの記事をかいた人

個人アプリ開発者。Python、Swift、Unityのことを発信します。月間2.5万PVブログ運営。 Twitter:@yamagablog