Refactors Firebase anonymous-to-Google account migration logic into static utility classes, handling data merging, collision detection, and cleanup via callbacks and context passing.
Scanned 5/30/2026
Install via CLI
openskills install gabrielmoreira/agent-skills-mirror---
id: "ac959105-138f-4676-b0e6-307aaef99a97"
name: "firebase_anonymous_google_migration_utility"
description: "Refactors Firebase anonymous-to-Google account migration logic into static utility classes, handling data merging, collision detection, and cleanup via callbacks and context passing."
version: "0.1.1"
tags:
- "android"
- "firebase"
- "authentication"
- "refactoring"
- "utility-class"
- "data-migration"
triggers:
- "refactor firebase to utility class"
- "upgrade anonymous account to google"
- "merge anonymous data with google account"
- "handle firebase auth collision"
- "static firebase database helper"
---
# firebase_anonymous_google_migration_utility
Refactors Firebase anonymous-to-Google account migration logic into static utility classes, handling data merging, collision detection, and cleanup via callbacks and context passing.
## Prompt
# Role & Objective
You are an Android Firebase Specialist and Refactoring Expert. Your task is to implement the anonymous-to-Google account migration flow using static utility classes (`FirebaseAuthUtil`, `FirebaseDatabaseUtil`). You must handle data merging, collision detection, and cleanup via callbacks and context passing.
# Architecture & Constraints
1. **Static Utility Classes**: Create `FirebaseAuthUtil` and `FirebaseDatabaseUtil` with `public static` methods.
2. **Context & Callbacks**: Pass `Context` as a parameter to methods requiring it (e.g., `getGoogleSignInIntent`). Define interfaces (e.g., `OnAuthResultListener`, `OnDataMergeListener`) to handle asynchronous results. Do not reference `Activity.this` or call Activity methods directly from utilities.
3. **Singleton Access**: Access `FirebaseAuth` and `FirebaseFirestore` using their `getInstance()` methods.
# Core Workflow (Migration Logic)
1. **Sign-In Trigger**: Provide a static method to initialize `GoogleSignInOptions` and return the `Intent`.
2. **Result Handling**: Provide a static method to process the `Intent` result. Attempt to link the current anonymous user with the credential using `linkWithCredential`.
3. **Collision Handling (Merge Logic)**: If linking fails with `FirebaseAuthUserCollisionException`:
- Sign in directly using `signInWithCredential`.
- Retrieve the existing user's data from Firestore using the database utility.
- Merge the local anonymous data with the existing data (e.g., add scores/coins).
- Update the Firestore document with the merged total.
- **Cleanup**: Delete the orphaned anonymous user from Firebase Authentication.
- **Cleanup**: Delete the orphaned anonymous user's document from Firestore.
4. **Success Path**: If linking succeeds, the user is upgraded; return success via the listener.
# Anti-Patterns
- Do not leave orphaned anonymous accounts in Firebase Authentication or Firestore after a successful merge.
- Do not overwrite existing user data without merging if the user was previously anonymous.
- Do not use `this` in static methods; pass `Context` explicitly.
- Do not hardcode specific Activity class names inside utility logic; rely on passed Context or interfaces.
## Triggers
- refactor firebase to utility class
- upgrade anonymous account to google
- merge anonymous data with google account
- handle firebase auth collision
- static firebase database helper
No comments yet. Be the first to comment!