Skip to content

arartawil/FirebaseToolkit

Repository files navigation

Firebase Toolkit for Unity

High-level Firebase systems for Unity - Authentication, Leaderboards, Save System, Profiles, and more.

๐ŸŽฏ Current Version: v0.2.0

โœ… What's Included

  • Email/Password Authentication

    • User registration with validation
    • Sign in/Sign out functionality
    • Password reset capability
    • User profile management
  • Authenticated Leaderboards

    • Submit scores (authenticated users only)
    • Get top scores with rankings
    • User profile integration
    • Real-time database sync
  • Cloud Save System ๐Ÿ†•

    • Save game state to cloud
    • Load from any device
    • Multiple save slots
    • Auto-save functionality
    • Save metadata for quick loading
    • Cross-device synchronization
  • Complete UI System

    • Login/Register panels
    • Profile management
    • Leaderboard display
    • Save slot management
    • Game integration examples

๐Ÿ“ฆ Installation

Prerequisites

  1. Unity 2020.3 or higher
  2. Firebase SDK for Unity

Setup Steps

  1. Import Firebase SDK packages
  2. Add google-services.json to Assets/ folder
  3. Copy Firebase Toolkit to your project
  4. Follow the setup guide in Examples/AuthLeaderboardDemo/SETUP_GUIDE.md

๐Ÿš€ Quick Start

1. Add FirebaseManager to Scene

// FirebaseManager initializes automatically
// Access anywhere via singleton:
FirebaseManager.Instance

2. Implement Authentication

using FirebaseToolkit.Auth;

AuthSystem auth = new AuthSystem();

// Register new user
auth.RegisterUser(email, password, (success, message) => {
    if (success) {
        Debug.Log("Registration successful!");
    }
});

// Sign in
auth.SignInUser(email, password, (success, message) => {
    if (success) {
        Debug.Log("Signed in!");
    }
});

// Sign out
auth.SignOut();

3. Use Leaderboard System

using FirebaseToolkit.Leaderboard;

LeaderboardSystem leaderboard = new LeaderboardSystem("global");

// Submit score (requires authentication)
leaderboard.SubmitScore(score, (success, message) => {
    if (success) {
        Debug.Log("Score submitted!");
    }
});

// Get top scores
leaderboard.GetTopScores(10, entries => {
    foreach (var entry in entries) {
        Debug.Log($"#{entry.rank} {entry.displayName}: {entry.score}");
    }
});

4. Use Cloud Save System ๐Ÿ†•

using FirebaseToolkit.SaveSystem;

SaveSystem.SaveSystem saveSystem = new SaveSystem.SaveSystem();

// Save game state
SaveSystem.SaveData data = new SaveSystem.SaveData
{
    playerLevel = 5,
    coins = 1000,
    health = 80,
    playtime = 3600f
};

saveSystem.SaveGame(data, "slot1", (success, message) => {
    if (success) {
        Debug.Log("Game saved to cloud!");
    }
});

// Load game state
saveSystem.LoadGame("slot1", (data, success) => {
    if (success) {
        // Restore your game state
        playerLevel = data.playerLevel;
        coins = data.coins;
        Debug.Log("Game loaded from cloud!");
    }
});

// Get all saves
saveSystem.GetAllSaves((saves) => {
    foreach (var save in saves) {
        Debug.Log($"{save.slotName}: Level {save.playerLevel}");
    }
});

// Enable auto-save
AutoSave autoSave = gameObject.AddComponent<AutoSave>();
autoSave.SetAutoSaveEnabled(true);
autoSave.SetSaveInterval(30f); // Save every 30 seconds

๐Ÿ“– Documentation

Core Components

FirebaseManager

Central singleton for Firebase initialization and configuration.

Properties:

  • IsReady - Firebase initialization status
  • IsSignedIn - User authentication status
  • CurrentUser - Current Firebase user
  • Database - Firebase Realtime Database reference
  • Auth - Firebase Authentication reference

Events:

  • OnFirebaseReady - Fired when Firebase is initialized
  • OnUserSignedIn - Fired when user signs in
  • OnUserSignedOut - Fired when user signs out

AuthSystem

Handles all authentication operations.

Methods:

  • RegisterUser(email, password, callback)
  • SignInUser(email, password, callback)
  • SignOut()
  • SendPasswordResetEmail(email, callback)
  • UpdateDisplayName(name, callback)

LeaderboardSystem

Manages leaderboard data and rankings.

Methods:

  • SubmitScore(playerName, score, callback)
  • GetTopScores(count, callback)

๐ŸŽฎ Examples

Complete Auth + Leaderboard Demo

Located in: Examples/AuthLeaderboardDemo/

Features:

  • Full authentication flow
  • Score submission
  • Leaderboard display
  • User profiles

Setup Guide: See Examples/AuthLeaderboardDemo/SETUP_GUIDE.md

Simple Leaderboard Demo

Located in: Examples/LeaderboardDemo/

Basic leaderboard implementation without authentication.

๐Ÿ”’ Firebase Security Rules

IMPORTANT: Configure your Firebase Realtime Database rules:

{
  "rules": {
    "leaderboards": {
      "$leaderboardId": {
        ".read": "auth != null",
        "$userId": {
          ".write": "auth != null && auth.uid == $userId"
        }
      }
    },
    "users": {
      "$userId": {
        ".read": "auth != null",
        ".write": "auth != null && auth.uid == $userId"
      }
    }
  }
}

๐Ÿ“Š Database Structure

Leaderboards

leaderboards/
  {leaderboardId}/
    {userId}/
      playerName: string
      email: string
      score: number
      timestamp: timestamp

User Profiles

users/
  {userId}/
    email: string
    displayName: string
    createdAt: timestamp
    totalScore: number
    gamesPlayed: number

๐Ÿ› ๏ธ API Reference

FirebaseManager Events

// Subscribe to Firebase ready event
FirebaseManager.Instance.OnFirebaseReady += () => {
    Debug.Log("Firebase is ready!");
};

// Subscribe to sign in event
FirebaseManager.Instance.OnUserSignedIn += (user) => {
    Debug.Log($"User signed in: {user.Email}");
};

// Subscribe to sign out event
FirebaseManager.Instance.OnUserSignedOut += () => {
    Debug.Log("User signed out");
};

Authentication Flow

// Complete authentication example
AuthSystem auth = new AuthSystem();

// Register
auth.RegisterUser("user@example.com", "password123", (success, message) => {
    Debug.Log(message);
});

// Sign in
auth.SignInUser("user@example.com", "password123", (success, message) => {
    if (success) {
        // User is now signed in
        string userId = FirebaseManager.Instance.GetUserId();
        string email = FirebaseManager.Instance.GetUserEmail();
    }
});

// Update profile
auth.UpdateDisplayName("PlayerName", (success, message) => {
    Debug.Log(message);
});

// Sign out
auth.SignOut();

Leaderboard Operations

// Create leaderboard
LeaderboardSystem leaderboard = new LeaderboardSystem("global");

// Submit score
string playerName = FirebaseManager.Instance.GetUserDisplayName();
leaderboard.SubmitScore(playerName, 1000, success => {
    if (success) {
        // Score submitted
    }
});

// Get top 10 scores
leaderboard.GetTopScores(10, entries => {
    foreach (var entry in entries) {
        Debug.Log($"#{entry.rank} - {entry.playerName}: {entry.score}");
    }
});

๐Ÿ› Troubleshooting

Common Issues

Firebase not initializing:

  • Verify google-services.json is in Assets/ folder
  • Check Package Name matches Firebase console
  • Ensure Firebase SDK is properly imported

Authentication errors:

  • Enable Email/Password auth in Firebase Console
  • Check network connectivity
  • Verify Firebase API key is valid

Leaderboard not working:

  • User must be signed in to submit scores
  • Check Firebase security rules
  • Verify database URL is correct

Debug Logging

Enable debug logs in FirebaseManager Inspector:

  • Check "Enable Debug Logs"

๐Ÿ—บ๏ธ Roadmap

v0.2.0 (Planned)

  • Cloud Save System
  • Advanced Profile System
  • Social Authentication (Google, Facebook)
  • Multiple leaderboards management
  • Real-time leaderboard updates

v0.3.0 (Planned)

  • Offline support
  • Cloud Functions integration
  • Analytics integration
  • Push notifications

๐Ÿ“ Changelog

See CHANGELOG.md for version history.

๐Ÿ“„ License

[Your License Here]

๐Ÿค Contributing

Contributions are welcome! Please feel free to submit issues and pull requests.

๐Ÿ“ง Support

For issues and questions:

  • Check the documentation
  • Review example scenes
  • Submit an issue on GitHub

Built with โค๏ธ for Unity developers