Skip to main content

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 UserProfile and MyUserProfile classes

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 metadata
  • InteriorItem β€” deployed object instance
  • OwnedItem β€” user inventory record
  • Vector3Firebase β€” lightweight serializable vector wrapper

🧠 Shared Behavior​

All services:

  • Implement Initialize(GameOrchestrator)
  • Maintain a local GameEnvironment config 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.