_firebaseMessaging.getToken()在旧安卓设备无法正常工作求助
问题代码
_firebaseMessaging.getToken().then((token) { assert(token != null); deviceToken = token; });
该代码在多数安卓设备上运行正常,但在Redmi Note 4(Android版本:7.0 NRD90M,MIUI版本:MIUI Global 11.0.2)出现异常,以下是可能的问题原因:
Firebase SDK 版本兼容性问题
Android 7.0(API 24)属于较旧的系统版本,若使用的Firebase Messaging SDK版本较新,可能存在适配缺失。部分新版本SDK会逐步放弃对旧系统的支持,导致在该设备上无法正常完成Token请求。MIUI 系统权限与策略限制
MIUI 11的后台管理和联网管控较为严格,可能限制了应用的后台联网能力,直接拦截Firebase的Token获取请求;同时MIUI自带的推送服务可能与Firebase推送存在冲突,干扰Token生成流程。必要权限缺失
Firebase Messaging需要INTERNET和ACCESS_NETWORK_STATE权限,若应用清单未正确声明,会导致网络请求失败。此外,该设备可能需要手动开启应用的「后台数据」权限,否则应用在后台无法完成Token获取的网络交互。断言语句触发崩溃
代码中的assert(token != null)在调试模式下,会在Token返回null时直接触发断言错误导致崩溃;正式包中断言虽会被忽略,但此时deviceToken会被赋值为null,引发后续逻辑异常。Google Play Services 版本过低
Firebase Messaging依赖Google Play Services,Redmi Note 4作为旧设备,安装的Google Play Services版本可能无法兼容当前使用的Firebase SDK,导致Token获取流程失败。
内容的提问来源于stack exchange,提问作者Khyati Modi

