using UnityEngine; using Firebase; using Firebase.Messaging; using System.Threading.Tasks; public class FirebaseManager : MonoBehaviour { private static FirebaseManager _instance; private static bool _isInitialized = false; public static FirebaseManager Instance => _instance; void Awake() { // Singleton: keep only one instance across scenes if (_instance != null) { Destroy(gameObject); return; } _instance = this; DontDestroyOnLoad(gameObject); } async void Start() { if (_isInitialized) return; _isInitialized = true; Debug.Log("Initializing Firebase..."); await InitializeFirebaseAsync(); } private async Task InitializeFirebaseAsync() { var dependencyStatus = await FirebaseApp.CheckAndFixDependenciesAsync(); if (dependencyStatus != DependencyStatus.Available) { Debug.LogError($"Firebase dependency error: {dependencyStatus}"); return; } Debug.Log("✅ Firebase initialized successfully"); // Register for token and message events FirebaseMessaging.TokenReceived += OnTokenReceived; FirebaseMessaging.MessageReceived += OnMessageReceived; // Get the FCM token manually var tokenTask = FirebaseMessaging.GetTokenAsync(); await tokenTask; if (tokenTask.IsCompletedSuccessfully) { string token = tokenTask.Result; Debug.Log("🔥 FCM Token: " + token); // TODO: Save token to PlayFab here if needed } else { Debug.LogWarning("❌ Failed to retrieve FCM token"); } } private void OnTokenReceived(object sender, TokenReceivedEventArgs token) { Debug.Log("📱 Token received from Firebase: " + token.Token); // Optional: save to PlayFab } private void OnMessageReceived(object sender, MessageReceivedEventArgs e) { if (e.Message.Notification != null) { Debug.Log($"📨 Push Notification Received: {e.Message.Notification.Title} - {e.Message.Notification.Body}"); // Optional: Show in-game popup or route to leaderboard } else { Debug.Log("📨 Data-only message received."); } } }