Unityで製作したFacebookで広告を配信する方法が書かれた記事が少なかったため、情報共有のため書きます。
全体の流れ
- Facebookへの登録
- Meta for Developersへの登録
- Facebook SDKをUnityにインポートする
- ATT(App Tracking Transparency)への対応
- AndroidでBuildする時の注意点
- 広告を出稿する
環境
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を紐づけます。
アプリの作成
- ログインする
- 右上のマイアプリをクリック
- アプリの作成をクリック
- ゲームを選択
- 必要な情報を入力する
とりあえず以上です。Facebook SDKをインポートしたら、また戻ってきます。
Facebook SDKをUnityにインポートする
下記のリンクからFacebook SDK for Unityを入手します。
unity packageをインポートします。
タブにFacebookが追加されるので、Edit Settingsを選択。
するとインスペクターに表示されるので、先ほどMeta for Developersで作ったアプリのFacebook App Idをインスペクターに入力します。Facebook App Idは設定>ベーシックから見れます。
また、androidでローンチする場合は、Debug Android Key Hashも後に必要なのでメモしておきます。
Meta for Developersに戻り、設定>ベーシックから、必要な情報を入手します。
その後、ページの下部のプラットフォームを追加から任意のプラットフォームを選択します。必要な情報を入手してください。
iOSの場合、iPhoneストアIDやiPadストアIDを記入する欄があるのですが、それはAppleStoreのURLのidと書かれた番号になります。
Androidの場合、キーハッシュが先ほどメモしたDebug Android Key Hashになります。
ATT(App Tracking Transparency)への対応
広告からアプリへの流入を計測するためにFacebook SDKをInisializeする必要があります。これをしないと広告出稿出来ません。
また、iOS14.5以降ATT(App Tracking Transparency)へ対応するために、ダイアログを表示します。
自分はAdmobも使用しているので、そこに付け足す形で実装しました。詳しい解説は下記のリンクをご覧ください。
一応コードも置いておきますが、これが正しい使い方か分かりません・・・
正しい情報知っている方がいらしたら、情報提供お願いします。
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を開く。表示されるファイルに以下の行を追加する。
android {
defaultConfig {
...
minSdkVersion 15
targetSdkVersion 28
multiDexEnabled true <<これ
}
...
}
dependencies {
implementation "androidx.multidex:multidex:2.0.1" <<これ
}
対策は下記のリンクを参考にしました。
広告を出稿する
長くなったので別記事です。
参考にしたドキュメント
自己紹介
ハイパーカジュアルゲームを個人製作してます!
フォローお願いします!
@1MoNo2Prod
以上です。情報漏れや意見などございましたら、気軽にコメントしてください。フィードバック待ってます!