如何通过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
相关产品推荐
相关产品推荐

