代理环境下Android模拟器无法接收Firebase通知求助
我之前也碰到过类似的模拟器收不到Firebase通知的问题,结合你的场景(真机正常接收、编译/目标API均为27),整理了几个实用的排查方向:
检查Google Play服务版本:Firebase通知依赖Google Play Services,API27的x86模拟器如果用的是
Google APIs镜像,可能预装的Play服务版本偏低甚至缺失。建议创建模拟器时选择带Google Play标签的镜像,或者打开模拟器内的Google Play应用查看版本,确保和项目中依赖的com.google.android.gms:play-services-base等库版本匹配,版本过低直接在模拟器内更新即可。确认代理环境下的网络连通性:代理容易拦截FCM的通信请求,你可以先通过
adb shell ping fcm.googleapis.com测试模拟器能否正常访问FCM服务器。同时要检查模拟器的代理设置是否和你的代理环境一致,包括代理地址、端口以及认证信息(如果需要),确保FCM的请求能正常通过代理。验证FCM设备令牌有效性:模拟器重启或APP重新安装后,FCM令牌可能会变化。你可以在APP内添加日志打印当前令牌(比如在
FirebaseMessagingService的onNewToken方法中输出),然后对比Firebase控制台中“Cloud Messaging”模块下的注册令牌,确认模拟器的令牌已正确注册且未失效。检查通知渠道配置:API26及以上强制要求通知渠道,虽然真机正常,但模拟器可能存在渠道被禁用的情况。检查APP内的通知渠道创建代码,确保渠道的重要性(比如
IMPORTANCE_HIGH)设置正确,同时在模拟器的系统设置-通知-你的APP中,确认对应的通知渠道处于启用状态。查看Logcat定位错误:这是最直接的排查方式,用Android Studio的Logcat筛选
FirebaseMessaging或FCM关键词,查看是否有类似Token not registered、Failed to fetch token或网络请求失败的日志,这些信息能快速定位问题根源(比如代理导致的网络超时、权限缺失等)。关闭模拟器的电池优化:部分模拟器默认开启电池优化,会限制FCM后台服务的运行。进入模拟器设置-电池-电池优化,找到你的APP并设置为不优化,再测试通知接收情况。
内容的提问来源于stack exchange,提问作者yaxe




