检索设备信息React-Native iOS

时间:2018-08-14 15:06:01

标签: javascript ios reactjs react-native

嘿,我正在尝试从iPad获取设备信息。我尝试使用https://github.com/rebeccahughes/react-native-device-info,但是在完成pod安装后,它完全破坏了我的解决方案。我希望至少能够获得设备的名称。我该如何在不使用NPM模块的情况下解决这个问题?或者有人知道一个不需要引入额外依赖项的模块吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

使用Native Modules可以轻松完成此操作,不需要库或依赖项。

同步版本

在您的JS中:

import { NativeModules} from "react-native"

const DeviceInfo = NativeModules.DeviceInfo;

const deviceName = DeviceInfo.getName();

在iOS中: RCTDeviceInfo.h

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>

@interface RCTDeviceInfo : NSObject<RCTBridgeModule>

@end

RCTDeviceInfo.m

#import "RCTDataLogger.h"

@implementation RCTDeviceInfo

RCT_EXPORT_MODULE(DeviceInfo);

RCT_EXPORT_BLOCKING_SYNCHRONOUS_METHOD(getName) {
    return [[UIDevice currentDevice] name];
}

@end

异步版本

在您的JS中:

import { NativeModules} from "react-native"

const DeviceInfo = NativeModules.DeviceInfo;

DeviceInfo.getName().then(deviceName => {
  console.log("Current Device: "+deviceName);
}

在iOS中: RCTDeviceInfo.h

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>

@interface RCTDeviceInfo : NSObject<RCTBridgeModule>

@end

RCTDeviceInfo.m

#import "RCTDataLogger.h"

@implementation RCTDeviceInfo

RCT_EXPORT_MODULE(DeviceInfo);

RCT_EXPORT_METHOD(getName
              getName_resolver:(RCTPromiseResolveBlock)resolve
              getName_rejecter:(RCTPromiseRejectBlock)reject) {
    resolve([[UIDevice currentDevice] name]);
}

@end