在即时应用中启用推送通知:FCM集成故障排查求助
我来帮你梳理下即时应用场景下FCM集成踩坑的几个关键点,结合你的清单结构来看,大概率是这些地方没处理到位:
即时模块的FCM配置限制
即时应用的模块分工很明确:/base作为即时运行的模块,是不能持有FCM核心配置的!像FirebaseMessagingService组件声明、通知权限这类需要安装后才能生效的配置,必须放在/app模块的清单里。你把所有配置都塞在/base里,即时应用运行时根本无法加载这些组件,自然就集成失败了。清单合并规则没搞对
你的/app模块清单只有包名,完全没处理和/base的清单合并。Android即时应用的清单合并逻辑和普通应用不一样,你得在/app的清单里显式引用/base中必要的FCM相关配置,或者在gradle里设置正确的合并策略。比如/base里声明了FCM服务,但/app没把它合并进来,FCM初始化时找不到对应的服务类,直接凉凉。google-services.json放错位置
这个文件必须放在**/app模块的根目录**下,不能丢在/base里!因为/app是安装版应用的主体,Firebase是和安装后的应用绑定的,/base作为临时运行的模块无法读取这个配置文件。你要是放错位置,gradle的google-services插件根本读不到Firebase的项目信息,FCM连初始化都做不了。权限声明的位置错误
即时应用对权限管控很严,FCM需要的POST_NOTIFICATIONS这类通知权限,在/base里声明是无效的,必须在/app模块的清单里声明,而且得在安装后的应用里主动请求。如果你把权限都写在/base里,即时应用运行时拿不到权限,推送通知肯定发不出来。依赖和插件的应用位置错了
FCM的依赖可以在/base里引入基础包,但com.google.gms:google-services插件必须只在/app模块的build.gradle里应用。要是你在/base里也加了这个插件,会导致配置混乱,Firebase无法正确关联到你的应用,集成自然失败。
内容的提问来源于stack exchange,提问作者Pablo C. García

