Android Studio中Firebase Cloud Messaging通知无法接收问题求助
问题根因排查与解决方法
1. 主题订阅缺失
你当前使用的是FCM主题推送模式,所有需要接收通知的卖家账号在登录成功后,必须主动调用订阅接口:
FirebaseMessaging.getInstance().subscribeToTopic(Constants.FCM_TOPIC);
如果卖家端没有执行订阅操作,自然无法接收对应主题的推送消息,这是最常见的故障原因。
2. 身份校验逻辑异常
你在onMessageReceived中增加了当前登录用户UID和消息携带卖家UID的一致性校验,有两个潜在异常点:
- 卖家端应用退后台、进程被回收时,
FirebaseAuth.getInstance().getCurrentUser()可能返回null,直接跳过后续通知弹出逻辑 - 需打印日志确认消息中携带的
sellerUid和当前登录用户UID完全匹配,排除空格、大小写、传值错误等问题
3. Android通知权限未适配
- Android 13及以上系统要求应用主动申请
POST_NOTIFICATIONS动态权限,未获得权限的应用即使收到FCM消息也无法弹出通知 - 可进入系统设置查看对应App的通知总开关、你创建的通知渠道开关是否被用户手动关闭
4. PendingIntent标记不兼容高版本系统
如果你的应用targetSdkVersion >= 31,PendingIntent必须显式指定FLAG_IMMUTABLE或FLAG_MUTABLE标记,否则会导致通知构建失败,可修改代码:
PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,PendingIntent.FLAG_ONE_SHOT | PendingIntent.FLAG_IMMUTABLE);
5. FCM消息优先级过低
后台推送的普通优先级消息容易被系统拦截延迟送达,可在发送通知的JSON参数中增加高优先级配置:
// 在prepareNotification方法的try代码块中加入 notificationJo.put("priority", "high");
6. 服务注册异常
检查AndroidManifest.xml中是否正确注册了FCM消息接收服务:
<service android:name=".MyFirebaseMessaging" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
调试建议
在onMessageReceived方法最开头增加日志打印:
Log.d("FCM_DEBUG", "收到消息: " + remoteMessage.getData().toString());
如果没有打印这条日志,说明推送链路存在问题(未订阅主题、token失效等);如果能打印日志,说明问题出在后续的校验逻辑或通知构建流程。
内容的提问来源于stack exchange,提问作者Parwez Akhter
相关产品推荐
相关产品推荐

