しっぽを追いかけて

ぐるぐるしながら考えています

Unity と猫の話題が中心   掲載内容は個人の私見であり、所属組織の見解ではありません

Unity + Firebase 利用時に iOS 14 ATT 対応する

※ これは 2021/04/09 時点の Unity 2020.3.3f1, Xcode 12.4, Firebase v7.1.0 の情報です

最新版では動作が異なる可能性がありますのでご注意ください

前回は AdMob 利用時の iOS 14 ATT 対応の手順を確認したので、今回は利用状況分析ツールで便利な Firebase の対応を試す

例によって Firebase 自体の導入手順は 公式サイト をはじめいくらでも紹介されていると思うので省略

といってもやることはスクリプトを用意するだけで済みそう

下記のような AnalyticsService.cs を追加

using System.Threading.Tasks;
using Firebase.Analytics;

/// <summary>
/// 利用状況分析サービス
/// </summary>
public class AnalyticsService
{
    /// <summary>
    /// 初期化
    /// </summary>
    /// <param name="isTrackingEnable">ユーザー情報収集許可フラグ</param>
    public async Task InitilizeAsync(bool isTrackingEnable)
    {
        var result = await Firebase.FirebaseApp.CheckAndFixDependenciesAsync();
        if (result != Firebase.DependencyStatus.Available)
        {
            // Firebase 無効
            return;
        }

        // ユーザー情報の収集切り替え
        FirebaseAnalytics.SetAnalyticsCollectionEnabled(isTrackingEnable);
        FirebaseAnalytics.SetUserProperty(
            FirebaseAnalytics.UserPropertyAllowAdPersonalizationSignals,
             isTrackingEnable ? "YES" : "NO");

        Firebase.FirebaseApp.LogLevel = Firebase.LogLevel.Error;
        FirebaseAnalytics.LogEvent(FirebaseAnalytics.EventLogin);
    }
}

次に Bootstrap.cs を修正

using UnityEngine;
using System.Threading.Tasks;

public class Bootstrap : MonoBehaviour
{
    /// <summary>
    /// 広告制御サービス
    /// </summary>
    private AdvertisingService advertisingService = null;

    private AnalyticsService analyticsService = null;

    /// <summary>
    /// 開始処理
    /// </summary>
    #pragma warning disable 4014
    public async void Start()
    {
#if UNITY_IOS && !UNITY_EDITOR

        var status = NativeService.GetIOSTrackingAuthorizationStatus();

        // 未回答だった場合は ATT 許可要求ダイアログを表示
        if (!status.HasValue)
        {
            status = await NativeService.RequestTrackingAuthorization() as bool?;
        }

        // 本当はシーン遷移などに備えて何らかの方法でシングルトン化した方がよい
        this.advertisingService = new AdvertisingService();
        this.analyticsService = new AnalyticsService();

        if (status.Value)
        {
            // 許可時の処理
            this.advertisingService.Initialize(true);
            Task.Run(()=> this.analyticsService.InitilizeAsync(true))
                .ConfigureAwait(false);
        }
        else
        {
            // 不許可時の処理
            this.advertisingService.Initialize(false);
            Task.Run(()=> this.analyticsService.InitilizeAsync(false))
                .ConfigureAwait(false);
        }
#endif
    }
    #pragma warning restore 4014
}

これでビルドして実行、ATT は許可を選択

Firebase コンソールで Analytics の表示を見てみると

利用状況の追跡

ちゃんとアプリ起動を追跡できたので大丈夫っぽい