|
|
@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
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.");
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|