0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

FacebookでUnityのゲーム広告を配信するまで

Last updated at Posted at 2022-01-31

Unityで製作したFacebookで広告を配信する方法が書かれた記事が少なかったため、情報共有のため書きます。

全体の流れ

  1. Facebookへの登録
  2. Meta for Developersへの登録
  3. Facebook SDKをUnityにインポートする
  4. ATT(App Tracking Transparency)への対応
  5. AndroidでBuildする時の注意点
  6. 広告を出稿する

環境

MacBook Pro Monterey 12.0
Unity 2020.3.24f1
Facebook SDK 11.0

なお、Facebookは設定方法やWebのレイアウトが頻繁に更新されるので、手順が違った場合、適宜自分で調べてください。

Facebookへの登録

まず、Facebook Business Managerへの登録をします。Facebook Business Managerとは、広告アカウント、Facebookページ、アカウントの権限などを全て一か所で設定できるサイトです。

次に、広告アカウント支払方法を追加していきます。
詳しいやり方は省きますので、こちらの動画を参考にしてください。Business Managerは構造が複雑ですが、それが適切に説明されているので理解しやすいと思います。また、やってはいけない広告出稿についても言及されています。

また、Instagramのアカウントも作っておくと後々便利かと思います。FacebookはInstagramへの広告も自動でしてくれます。

Meta for Developersへの登録

Meta for Developersへの登録をします。Meta for Developersとは、Facebookを使ったログインなどを簡単に実装できるツール群です。これで、アプリとFacebook Business Managerを紐づけます。

アプリの作成

  1. ログインする
  2. 右上のマイアプリをクリック
  3. アプリの作成をクリック
  4. ゲームを選択
  5. 必要な情報を入力する

とりあえず以上です。Facebook SDKをインポートしたら、また戻ってきます。

Facebook SDKをUnityにインポートする

下記のリンクからFacebook SDK for Unityを入手します。

unity packageをインポートします。
タブにFacebookが追加されるので、Edit Settingsを選択。
スクリーンショット 2022-01-31 9.46.57.png

するとインスペクターに表示されるので、先ほどMeta for Developersで作ったアプリのFacebook App Idをインスペクターに入力します。Facebook App Id設定>ベーシックから見れます。

また、androidでローンチする場合は、Debug Android Key Hashも後に必要なのでメモしておきます。
スクリーンショット 2022-01-31 9.48.22.png

Meta for Developersに戻り、設定>ベーシックから、必要な情報を入手します。
その後、ページの下部のプラットフォームを追加から任意のプラットフォームを選択します。必要な情報を入手してください。

iOSの場合、iPhoneストアIDiPadストアIDを記入する欄があるのですが、それはAppleStoreのURLのidと書かれた番号になります。
スクリーンショット 2022-01-31 101111_LI (2).jpg
Androidの場合、キーハッシュが先ほどメモしたDebug Android Key Hashになります。

ATT(App Tracking Transparency)への対応

広告からアプリへの流入を計測するためにFacebook SDKをInisializeする必要があります。これをしないと広告出稿出来ません。

また、iOS14.5以降ATT(App Tracking Transparency)へ対応するために、ダイアログを表示します。
自分はAdmobも使用しているので、そこに付け足す形で実装しました。詳しい解説は下記のリンクをご覧ください。

一応コードも置いておきますが、これが正しい使い方か分かりません・・・
正しい情報知っている方がいらしたら、情報提供お願いします。

ATT.cs
using UnityEngine;
using UnityEngine.SceneManagement;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using GoogleMobileAds.Placement;
using Facebook.Unity;
using System;

public class ATT : MonoBehaviour
{


    private void Awake()
    {
#if UNITY_IOS
        int status = ATTUtili.GetTrackingAuthorizationStatus();
        Debug.Log("ATT状態 = " + status);
        // ATT状態は4択
        // ATTrackingManagerAuthorizationStatusNotDetermined = 0
        // ATTrackingManagerAuthorizationStatusRestricted    = 1
        // ATTrackingManagerAuthorizationStatusDenied        = 2
        // ATTrackingManagerAuthorizationStatusAuthorized    = 3
        if (status == 0)
        {
            // ATT設定可能 & 未承認なのでATT承認要求アラートを表示
            ATTUtili.RequestTrackingAuthorization(CallbackFunction);
        }
        else
        {
            if (status == 1 || status == 2)
            {
                // ATT設定不可なので、ATT承認が必要になる旨をユーザーに伝える
            }
            else if(status == 3)
            {
                FB.Init(this.OnInitComplete, this.OnHideUnity);
            }
            // Google Mobile Ads SDK を初期化
            MobileAds.Initialize(initStatus =>
            {
                // AdMobからのコールバックはメインスレッドで呼び出される保証がないため、次のUpdate()で呼ばれるようにMobileAdsEventExecutorを使用
                MobileAdsEventExecutor.ExecuteInUpdate(() =>
                {
                    // バナーをリクエスト
                    RequestAds();
                });
            });
        }

#elif UNITY_ANDROID
        MobileAds.Initialize(initStatus =>
        {
            // AdMobからのコールバックはメインスレッドで呼び出される保証がないため、次のUpdate()で呼ばれるようにMobileAdsEventExecutorを使用
            MobileAdsEventExecutor.ExecuteInUpdate(() =>
            {
                // バナーをリクエスト
                RequestAds();
            });
        });
#endif
    }

    private void OnHideUnity(bool isUnityShown)
    {

    }

    private void OnInitComplete()
    {
        if (FB.IsInitialized)
        {
            FB.ActivateApp();
        }
        else
        {
            //Handle FB.Init
            FB.Init(() => {
                FB.ActivateApp();
                FB.Mobile.SetAdvertiserTrackingEnabled(true);
            });
        }
    }

    void CallbackFunction(int status)
    {
        Debug.Log("ATT最新状況 --> " + status);
        // ATTの状況を待ってから Google Mobile Ads SDK を初期化
        MobileAds.Initialize(initStatus => {
            // AdMobからのコールバックはメインスレッドで呼び出される保証がないため、次のUpdate()で呼ばれるようにMobileAdsEventExecutorを使用
            MobileAdsEventExecutor.ExecuteInUpdate(() => {
                // バナーをリクエスト
                RequestAds();
            });
        });

        // Facebook SDK
        if (status == 1 || status == 2)
        {
            // 設定不可
        }
        else if (status == 3)
        {
            FB.Init(this.OnInitComplete, this.OnHideUnity);
        }
    }

    void RequestAds()
    {
        //バナーをリクエスト
    }

AndroidでBuildする時の注意点

AndroidをBuildする際、Facebook SDKが他のUnityPackageと競合を起こすので解消します。そのままBuild通る方はやらなくても大丈夫だと思います。

1. Error

Configure project :launcher WARNING: The option setting 'android.enableR8=false' is deprecated

対策

Project Settings>Player>Android>Publish Settings>Build>Custom Gradle Properties Templateをチェック。表示されるファイルのR8該当行の先頭に#を追加

#android.enableR8=MINIFY_WITH_R_EIGHT

2. Error

D8: Cannot fit requested classes in a single dex file (# methods: xxxxx > 65536) com.android.builder.dexing.DexArchiveMergerException: Error while merging dex archives: The number of method references in a .dex file cannot exceed 64K.

対策

Project Settings>Player>Android>Publish Settings>Build>Custom Launcher Gradle Templateを開く。表示されるファイルに以下の行を追加する。

build.gradle
android {
    defaultConfig {
        ...
        minSdkVersion 15
        targetSdkVersion 28
        multiDexEnabled true  <<これ
    }
    ...
}

dependencies {
    implementation "androidx.multidex:multidex:2.0.1" <<これ
}

対策は下記のリンクを参考にしました。

広告を出稿する

長くなったので別記事です。

参考にしたドキュメント

自己紹介

ハイパーカジュアルゲームを個人製作してます!
フォローお願いします!
@1MoNo2Prod

以上です。情報漏れや意見などございましたら、気軽にコメントしてください。フィードバック待ってます!

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?