FirebaseMessagingService中onMessageReceived重写无匹配方法错误排查
解决FirebaseMessagingService中
onMessageReceived overrides nothing错误 我之前也碰到过一模一样的问题,结合你的代码和参考场景,来帮你梳理问题原因和解决办法:
问题原因
核心问题是方法签名不匹配,导致IDE无法识别这是重写父类的方法,常见两种触发场景:
- 参数可空性不一致:新版本的Firebase Messaging库中,
FirebaseMessagingService的onMessageReceived方法参数已经从可空的RemoteMessage?改成了非空的RemoteMessage,你的代码沿用了旧的可空参数定义,所以IDE判定这不是重写方法。 - 依赖版本不匹配:如果你的
firebase-messaging依赖版本和参考示例的版本差异较大,父类方法的定义可能发生了变更,直接导致签名不匹配。
解决方法
1. 修正方法参数的可空性
把onMessageReceived的参数从RemoteMessage?改为RemoteMessage,同时调整内部代码的空安全处理(因为参数现在是非空的),修改后的代码如下:
class SubscriptionMessageService : FirebaseMessagingService() { companion object { private val TAG = SubscriptionMessageService::class.java.simpleName private const val REMOTE_MESSAGE_SUBSCRIPTIONS_KEY = "currentStatus" } override fun onMessageReceived(remoteMessage: RemoteMessage) { remoteMessage.data.let { data -> if (data.isNotEmpty()) { val result = data[REMOTE_MESSAGE_SUBSCRIPTIONS_KEY]?.let { SubscriptionStatus.listFromJsonString(it) } if (result == null) { Log.e(TAG, "Invalid subscription data") } else { val app = application as SubApp app.repository.updateSubscriptionsFromNetwork(result) } } } } }
2. 同步Firebase依赖版本
检查你项目中app/build.gradle里的firebase-messaging依赖版本,确保和参考示例的版本一致(或者使用官方最新稳定版)。比如可以在依赖块中添加/修改:
implementation 'com.google.firebase:firebase-messaging:23.4.0'
(注:可以根据Firebase官方文档替换为最新的稳定版本号)
3. 清理IDE缓存并重建项目
有时候IDE的缓存会导致错误识别,执行以下操作可以解决:
- 点击菜单栏的
Build -> Clean Project - 然后执行
Build -> Rebuild Project - 如果问题仍存在,试试
File -> Invalidate Caches... -> Invalidate and Restart
内容的提问来源于stack exchange,提问作者johnrao07
相关产品推荐
相关产品推荐

