Flutter使用mobile_number 1.0.3插件获取手机号返回null的问题求助
mobile_number 1.0.3版本获取手机号返回null的排查方案
你当前遇到的“可正常读取SIM卡其他信息、无报错但手机号字段返回null”的现象,是使用该版本插件时的典型问题,可按以下顺序逐一排查解决:
权限配置漏项排查
- 该版本插件不会自动合并所有Android端读取所需的权限,需要手动在项目的
android/app/src/main/AndroidManifest.xml中补全声明:- 基础必加权限:
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> - 适配Android 10及以上系统额外添加:
<uses-permission android:name="android.permission.READ_PHONE_NUMBERS" />
- 基础必加权限:
- 注意不要尝试声明
READ_PRIVILEGED_PHONE_STATE权限:这类权限仅对系统应用、运营商预装应用、设备管理员开放,普通第三方应用就算声明了也会被系统直接拦截,不仅拿不到手机号,还可能触发应用审核驳回。
动态权限调用流程排查
- 1.0.3版本的插件不会自动拉起系统权限申请弹窗,如果跳过权限申请步骤直接调用获取手机号的方法,系统会静默返回null,不会抛出任何异常,和你当前遇到的故障表现完全吻合。
- 正确的调用流程必须遵守以下顺序:
- 提前校验当前应用是否已获得电话类相关权限
- 未获得授权时,主动拉起权限申请弹窗,等待用户完成授权操作、拿到“授权通过”的结果后,再调用插件的手机号读取接口
- 禁止在权限申请流程未返回最终结果时,提前触发读取逻辑
系统与运营商规则的固有限制
- 这是最容易被忽略的核心限制:国内三大运营商的绝大多数SIM卡,本身不会将本机号码写入SIM卡的EFMSISDN存储分区,系统层的
getLine1Number接口读取时本身就会返回空值,插件只是直接透传了系统接口的返回结果,不存在读取失败的bug。 - 快速验证方法:直接打开设备系统设置的“关于手机-SIM卡状态”页面,查看系统是否能正常显示本机号码。如果系统自身都显示“未知”,说明SIM卡本身未存储手机号信息,无论怎么调整权限和代码都无法通过该插件读取到手机号,这种场景只能通过运营商提供的一键登录授权能力获取手机号。
版本固有兼容问题
- 1.0.3版本存在已知的适配漏洞:在Android 13及以上的机型上,插件原生层的权限判断逻辑没有跟随系统规则更新,哪怕用户已经授予了所有必需权限,插件仍会误判为无权限,直接静默返回null。
- 该版本的iOS端本身就不支持读取手机号能力:iOS系统从底层规则上就禁止第三方应用读取本机手机号信息,就算权限配置完整、系统状态正常,也只会返回null,这种情况属于系统原生限制,没有可绕过的方案。
- 临时修复方案:不要固定使用1.0.3版本,升级到该插件1.1.0及以上的修复版本即可解决Android端的适配问题。
内容的提问来源于stack exchange,提问作者KARTHIKEYAN N
相关产品推荐
相关产品推荐

