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

React Native中如何获取设备IMEI?调用react-native-imei报错如何解决

React Native 设备IMEI/唯一标识获取方案

你遇到的getImeiForSlot: the user 10265 does not need the requirement to access device identifiers报错核心原因不是代码写法问题,首先你贴的示例代码本身存在语法错误:

// 原错误写法,缺少from和引号
// import IMEI react-native-imei
// 正确语法写法
import IMEI from 'react-native-imei'

但就算修正语法问题,你依然拿不到IMEI:从Android 10(API等级29)开始,安卓系统全面禁止普通第三方应用读取IMEI、MEID、序列号这类硬件级持久设备标识,哪怕申请了READ_PHONE_STATE权限也会直接抛出该权限错误。react-native-imei库已经停止维护多年,没有适配Android 10及以上系统,不存在修复可能。

以下是不同场景下的可行方案:

普通上架应用场景(推荐,全平台适配)

如果你的需求是做用户唯一识别、设备埋点、风控校验,不需要强制获取硬件IMEI,直接用无权限依赖的系统级唯一标识即可,不需要折腾无效的IMEI获取方案:

  • 安卓端使用ANDROID_ID:设备首次启动时生成的64位标识,应用卸载重装不会变更,仅恢复出厂设置或部分厂商系统大版本升级才会重置,无权限要求
  • iOS端使用IDFV(identifierForVendor):同开发者账号下的应用共享该标识,卸载同开发者所有应用后重装才会重置
    直接使用维护活跃的成熟库react-native-device-info即可实现,步骤如下:
  1. 安装依赖
    npm install react-native-device-info
    # iOS端需要执行pod安装
    cd ios && pod install
    
  2. 调用接口获取唯一ID,无需额外权限申请
    import DeviceInfo from 'react-native-device-info';
    
    const deviceUniqueId = DeviceInfo.getUniqueId();
    console.log(deviceUniqueId);
    
    该接口会自动根据平台返回对应合规的唯一标识,适配所有最新系统版本和RN版本,满足绝大多数业务场景。

特殊内部应用场景(仅能获取Android9及以下设备IMEI)

如果你的应用是企业内部分发、系统预装、持运营商特殊签名的应用,不需要上架公开应用商店,可以按以下配置尝试获取IMEI:

  • 将安卓构建配置中的targetSdkVersion调整为28(Android 9)及以下,Android 10+系统依然无法获取
  • 在AndroidManifest.xml中添加权限声明
    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    
  • 针对Android 6.0及以上设备,运行时动态申请READ_PHONE_STATE权限,用户同意授权后再调用IMEI获取接口
    注意:targetSdkVersion低于29的应用目前无法提交到Google Play及国内绝大多数主流应用商店,该方案仅适合非公开分发场景

无效方案避坑

  • 所有声称无需系统签名/root即可在Android10+获取IMEI的方案、第三方库均为虚假宣传,要么是用ANDROID_ID等其他标识冒充IMEI,要么仅在root设备上生效,无法在普通用户量产设备上使用
  • 反射调用系统隐藏接口、修改AppOps权限等操作需要系统级权限,普通应用无权限执行

内容的提问来源于stack exchange,提问作者Ghasem Khalili

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 06:15:47