1. FCM 项目创建与基础配置

FCM 项目创建与基础配置 学习卡片

为什么第一步是“项目 + 应用 + 指纹”三件套

FCM 的推送链路能否打通,取决于 Firebase 是否能把“一条消息”准确投递到“你的这台设备上的这个应用”。因此控制台侧必须同时确定三件事:项目(消息归属的云端容器)、Android 应用包名(投递目标应用)、SHA-1 指纹(用于 Google 登录/部分服务校验应用签名身份)。三者缺一,后续 Token 获取或消息下发就会失败。

Firebase 控制台 ① 创建项目 项目名 / 项目 ID(全局唯一) ② 添加 Android 应用 包名 com.example.pushdemo ③ 登记 SHA-1 debug / release 签名指纹 ④ 下载配置文件 google-services.json ⑤ 云端消息下发 FCM 按包名 + Token 投递 Android 工程 app/ 模块 applicationId 与包名一致 google-services.json 放在 app/ 根目录 Gradle 插件 com.google.gms.google-services Firebase SDK 依赖 firebase-messaging 构建 → 安装到设备 生成可接收推送的 APK 验证链路 控制台发测试消息 目标:包名 / Token 设备收到通知 前台 / 后台均可见 Logcat 无报错 无 API_KEY 缺失 Token 可获取 FirebaseMessaging 链路打通 可进入 Token 管理

控制台侧:创建项目与登记应用

  1. 打开 Firebase 控制台,点击“添加项目”,输入项目名称(例如 PushDemo)。项目 ID 会自动生成且全局唯一,后续不可更改,建议与包名保持可识别关系。
  2. 项目创建完成后,在项目概览页点击 Android 图标,进入“添加 Android 应用”流程。
  3. 填写 Android 包名,必须与工程中 app/build.gradle 的 applicationId 完全一致。示例使用 com.example.pushdemo。
  4. 填写应用昵称(可选)与 调试签名证书 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 建立关联的凭证。

  1. 将文件放到 app/ 模块根目录(与 build.gradle 同级),不要放在项目根目录。
  2. 在项目级 build.gradle 的 buildscript.dependencies 中加入 Google 服务插件:
// 项目级 build.gradle
buildscript {
    dependencies {
        classpath 'com.google.gms:google-services:4.4.2'
    }
}
  1. 在 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 复制错误,消息投递不到