Rust使用fcm crate发送Firebase消息:Registration ID是什么?
关于FCM Registration ID的说明与获取方法
1. 什么是Registration ID?
Registration ID(现在也常被称为FCM令牌)是Firebase Cloud Messaging给每个客户端设备分配的唯一标识符,作用是指定消息的发送目标——每个安装了你应用的设备,首次连接FCM时都会生成这个专属令牌。
2. 为什么在云控制台找不到?
FCM的Registration ID/令牌是客户端设备生成后,需要由你自己的应用上传到后端服务存储的,Firebase控制台仅提供应用级别的配置项,无法直接查看单个设备的令牌。
3. 如何获取Registration ID?
你需要在移动端(Android/iOS/跨平台框架等)的应用代码中集成FCM SDK,初始化后获取令牌,再将其上传到你的Rust后端保存。举个移动端伪代码示例:
// Android Kotlin 示例 FirebaseMessaging.getInstance().token.addOnCompleteListener { task -> if (!task.isSuccessful) return@addOnCompleteListener // 获取到的设备令牌 val deviceToken = task.result // 将令牌上传到你的Rust后端存储 }
4. 修正你的Rust代码
注意fcm crate的MessageBuilder::new第一个参数是FCM服务器密钥,第二个才是Registration ID/设备令牌,你代码里的参数填写有误,修正后的代码如下:
use fcm::Client; use std::collections::HashMap; #[tokio::main] async fn main() -> Result<(), Box<dyn std::error::Error>> { // 从Firebase控制台「项目设置-云消息传递」中获取服务器密钥 let server_key = "你的FCM服务器密钥"; let client = Client::new(); let mut map = HashMap::new(); map.insert("message", "Howdy!"); // 替换为从客户端上传的设备令牌(Registration ID) let device_token = "客户端设备的FCM令牌"; let mut builder = fcm::MessageBuilder::new(server_key, device_token); builder.data(&map); let response = client.send(builder.finalize()).await?; println!("Sent: {:?}", response); Ok(()) }
补充提示
- 服务器密钥可在Firebase控制台的「项目设置」→「云消息传递」页面找到;
- 设备令牌可能会因应用卸载、系统更新等情况过期或刷新,你的后端需要支持令牌的更新替换逻辑。
内容的提问来源于stack exchange,提问作者Caveno
相关产品推荐
相关产品推荐

