如何在React Native中获取设备IMEI码?已尝试react-native-imei无效
React Native 获取设备IMEI码的解决方案
针对 react-native-imei 库的问题排查
如果这个库无法正常工作,先排查以下常见原因:
权限配置缺失
Android 端需要添加READ_PHONE_STATE权限到AndroidManifest.xml:<uses-permission android:name="android.permission.READ_PHONE_STATE" />同时 Android 6.0+(API 23)需要动态申请权限,可搭配
react-native-permissions库实现:import { request, PERMISSIONS } from 'react-native-permissions'; const requestPhonePermission = async () => { const result = await request(PERMISSIONS.ANDROID.READ_PHONE_STATE); return result === 'granted'; };库链接异常
即使 RN 支持自动链接,仍可能出现链接失败情况,可尝试重新安装并链接:npm uninstall react-native-imei npm install react-native-imei npx pod-install # iOS 端执行Android 端手动检查
settings.gradle和MainApplication.java中是否正确引入了该库的模块。系统权限限制
Android 10+(API 29)开始,普通应用无法获取 IMEI,只有系统签名的应用才能拿到READ_PRIVILEGED_PHONE_STATE权限——这意味着该库在 Android 10+ 设备上完全无法获取 IMEI,必须使用替代方案。
替代方案
Android 10+ 平台:使用 OAID
OAID(开放匿名设备标识符)是官方推荐的 IMEI 替代方案,可通过 react-native-oaid 库实现:
- 安装依赖:
npm install react-native-oaid
- 代码示例:
import OAID from 'react-native-oaid'; const getDeviceIdentifier = async () => { try { await OAID.requestPermission(); const oaid = await OAID.getOAID(); console.log('设备标识符(OAID):', oaid); return oaid; } catch (err) { console.error('获取OAID失败:', err); } };
iOS 平台:使用 IDFA/IDFV
iOS 从 iOS 10 开始禁止获取 IMEI,可选择以下两种标识符:
- IDFA(广告标识符):需用户授权,用于广告追踪场景
import { getIDFA } from 'react-native-idfa'; const getAdIdentifier = async () => { try { const idfa = await getIDFA(); console.log('广告标识符(IDFA):', idfa); return idfa; } catch (err) { console.error('获取IDFA失败:', err); } };
- IDFV(应用唯一标识符):无需授权,每个应用独立,卸载重装后会变更
import DeviceInfo from 'react-native-device-info'; const getAppUniqueId = () => { const idfv = DeviceInfo.getUniqueId(); console.log('应用唯一标识符(IDFV):', idfv); return idfv; };
关键注意事项
- Android 10+ 禁止普通应用获取 IMEI,不要尝试绕过系统限制,避免应用被拒或违规
- 所有标识符的使用必须遵守用户隐私政策,尤其是 IDFA 需要获得用户明确同意
- 跨平台开发时,需根据系统分支处理不同的标识符逻辑
内容的提问来源于stack exchange,提问作者Aniket Singh
相关产品推荐
相关产品推荐

