Firebase Android 完整开发指南
Firebase 是 Google 提供的一个移动和 Web 应用开发平台,它提供了一系列后端服务(如数据库、认证、存储、分析等),让你可以专注于构建出色的应用体验,而无需管理服务器。

本教程将带你一步步学习如何在 Android 项目中集成和使用 Firebase。
第一部分:环境准备与项目设置
在开始编码之前,我们需要完成一些准备工作。
步骤 1:创建 Firebase 项目
- 访问 Firebase 控制台。
- 点击“创建项目”,并给你的项目命名(
MyAwesomeApp)。 - 按照屏幕提示完成创建过程,你可以暂时启用 Google Analytics,也可以选择不启用。
步骤 2:创建 Android 应用并连接 Firebase
- 在 Firebase 控制台中,选择你的项目。
- 点击“添加应用”图标,然后选择 Android 图标。
- 在包名 字段中,输入你的 Android 应用的包名,你可以在
app/build.gradle文件的applicationId中找到它。 - (可选)输入应用昵称和调试签名证书的 SHA-1,对于初学者,可以暂时跳过。
- 点击“注册应用”。
- 下载
google-services.json文件。这是关键一步! - 将下载的
google-services.json文件拖放到你的 Android Studio 项目的app模块目录下。
步骤 3:配置 Android Studio
Firebase 使用 Google Services Gradle 插件来处理配置。
-
在项目级别的
build.gradle文件中,添加classpath依赖:
(图片来源网络,侵删)// build.gradle (Project: YourProjectName) buildscript { dependencies { // ... other dependencies classpath 'com.google.gms:google-services:4.4.2' // 使用最新版本 } } -
在应用模块级别的
build.gradle文件中,应用插件并添加 Firebase BOM (Bill of Materials)。// build.gradle (Module: app) plugins { id 'com.android.application' id 'com.google.gms.google-services' // 在文件顶部应用插件 } dependencies { // Import the BoM for the Firebase platform implementation platform('com.google.firebase:firebase-bom:32.7.0') // 使用最新版本 // Add the dependency for the Firebase Authentication library // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-auth-ktx' // ... other dependencies }
提示: 使用 Firebase BOM 可以确保你使用的所有 Firebase 库版本都是兼容的,并且会自动更新。
第二部分:核心功能实战
我们来逐一学习 Firebase 的核心功能。
Firebase Authentication (身份验证)
让用户能够安全地登录你的应用。

场景: 实现邮箱/密码登录。
步骤:
-
在 Firebase 控制台启用认证方法:
- 进入 Firebase 控制台 > Authentication > 登录方法。
- 启用“电子邮件/密码”提供商。
-
添加登录 UI (XML): 在你的布局文件(如
activity_main.xml)中添加输入框和按钮。<EditText android:id="@+id/edt_email" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Email" /> <EditText android:id="@+id/edt_password" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Password" android:inputType="textPassword" /> <Button android:id="@+id/btn_signup" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Sign Up" /> <Button android:id="@+id/btn_signin" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="Sign In" /> -
编写登录逻辑 (Kotlin): 在你的 Activity 或 ViewModel 中,编写注册和登录的代码。
import com.google.firebase.auth.FirebaseAuth import com.google.firebase.auth.ktx.auth import com.google.firebase.ktx.Firebase class AuthActivity : AppCompatActivity() { private lateinit var auth: FirebaseAuth override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_auth) // 初始化 Firebase Auth auth = Firebase.auth val btnSignup = findViewById<Button>(R.id.btn_signup) val btnSignin = findViewById<Button>(R.id.btn_signin) btnSignup.setOnClickListener { val email = findViewById<EditText>(R.id.edt_email).text.toString() val password = findViewById<EditText>(R.id.edt_password).text.toString() createAccount(email, password) } btnSignin.setOnClickListener { val email = findViewById<EditText>(R.id.edt_email).text.toString() val password = findViewById<EditText>(R.id.edt_password).text.toString() signIn(email, password) } } private fun createAccount(email: String, password: String) { auth.createUserWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // 注册成功 Log.d("Auth", "createUserWithEmail:success") val user = auth.currentUser // 更新UI或跳转到主界面 } else { // 注册失败 Log.w("Auth", "createUserWithEmail:failure", task.exception) Toast.makeText(baseContext, "Authentication failed.", Toast.LENGTH_SHORT).show() } } } private fun signIn(email: String, password: String) { auth.signInWithEmailAndPassword(email, password) .addOnCompleteListener(this) { task -> if (task.isSuccessful) { // 登录成功 Log.d("Auth", "signInWithEmail:success") val user = auth.currentUser // 更新UI或跳转到主界面 } else { // 登录失败 Log.w("Auth", "signInWithEmail:failure", task.exception) Toast.makeText(baseContext, "Authentication failed.", Toast.LENGTH_SHORT).show() } } } // 检查当前用户状态 public override fun onStart() { super.onStart() val currentUser = auth.currentUser if (currentUser != null) { // 用户已登录,可以直接跳转到主界面 // startActivity(Intent(this, MainActivity::class.java)) } } }
Cloud Firestore (数据库)
一个灵活、可扩展的 NoSQL 云数据库,非常适合存储应用数据。
场景: 存储和读取用户笔记。
步骤:
-
在 Firebase 控制台创建数据库:
- 进入 Firestore Database > 创建数据库。
- 选择“以测试模式启动”,这样在认证之前也可以读写。(生产环境请务必设置安全规则!)
- 选择一个位置。
-
添加依赖: 确保你的
app/build.gradle中有 Firestore 依赖。// 使用 BOM,无需指定版本 implementation 'com.google.firebase:firebase-firestore-ktx'
-
编写读写逻辑 (Kotlin): 假设我们有一个
notes集合,每个笔记是一个文档。import com.google.firebase.firestore.FirebaseFirestore import com.google.firebase.firestore.ktx.firestore import com.google.firebase.ktx.Firebase class FirestoreActivity : AppCompatActivity() { private lateinit var db: FirebaseFirestore override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_firestore) // 初始化 Firestore db = Firebase.firestore // 写入数据 addNote("My First Note", "This is the content of my first note.") // 读取数据 readNotes() } private fun addNote(title: String, content: String) { // 创建一个新的笔记对象 val note = hashMapOf( "title" to title, "content" to content, "timestamp" to System.currentTimeMillis() ) // 将笔记添加到 "notes" 集合 db.collection("notes") .add(note) .addOnSuccessListener { documentReference -> Log.d("Firestore", "DocumentSnapshot added with ID: ${documentReference.id}") } .addOnFailureListener { e -> Log.w("Firestore", "Error adding document", e) } } private fun readNotes() { db.collection("notes") .get() .addOnSuccessListener { result -> for (document in result) { Log.d("Firestore", "${document.id} => ${document.data}") // 在这里更新你的UI列表 } } .addOnFailureListener { exception -> Log.w("Firestore", "Error getting documents.", exception) } } }
Firebase Realtime Database (实时数据库)
一个 NoSQL 数据库,专注于实时数据同步,当数据发生变化时,连接到它的客户端会立即收到更新。
场景: 实现一个简单的实时聊天应用。
步骤:
-
在 Firebase 控制台创建数据库:
- 进入 Realtime Database > 创建数据库。
- 同样,为了测试,可以暂时设置安全规则为开放读写。
-
添加依赖:
implementation 'com.google.firebase:firebase-database-ktx'
-
编写实时监听逻辑 (Kotlin): 假设我们有一个
messages节点。import com.google.firebase.database.FirebaseDatabase import com.google.firebase.database.ktx.database import com.google.firebase.ktx.Firebase class ChatActivity : AppCompatActivity() { private lateinit var database: FirebaseDatabase override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_chat) // 初始化 Realtime Database database = Firebase.database // 引用 messages 节点 val myRef = database.getReference("messages") // 写入一条新消息 myRef.push().setValue("Hello, Firebase!") // 实时监听 messages 节点的变化 myRef.addChildEventListener(object : ChildEventListener { override fun onChildAdded(snapshot: DataSnapshot, previousChildName: String?) { val value = snapshot.value Log.d("RealtimeDB", "Message: $value") // 当有新消息时,更新UI } // 其他回调方法... override fun onChildChanged(snapshot: DataSnapshot, previousChildName: String?) {} override fun onChildRemoved(snapshot: DataSnapshot) {} override fun onChildMoved(snapshot: DataSnapshot, previousChildName: String?) {} override fun onCancelled(error: DatabaseError) {} }) } }
Cloud Storage (云存储)
用于存储用户生成的文件,如图片、视频等。
场景: 允许用户上传和下载一张图片。
步骤:
-
在 Firebase 控制台创建存储桶:
- 进入 Storage > 开始使用。
- 选择一个位置,并设置初始安全规则(为了测试,可以设置为开放)。
-
添加依赖:
implementation 'com.google.firebase:firebase-storage-ktx'
-
编写上传/下载逻辑 (Kotlin):
import com.google.firebase.storage.FirebaseStorage import com.google.firebase.storage.ktx.storage import com.google.firebase.ktx.Firebase class StorageActivity : AppCompatActivity() { private lateinit var storage: FirebaseStorage override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_storage) // 初始化 Storage storage = Firebase.storage // 假设你有一个 ImageView 和一个 Button val imageView = findViewById<ImageView>(R.id.imageView) val uploadButton = findViewById<Button>(R.id.btn_upload) // 上传图片 uploadButton.setOnClickListener { // 从设备选择一张图片 (这里简化处理,实际应使用 Intent) val imageUri = ... // 获取图片的 URI val storageRef = storage.reference val riversRef = storageRef.child("images/${imageUri.lastPathSegment}") riversRef.putFile(imageUri) .addOnSuccessListener { Log.d("Storage", "Upload successful") } .addOnFailureListener { Log.e("Storage", "Upload failed", it) } } // 下载图片 val storageRef = storage.reference val islandRef = storageRef.child("images/some_image_name.jpg") val ONE_MEGABYTE: Long = 1024 * 1024 islandRef.getBytes(ONE_MEGABYTE).addOnSuccessListener { // it 是图片的字节数组 val bitmap = BitmapFactory.decodeByteArray(it, 0, it.size) imageView.setImageBitmap(bitmap) }.addOnFailureListener { Log.e("Storage", "Download failed", it) } } }
第三部分:进阶与最佳实践
当你掌握了基础功能后,可以学习以下内容来构建更强大的应用。
-
Firebase Crashlytics (崩溃分析):
- 作用: 实时监控应用崩溃,帮助你快速定位和修复问题。
- 集成: 在
build.gradle中添加依赖,并按照向导配置,它会自动捕获未处理的异常。
-
Firebase Analytics (分析):
- 作用: 收集用户行为数据,帮助你了解用户如何使用你的应用。
- 集成: 通常通过 Firebase SDK 自动完成,你可以通过添加自定义事件来追踪特定操作,
FirebaseAnalytics.getInstance(this).logEvent("login_success", null)
-
Firebase Remote Config (远程配置):
- 作用: 无需发布新版本即可动态更改应用的外观和行为,你可以远程开启/关闭一个功能,或更改按钮的颜色。
- 使用: 在控制台创建参数,然后在应用中获取这些参数的值。
-
Firebase Performance Monitoring (性能监控):
- 作用: 自动和手动追踪应用的性能指标,如应用启动时间、网络请求耗时等。
- 集成: 添加依赖后,它会自动开始收集数据。
-
安全规则:
- 这是最重要的一点! 在开发时为了方便,你可能设置了开放的安全规则,但在生产环境中,必须为 Firestore 和 Realtime Database 编写严格的安全规则,以保护用户数据不被未授权访问。
- 示例 (Firestore):
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 只有已认证的用户才能读写自己的笔记 match /notes/{noteId} { allow read, write: if request.auth != null; } } }
第四部分:学习资源
- 官方文档 (首选):
- Firebase Android SDK 文档 - 最权威、最新的安装和设置指南。
- Firebase Android Codelabs - 互动式编码实验室,边学边做。
- 视频教程:
- Google Developers YouTube 频道: 有大量官方的 Firebase 教程和会议视频。
- YouTube 搜索: 搜索 "Firebase Android Tutorial" 可以找到很多优秀的第三方教程。
- 社区与支持:
- Stack Overflow: 标签为
firebase的问题。 - Firebase 官方论坛: 官方支持社区。
- Stack Overflow: 标签为
Firebase 是一个功能强大的平台,可以极大地简化 Android 开发流程,本教程为你提供了一个清晰的路线图:
- 设置项目:连接 Firebase 和 Android Studio。
- 掌握核心:从 Authentication、Firestore/Realtime DB 和 Storage 开始。
- 提升体验:使用 Crashlytics、Analytics 等工具优化应用。
- 保障安全:务必编写并测试你的安全规则。
从一个小功能开始,比如先实现用户注册,然后尝试存储一些用户数据,随着你对各个组件的熟悉,你就可以将它们组合起来,构建出功能丰富、稳定可靠的移动应用,祝你编码愉快!
