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

如何通过FirebaseAdmin生成新FCM推送令牌及更新令牌过期时间

处理FCM失效令牌:生成新令牌或更新过期时间

我正在开发一个C#项目,希望借助FirebaseAdmin为令牌已失效或过期的设备生成新的FCM Token,或者手动更新FCM Token的过期时间。我已使用nuget包FirebaseAdmin 3.0.1创建了一个示例项目,可在不向设备推送通知的情况下检查令牌是否有效,对于无效令牌,我想要生成新令牌并同步更新至FCM。

我的示例代码如下:

static void Main(string[] args)
{
    var fba = FirebaseApp.Create(new AppOptions()
    {
        Credential = GoogleCredential.FromFile("key.json")
    });

    string[] tokens = new string[]
    {
        "eSPXl7bJFTM:APA91bF-kjpN31aNuUxdQh-_0QW5zHxnczq--1IIhvDLCQRfTmvmy7pxDWVA8lPrkx0Rd0PxsqS_Zf-VJgVxEW-TpbyBmOuwNgDBb8xF_MrePva2a1d1CDg3ZC3rWmyqbHXP34QE-Eyq",
        "eHlZfQJ24UbUm2sj9w3SyW:APA91bGBy4zRN63U6nkMmyithmQsjZPZDpSPBHI72AB6CE3Pk7anvpQeDN42YUb1sbLMxD8v7DbmzP9xEbG6FyOQvzuJwMRlw8FZ3H7-yOrItVA835b-4FuT1vhRxkUcBltn_8jXnjl7",
        "eurtRHNs5o8:APA91bF79IFE5NLReK1xnTWHLP2GTGT5JBRCljK78KpjhdbRUdea2pg2reC-cS1LWuDjWiFYm086EZedwzr-I4nVWWbosilqTN2G6QpcfFkey89ZGeZ3ijzPRk3P6lxd7Zn_BHI1_0_P"
    };

    var dryRun = true;

    var response = SendNotification(tokens, dryRun).Result;
    Console.WriteLine($"Sucessfully sent[{response.SuccessCount}] notification(s), failures [{response.FailureCount}]");

    int index = 0;
    foreach (var tokenReponse in response.Responses)
    {
        if (tokenReponse.IsSuccess)
        {
            Console.WriteLine($"Token at index {index} is valid");
        }
        else
        {
            Console.WriteLine($"Token at index {index} is not valid. Message: {tokenReponse.Exception.HttpResponse.ReasonPhrase}");
        }

        index++;
    }
}

核心说明与解决方案

首先明确:FCM令牌的生成和更新只能由客户端设备完成,后端的FirebaseAdmin SDK无法直接为设备生成新令牌,也不能手动修改令牌的过期时间。因为FCM令牌与设备的应用实例、设备标识符等绑定,必须由客户端通过Firebase SDK生成。

具体处理步骤如下:

  • 1. 准确识别无效令牌
    你当前通过dryRun=true发送测试通知验证令牌有效性的方式是正确的。当返回InvalidRegistration或NotRegistered错误时,说明令牌已失效,需要处理。
  • 2. 触发客户端更新令牌
    后端需要记录下失效的令牌,然后通过你的业务逻辑(比如应用内消息、其他推送渠道)通知对应设备,让客户端重新生成FCM令牌并上报给后端。
  • 3. 客户端生成新令牌示例(以.NET MAUI/Xamarin为例)
    using Firebase.Messaging;
    
    async Task<string> RefreshFcmToken()
    {
        // 获取新的FCM令牌
        var newToken = await FirebaseMessaging.Instance.GetTokenAsync();
        // 将新令牌发送到后端替换旧令牌
        await UploadTokenToBackend(newToken);
        return newToken;
    }
    
  • 4. 后端更新令牌存储
    收到客户端上报的新令牌后,直接在你的数据库或存储系统中替换对应的旧失效令牌即可。

额外注意事项

  • 不要尝试通过后端修改令牌过期时间,FCM令牌的生命周期由Firebase服务自动管理,客户端会在令牌过期或失效时自动触发更新,核心是确保客户端能及时将新令牌同步到后端。
  • 区分不同错误类型:NotRegistered表示令牌已被Firebase注销,必须替换;InvalidRegistration可能是令牌格式错误,需要检查客户端上报的令牌是否正确。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 16:22:41