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

Firebase Functions发送FCM成功,但Unity端onMessageReceived未调用

问题排查与解决方案

针对Firebase Functions日志确认消息发送成功,但Unity客户端OnMessageReceived未触发的问题,结合你的业务场景与代码,可按以下步骤排查修复:

1. 确认主题订阅与发送的一致性

检查Unity客户端订阅的主题字符串和Functions中发送的主题字符串完全匹配:

  • Unity中SubscribeAsyncGeoLocation方法将geoLocation的+替换为_后订阅,Functions中同样对geoLocation做了替换并发送到/topics/${geoLocation}。
  • 对比双方日志输出的geoLocation值,确保无大小写、额外空格或特殊字符处理差异。

2. 配置前台消息接收逻辑

当Unity应用处于前台时,FCM的notification类型消息默认不会触发OnMessageReceived回调,需显式配置前台展示选项:
在Firebase初始化成功后添加以下代码:

// 配置前台通知展示规则,确保回调能触发
FirebaseMessaging.MessageReceivedForegroundNotificationPresentationOptions = 
    ForegroundNotificationPresentationOptions.Alert | 
    ForegroundNotificationPresentationOptions.Badge | 
    ForegroundNotificationPresentationOptions.Sound;

同时补充平台配置:

  • Android:确保AndroidManifest中已配置FCM所需的权限与服务组件
  • iOS:在Xcode中开启推送权限,并在Unity Player Settings中勾选Remote Notification Enabled

3. 确保Firebase初始化在主线程执行

Unity的ContinueWith默认在后台线程执行,事件绑定需在主线程完成,修改Start方法的初始化逻辑:

private void Start()
{
    FirebaseApp.CheckAndFixDependenciesAsync().ContinueWithOnMainThread(task =>
    {
        var dependencyStatus = task.Result;
        if (dependencyStatus == DependencyStatus.Available)
        {
            FirebaseMessaging.TokenRegistrationOnInitEnabled = true;
            FirebaseMessaging.TokenReceived += OnTokenReceived;
            FirebaseMessaging.MessageReceived += OnMessageReceived;
            // 新增前台通知配置
            FirebaseMessaging.MessageReceivedForegroundNotificationPresentationOptions = 
                ForegroundNotificationPresentationOptions.Alert | 
                ForegroundNotificationPresentationOptions.Badge | 
                ForegroundNotificationPresentationOptions.Sound;
        }
        else
        {
            Debug.LogError($"Firebase 초기화 실패: {dependencyStatus}");
        }
    });
}

注:需确保Unity项目已导入Firebase.Unity.Editor包以使用ContinueWithOnMainThread方法

4. 验证FCM令牌与主题关联有效性

  • 确认OnTokenReceived回调正常触发,客户端已获取有效的FCM令牌
  • 在Firebase控制台的云消息传递模块中,手动发送测试消息到目标主题:
    • 若手动发送能收到,说明Functions的主题字符串拼接可能存在隐藏错误
    • 若手动发送也收不到,说明客户端订阅流程或FCM基础配置存在问题

5. 检查SDK版本兼容性

确保Unity的Firebase Messaging SDK与Firebase Functions的Admin SDK版本兼容,建议升级至双方最新稳定版:

  • Unity Firebase SDK:通过Package Manager更新
  • Firebase Admin SDK:在Functions项目目录执行npm update firebase-admin

6. 排查消息Payload潜在问题

  • Android端:click_action字段需要在AndroidManifest中配置对应的<intent-filter>,否则可能影响消息正常处理(即使不影响接收,也会导致点击跳转失效)
  • 确保Payload的title、body等字段不包含FCM规范外的特殊字符

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 21:13:10