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

Android中使用FCM向所有用户发送首条通知时出错

FCM推送通知失败:AndroidManifest配置缺失问题解答

别担心,这是FCM集成里很容易忽略的一步——你确实需要在AndroidManifest.xml中添加关键配置项,哪怕Gradle配置全对,FCM的客户端初始化、消息接收逻辑都依赖Manifest里的声明。我来给你梳理必须加的内容:

  • 声明FCM消息接收服务
    不管你是自定义了消息处理逻辑,还是用默认实现,都得在Manifest里注册FirebaseMessagingService相关服务。如果有自定义的MyFirebaseMessagingService(用来处理通知接收、点击事件等),添加这段代码:

    <service
        android:name=".MyFirebaseMessagingService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    

    要是还没自定义服务,也建议尽快实现一个,方便后续处理通知的自定义逻辑。

  • 可选但推荐:声明实例ID服务
    这个服务用来处理FCM令牌的刷新(比如应用重装、设备重置后令牌变化),添加后能保证推送始终能找到正确的设备:

    <service
        android:name=".MyFirebaseInstanceIDService"
        android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
        </intent-filter>
    </service>
    
  • 基础权限配置
    虽然Gradle会自动合并部分权限,但最好手动确认这两个权限存在:

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.WAKE_LOCK" />
    

    WAKE_LOCK能让设备在休眠时唤醒处理通知,INTERNET则是FCM和服务器通信的基础。

  • Android 8.0+必备:通知通道配置
    如果你适配Android 8.0及以上系统,必须配置默认通知通道ID,不然推送通知可能完全不显示:

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_channel_id"
        android:value="@string/default_notification_channel_id" />
    

    记得在strings.xml里定义对应的通道ID字符串。

你提到日志里有两个错误,大概率是这些配置缺失导致的——比如服务未声明会出现ClassNotFoundException,权限缺失会触发MissingPermission类的错误。可以对照日志信息,对应补上上述配置,应该就能解决推送问题了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:04:28