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

FCM返回未注册错误但未提供对应RegistrationID问题求助

解决FCM批量推送失败时无法定位对应Registration ID的问题

我完全懂你现在的困扰——FCM批量推送返回失败结果时,Result对象里的RegistrationId是空的,根本没法直接知道哪个设备推送失败了。别着急,其实FCM给我们留了一个可靠的匹配方式,只是需要换个思路处理。

问题原因

FCM的批量响应规则里,Results数组的元素顺序完全对应你发送请求时registration_ids数组的顺序。而Result.RegistrationId字段只有在FCM需要返回更新后的设备令牌(比如旧令牌失效、有新令牌可用)时才会有值;如果是纯粹的推送失败(比如设备卸载应用、令牌无效),这个字段就会是空的,但顺序匹配的规则是官方保证有效的。

解决方案:通过索引关联原始Registration ID

你只需要把原始的registrationIDs列表传入响应处理方法,然后通过循环索引来匹配失败结果对应的设备令牌即可。修改后的代码如下:

1. 修改推送方法,传入原始Registration ID列表

public async static void SendPushNotification(string title, string strMessage, string clickLocation, List<string> registrationIDs) {
    ResponseContent resp;
    using (var sender = new Sender(CloudConfigurationManager.GetSetting("FCMKey"))) {
        var json = "{\"data\":{\"title\":\"json message\",\"body\":\"works like a charm!\"},\"registration_ids\":" + JsonConvert.SerializeObject(registrationIDs) + "}";
        resp = await sender.SendAsync(json);
    }
    // 将原始的registrationIDs传入响应处理方法
    HandleFCMResponse(resp, registrationIDs);
}

2. 修改响应处理方法,通过索引匹配失败的令牌

private static void HandleFCMResponse(ResponseContent response, List<string> originalRegistrationIDs) {
    if (response.MessageResponse.Failure > 0 && originalRegistrationIDs != null && originalRegistrationIDs.Count == response.MessageResponse.Results.Count) {
        for (int i = 0; i < response.MessageResponse.Results.Count; i++) {
            Result r = response.MessageResponse.Results[i];
            // 仅处理有错误的结果
            if (!string.IsNullOrEmpty(r.Error)) {
                string failingRegId = originalRegistrationIDs[i];
                Console.WriteLine($"推送失败的Registration ID: {failingRegId},错误信息: {r.Error}");
            }
        }
    }
    Console.WriteLine("resp");
}

额外提示

  • 记得在处理前校验原始列表和结果列表的长度是否一致,避免索引越界的问题
  • 如果Result.RegistrationId有值,说明这个旧令牌已经失效,你需要用这个新值替换数据库里对应的旧令牌,后续推送要使用新令牌

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:10:49