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

Xamarin.iOS应用无法接收Firebase推送通知,求代码问题排查

排查Xamarin.iOS Firebase推送通知接收失败的问题

我帮你梳理下代码里可能遗漏的几个关键环节,这些都是集成Firebase推送时容易忽略的点:

  • 没有将APNs设备令牌绑定到Firebase Messaging
    这是最核心的问题!在RegisteredForRemoteNotifications方法中,你获取到了Apple返回的deviceToken,但没有把它传给Firebase SDK。Firebase需要这个令牌来关联你的设备,才能将服务器的通知路由到对应的设备上。

    你需要在这个方法里添加一行代码:

    public override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken)
    {
        Console.WriteLine("Registered for remote notifications");
        Console.WriteLine(deviceToken.GetBase64EncodedString(NSDataBase64EncodingOptions.None));
        // 新增:将APNs令牌传给Firebase
        Messaging.SharedInstance.ApnsToken = deviceToken;
    }
    
  • 旧版推送方法未关联Firebase处理逻辑
    你重写的DidReceiveRemoteNotification方法,需要让Firebase SDK处理接收到的消息内容,否则Firebase无法正确解析通知数据。修改这个方法:

    public override void DidReceiveRemoteNotification(UIApplication application, NSDictionary userInfo, Action<UIBackgroundFetchResult> completionHandler)
    {
        Console.WriteLine("Received a notification");
        // 新增:让Firebase处理消息
        Messaging.SharedInstance.AppDidReceiveMessage(userInfo);
        completionHandler(UIBackgroundFetchResult.NewData);
    }
    
  • 权限请求后的注册逻辑优化
    当前你不管用户是否授权通知权限,都会调用RegisterForRemoteNotifications,这可能导致无效操作。建议在授权回调里判断授权状态后,再在主线程触发注册:

    UNUserNotificationCenter.Current.RequestAuthorization(authOptions, (granted, error) => {
        Console.WriteLine(granted);
        if (granted)
        {
            // UI操作必须在主线程执行
            InvokeOnMainThread(() => UIApplication.SharedApplication.RegisterForRemoteNotifications());
        }
    });
    
  • 前台通知的调试增强
    你实现的WillPresent方法可以增加日志输出,确认是否收到了通知内容,方便调试:

    public void WillPresent(UNUserNotificationCenter center, UNNotification notification, Action<UNNotificationPresentationOptions> completionHandler)
    {
        Console.WriteLine("Handling iOS 11+ foreground notification");
        // 输出通知内容,确认是否接收到
        Console.WriteLine($"Notification UserInfo: {notification.Request.Content.UserInfo}");
        completionHandler(UNNotificationPresentationOptions.Sound | UNNotificationPresentationOptions.Alert);
    }
    

做完这些修改后,重新部署测试,应该就能正常接收Firebase推送通知了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:36:39