Unity IAPをつかっているとUnity Analyticsが無効化できない問題
モバイルアプリに課金コンテンツがある場合、Unityユーザーであればたいていお世話になっている信頼と実績のIAPライブラリといえば、Unity IAPです。
Unity IAPは、各アプリストアで用意されている課金フレームワークとUnityとの間で橋渡しをしてくれているラッパー(Wrapper)です。ですので、一見するとUnityのクラウドサービスには関連がなさそうに見えますが、Unity IAPを有効化すると、Unity Analyticsも有効にしなければならないという制約があります。これはプレイヤーの課金情報をそのままUnity Analyticsで集計してユーザーの分析やエンゲージメントを高める目的でこのような仕様になっていると思われますが、時と場合によっては余計なお世話です。
Unity Analyticsが共存して困る場面
近年、特に海外ではプライバシーに対する意識が高まっており、GDPRやCCPAなどのプライバシー保護法の施行をはじめとし、Apple社がApp Storeへの申請時にPrivacy Surveyへの回答を必須としたり、個人情報にあたる項目の取得を厳しく制限したりと、様々な議論もありながら状況は変化し続けています。
アプリ開発者も個人情報の取得に対して敏感にならざるを得ない中で、Unity Analyticsを使いたくないという場面も当然あります。しかし、アプリには課金コンテンツがあり、Unity IAPを使っているとUnity AnalyticsをOFFにできない...というジレンマがここで起きます。
スクリプトからUnity AnalyticsをOFFにする
じゃあどうすればよいのかというと、ServicesウィンドウのUnity AnalyticsはONにしたまま、Unity Analyticsが情報を送る前にスクリプトで切ってしまえば良いのです。これを実現する方法はいろいろと考えられますが、おそらくベストプラクティスはこれだろう、というスクリプトが以下になります。
using UnityEngine;
public class DisableAnalytics : MonoBehaviour
{
[RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.BeforeSceneLoad)]
public static void OnRuntimeMethodLoad()
{
UnityEngine.Analytics.Analytics.enabled = false;
UnityEngine.Analytics.Analytics.deviceStatsEnabled = false;
UnityEngine.Analytics.Analytics.limitUserTracking = true;
UnityEngine.Analytics.Analytics.initializeOnStartup = false;
UnityEngine.Analytics.PerformanceReporting.enabled = false;
}
}
ゲームオブジェクトにアタッチする必要はありません。
これでUnity Analyticsを(ある意味では)無効化してUnity IAPを使い続けることができます。めでたしめでたし