1. FCM 项目创建与基础配置
为什么第一步是“项目 + 应用 + 指纹”三件套
FCM 的推送链路能否打通,取决于 Firebase 是否能把“一条消息”准确投递到“你的这台设备上的这个应用”。因此控制台侧必须同时确定三件事:项目(消息归属的云端容器)、Android 应用包名(投递目标应用)、SHA-1 指纹(用于 Google 登录/部分服务校验应用签名身份)。三者缺一,后续 Token 获取或消息下发就会失败。
控制台侧:创建项目与登记应用
- 打开 Firebase 控制台,点击“添加项目”,输入项目名称(例如
PushDemo)。项目 ID 会自动生成且全局唯一,后续不可更改,建议与包名保持可识别关系。 - 项目创建完成后,在项目概览页点击 Android 图标,进入“添加 Android 应用”流程。
- 填写 Android 包名,必须与工程中
app/build.gradle的applicationId完全一致。示例使用com.example.pushdemo。 - 填写应用昵称(可选)与 调试签名证书 SHA-1。SHA-1 通过以下命令获取:
# macOS / Linux
keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
# Windows(默认路径)
keytool -list -v -keystore %USERPROFILE%\.android\debug.keystore -alias androiddebugkey -storepass android -keypass android
输出中找到 SHA1: XX:XX:... 一行,复制填入控制台。若后续要发布 release 版本,需再添加 release keystore 的 SHA-1,否则 release 包可能无法使用依赖签名校验的 Firebase 服务。
SHA-1 只影响需要校验应用签名的功能(如 Google 登录、部分 App Check 场景)。纯 FCM 消息下发主要依赖包名与 Token,但登记 SHA-1 是官方推荐做法,可避免后续接入其他服务时返工。
下载并集成 google-services.json
完成应用登记后,控制台会提供 google-services.json 下载。该文件包含项目 ID、API Key、应用包名等元数据,是客户端与 Firebase 建立关联的凭证。
- 将文件放到
app/模块根目录(与build.gradle同级),不要放在项目根目录。 - 在项目级
build.gradle的buildscript.dependencies中加入 Google 服务插件:
// 项目级 build.gradle
buildscript {
dependencies {
classpath 'com.google.gms:google-services:4.4.2'
}
}
- 在
app/build.gradle底部应用插件,并添加 Firebase Messaging 依赖:
// app/build.gradle
plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
}
dependencies {
implementation platform('com.google.firebase:firebase-bom:33.1.2')
implementation 'com.google.firebase:firebase-messaging'
}
插件
com.google.gms.google-services 必须放在 app/build.gradle 中应用,而不是项目级。若放错位置,构建时不会报错,但运行时会出现 Default FirebaseApp is not initialized。验证基础链路是否可通
完成上述配置后,先构建并安装到真机或模拟器(需带 Google Play 服务)。验证分两步:
- 客户端侧:在
MainActivity中临时打印 Token,确认 Firebase 初始化成功:
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(task -> {
if (!task.isSuccessful()) {
Log.w("FCM", "获取 Token 失败", task.getException());
return;
}
String token = task.getResult();
Log.d("FCM", "当前设备 Token: " + token);
});
- 控制台侧:进入 Firebase 控制台 → Messaging → 新建 campaign → 选择“Firebase Notification messages”,在目标中填入上一步日志里的 Token,发送一条测试通知。
若设备在后台收到通知栏消息,说明项目创建、包名登记、配置文件集成、SDK 依赖与云端投递链路均已打通。此时可进入下一步:Token 的获取与刷新监听。
| 检查项 | 期望结果 | 常见失败原因 |
|---|---|---|
| google-services.json 位置 | app/ 根目录 | 放在项目根目录,插件找不到 |
| applicationId 与包名 | 完全一致 | 控制台填错包名,Token 无法关联 |
| 插件应用位置 | app/build.gradle | 放在项目级,运行时未初始化 |
| 设备 Google Play 服务 | 可用 | 模拟器无 GMS,Token 获取失败 |
| 测试消息目标 | Token 或包名 | Token 复制错误,消息投递不到 |