React-Native 获取iPhone手机型号
1、在xcode,在app(项目名)目录下,新建两个文件,文件名可以自定义:
IphonePlatform.h
IphonePlatform.m
IphonePlatform.h:
//TODO Iphone型号
#ifndef IphonePlatform_h
#define IphonePlatform_h
#endif /* IphonePlatform_h */
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
@interface IphonePlatformManager : NSObject <RCTBridgeModule>
@end
IphonePlatform.m:
//TODO Iphone型号
#import <Foundation/Foundation.h>
#import <sys/utsname.h>
#import "IphonePlatform.h"
@implementation IphonePlatformManager
@synthesize bridge = _bridge;
//AppVersion:对接React-Native js的模块名称
RCT_EXPORT_MODULE(IphonePlatform);
//对外提供调用方法,Promise
RCT_REMAP_METHOD(getPlatform,
resolve:(RCTPromiseResolveBlock)resolve
rejecter:(RCTPromiseRejectBlock)reject)
{
struct utsname systemInfo;
uname(&systemInfo);
NSString *platform = [NSString stringWithCString:systemInfo.machine encoding:NSASCIIStringEncoding];
resolve(platform);
}
@end
react-native项目,在src/lib(目录自定义,我这里是放到lib)目录下,新建IphonePlatform.ts(文件名可以自定义)文件,文件内容:
import { NativeModules } from 'react-native';
export default NativeModules.IphonePlatform;
封装成工具方法:
import IphonePlatform from './IphonePlatform';
/**
* 工具方法:获取Iphone型号
*/
function getIphonePlatform(): {
platform: number | null;
} {
const [data, setData] = useState<number | null>(null);
useEffect(() => {
if (Platform.OS === 'ios') {
(async () => {
const platform = await IphonePlatform.getPlatform();
const version14 = ['iPhone14,7', 'iPhone14,8', 'iPhone15,2', 'iPhone15,3'];
const version13 = ['iPhone14,4', 'iPhone14,5', 'iPhone14,2', 'iPhone14,3'];
const version12 = ['iPhone13,1', 'iPhone13,2', 'iPhone13,3', 'iPhone13,4'];
if (version14.includes(platform)) {
setData(14);
}
else if (version13.includes(platform)) {
setData(13);
}
else if (version12.includes(platform)) {
setData(12);
}
else {
setData(0);
}
})();
}
// 安卓返回0
else {
setData(0);
}
}, []);
return {
platform: data,
};
}
// 使用方式:
const { platform: iPhonePlatform } = getIphonePlatform();
iPhone型号Identifier对应的iPhone版本在这里可以查看:
https://www.theiphonewiki.com/wiki/Models