FirebaseProviders
This document outlines the three primary Firebase-backed orchestrator services implemented in the m00m system: authentication, user profile handling, and game data operations. Each service adheres to the IOrchestratorService interface and provides specific functionality within a Firebase-backed Unity game environment.
π‘ FirebaseAuthenticationProviderβ
Implements the IAuthenticationProvider and IOrchestratorService interfaces, handling all user authentication tasks.
public class FirebaseAuthenticationProvider : IAuthenticationProvider, IOrchestratorService
Responsibilitiesβ
- Anonymous and email/password sign-in
- Firebase user registration and display name setup
- Monitoring authentication state
- Integrates with Firebase Cloud Functions (
-registercall,-registerasguest) - Auth state change triggers
OnUserStatusChanged
Key Methodsβ
public Task<User> SignInAnonymously(string displayName)
public Task<User> SignInWithEmail(string email, string password)
public Task<User> CreateAccount(string email, string password, string displayName)
public Task<bool> SignOut()
π€ FirebaseUserDetailProviderβ
Implements IUserDetailProvider and IOrchestratorService. Responsible for profile listening and basic user detail syncing.
public class FirebaseUserDetailProvider : IUserDetailProvider, IOrchestratorService
Responsibilitiesβ
- Listens to changes in user Firestore document
- Caches profiles to minimize reads
- Converts Firebase data to internal
UserProfileandMyUserProfileclasses
Key Methodsβ
public void SubscribeToUserDetails<T>(Action<T> callback)
public Task<UserProfile> GetUserProfile<T>(string userID)
public Task<UserProfile> UpdateDisplayName(string name)
public Task<UserProfile> GetMyUserProfile()
Firestore structures:
[FirestoreData] class FirebaseUserProfile
[FirestoreData] class FirebaseMyUserProfile : FirebaseUserProfile
π FirebaseGameDataProviderβ
Implements IGameDataProvider and IOrchestratorService. Provides all map, interior, and inventory persistence logic.
public class FirebaseGameDataProvider : IGameDataProvider, IOrchestratorService
Responsibilitiesβ
- Manages interiors, item deployments, updates, and removals
- Cloud Function hooks for bulk operations
- Listener-based sync for owned items and interior updates
Key Operationsβ
public Task<MapData> GetInteriorData(string interiorID)
public Task<bool> PurchaseInterior(string interiorID)
public Task<bool> UpdateInteriorItem(string interiorID, params InteriorItemUpdateData[] items)
public Task<bool> RemoveInteriorItems(string interiorID, params string[] instanceIDs)
public Task<List<InteriorItem>> GetInteriorItems(string interiorID)
public Task SubscribeToInterior(string interiorID, Action<List<InteriorItem>> callback)
public Task SubscribeToOwnedItems(Action<Dictionary<string, int>> callback)
Firestore Modelsβ
MapDataβ interior metadataInteriorItemβ deployed object instanceOwnedItemβ user inventory recordVector3Firebaseβ lightweight serializable vector wrapper
π§ Shared Behaviorβ
All services:
- Implement
Initialize(GameOrchestrator) - Maintain a local
GameEnvironmentconfig to bind Firebase environments - Use FirebaseAppCheck via platform-specific providers
- Provide
Release()for clean shutdown and listener disposal
π§ͺ Function Call Conventionsβ
Function calls use GameEnvironment.StringValue() as prefix, e.g.:
- development-interior-confirmitems
- production-playeractions-grantrewards
Ensure corresponding cloud functions are deployed for each environment tier.
π Usageβ
These services are designed to be injected or registered within the orchestrator runtime pipeline, providing runtime glue between game state and backend persistence, authentication, and cloud logic.
IAuthenticationProvider auth = new FirebaseAuthenticationProvider();
IGameDataProvider data = new FirebaseGameDataProvider();
IUserDetailProvider userDetails = new FirebaseUserDetailProvider();
Each service is async-ready and safe for Unityβs runtime environment, and expects GameEnvironment switching to trigger reinitialization logic.