You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Firebase控制台可发FCM消息 代码调用报注册令牌无效如何解决

你能用Firebase控制台成功发送测试消息,说明设备令牌本身是合法的,报错是代码侧的配置问题,按以下步骤排查即可:

  • 禁止每次调用发送方法都重复创建FirebaseApp实例:你当前的代码每次调用SendByExample都会新建一个带自定义名称的FirebaseApp实例,重复调用会触发实例已存在异常,就算是首次调用,自定义实例的配置也容易和默认服务账号配置冲突。建议将FirebaseApp的初始化逻辑移到程序启动时全局执行一次,不要嵌套在发送方法内部。
  • 核对项目ID配置是否匹配:你代码里硬写的ProjectId = "posmobxxx"必须和你下载的adminsdk.json文件内的project_id字段值、Firebase控制台的项目ID三者完全一致,只要有一处不匹配,哪怕令牌完全正确也会报无效错误。建议直接去掉代码里硬写的ProjectId,让SDK自动从服务账号json文件读取,能避免绝大多数匹配错误。
  • 确认服务账号权限:你使用的adminsdk.json必须是当前FCM所属项目的服务账号密钥,不要误用其他Firebase项目的服务账号文件,同时确认对应服务账号已被授予云消息发送的相关权限。
  • 检查令牌是否携带隐形字符:复制令牌到代码时注意不要多带空格、换行等不可见字符,你可以在给Token属性赋值前打印一次值,和控制台使用的令牌逐字符对比。

修复后代码示例

全局初始化(程序启动时仅执行一次)

// 全局存储FirebaseApp实例,不要重复创建
private static FirebaseApp _fcmApp;
public static void InitFcmApp()
{
    string credentialPath = @"C:\IIII\XXXXXy\adminsdk.json";
    _fcmApp = FirebaseApp.Create(new AppOptions
    {
        // 不硬写ProjectId,SDK自动从服务账号文件读取,避免写错
        Credential = GoogleCredential.FromFile(credentialPath)
    });
}

发送方法

public async static Task<string> SendByExample()
{
    try
    {
        var message = new Message
        {
            Data = new Dictionary<string, string>
            {
                { "additional_data", "a string" },
                { "another_data", "another string" }
            },
            Notification = new Notification
            {
                Title = "a title",
                Body = "a body",
                ImageUrl = "link"
            },
            Token = "eYF7xxaLSbu0Zxxxx0bUO24lr:APxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
        };
        var fcmInstance = FirebaseMessaging.GetMessaging(_fcmApp);
        return await fcmInstance.SendAsync(message).ConfigureAwait(false);
    }
    catch (Exception ex)
    {
        // await会自动解包AggregateException,直接捕获即可拿到真实错误信息
        return $"{ex.Message}{Environment.NewLine}{ex.StackTrace}";
    } 
}

内容的提问来源于stack exchange,提问作者Neno

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 15:15:07