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

React Native中DeviceInfo.getModel()始终返回iPhone问题求助

解决react-native-device-info返回"iPhone"而非具体型号的问题

我来帮你搞定这个头疼的问题~你遇到的情况其实是旧版本react-native-device-info的已知限制,结合你用的版本(RN 0.53 + react-native-device-info 0.12.1),具体原因和解决方案如下:

问题根源

react-native-device-info 0.12.1这个版本在iOS平台上的getModel()方法实现比较简陋,它并没有去解析设备的具体硬件标识符(比如iPhone14,2这种)并映射为可读的型号名称,只是简单返回了通用的"iPhone"字符串,安卓端可能也有类似的模糊返回问题。

解决方案

方案1:升级react-native-device-info(推荐)

新版本的库已经修复了这个问题,能正确返回具体的设备型号(比如"iPhone 13 Pro"、"iPhone SE (3rd gen)")。不过要注意适配你的RN 0.53版本,建议找和RN 0.53兼容的较新版本(比如0.25.x左右的版本,你可以查看该库的release notes确认兼容性)。

升级步骤大概是:

  • 卸载旧版本:npm uninstall react-native-device-info
  • 安装兼容的新版本:npm install react-native-device-info@0.25.1
  • 重新link模块:react-native link react-native-device-info(RN 0.53还需要手动link)
  • 重新编译运行项目

升级后再调用console.log(DeviceInfo.getModel());就能得到具体的型号名称了。

方案2:手动实现原生设备型号获取(如果不想升级)

如果暂时无法升级依赖,你可以自己写原生代码获取具体型号,再通过RN原生模块桥接过来:

iOS端示例

在iOS原生代码中,用sysctlbyname获取硬件标识符,再映射为可读名称:

#include <sys/sysctl.h>

- (NSString *)getDeviceModel {
    size_t size;
    sysctlbyname("hw.machine", NULL, &size, NULL, 0);
    char *machine = malloc(size);
    sysctlbyname("hw.machine", machine, &size, NULL, 0);
    NSString *model = [NSString stringWithUTF8String:machine];
    free(machine);
    
    // 这里可以添加硬件标识符到可读名称的映射表
    NSDictionary *modelMap = @{
        @"iPhone14,2": @"iPhone 13 Pro",
        @"iPhone13,1": @"iPhone 12",
        // 更多型号映射可以自行补充
    };
    
    return modelMap[model] ?: model;
}

然后把这个方法暴露给RN模块,在JS端调用即可。

Android端示例

在Android原生代码中,直接获取系统属性:

public String getDeviceModel() {
    return Build.MODEL; // 返回具体型号,比如"Pixel 6 Pro"
}

同样把这个方法暴露给RN模块使用。


内容的提问来源于stack exchange,提问作者Dhruvil Shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:58:12