如何在本机中获取设备ID。我正在使用create react native而不是android studio。我是新手。
import DeviceInfo from 'react-native-device-info';
constructor(props) {
super(props);
this.state = { id: '' }
this.onNavigateTo = this.onNavigateTo.bind(this);
}
componentDidMount() {
this.setState({id: DeviceInfo.getUniqueID()}, () =>
alert(this.state.id));
}
render() {
return (
<Text>{this.state.id}</Text>
);
}
错误:undefined不是对象(评估&#39; RNDevice.uniqueId&#39;)
注意: - 我没有使用run-android或run-ios
我正在使用Create-react-native app和yarn start。输出将通过Expo应用程序在设备上
答案 0 :(得分:10)
您可以使用react-native CLI创建项目,而不是世博会。
使用命令创建新项目:
react-native init Myproject
cd Myproject
使用以下命令运行项目:
react-native run-android
然后你可以使用react-native-device-info包。
我试过以下版本,它对我有用。
"react": "16.0.0",
"react-native": "0.50.4",
"react-native-device-info": "^0.12.1",
我用命令安装了它:
npm install --save react-native-device-info
然后我用命令链接它:
react-native link react-native-device-info
如果您在链接包时遇到任何问题,那么您可以进行手动链接,也可以交叉检查包是否成功链接。
dependencies { ... compile "com.facebook.react:react-native:+" // From node_modules + compile project(':react-native-device-info') }
...
包括&#39;:app&#39;
包括&#39;:react-native-device-info&#39;
项目(&#39;:react-native-device-info&#39;)。projectDir = new File(rootProject.projectDir, &#39; ../ node_modules /反应天然器件用方式/机器人&#39)
+ import com.learnium.RNDeviceInfo.RNDeviceInfo; public class MainApplication extends Application implements ReactApplication { //...... @Override protected List<ReactPackage> getPackages() { return Arrays.<ReactPackage>asList( + new RNDeviceInfo(), new MainReactPackage() ); } ...... }
<强>权限强>
为AndroidManifest.xml添加适当的可选权限:
...
<uses-permission android:name="android.permission.BLUETOOTH"/> <!-- for Device Name -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/> <!-- for Phone Number -->
示例强>
var DeviceInfo = require('react-native-device-info');
// or import DeviceInfo from 'react-native-device-info';
var deviceId = DeviceInfo.getUniqueID();
你可以使用上面的deviceId。
答案 1 :(得分:5)
你不能使用使用本地代码和expo的库,如果你想使用本地代码,你需要在开始时使用本机代码创建项目caveats
react-native init MyProjectName
cd MyProjectName
react-native run-android
或react-native run-ios
如果要将expo项目转换为本机代码项目,可以执行doc
npm run eject
之后,您可以使用使用本机代码的第三方库并运行react-native link
答案 2 :(得分:0)
如果您的目标是获取客户的唯一ID,那么您可能要使用NativeModules
。
Import { NativeModules } from 'react-native'
在您的组件上...
对于iOS:console.log(NativeModules.SettingsManager.clientUniqueId)
对于Android:console.log(NativeModules.PlatformConstants.fingerprint);
(或NativeModules.PlatformConstants.serial
)
答案 3 :(得分:0)
如果您正在使用Expo,请尝试此操作。
import Constants from 'expo-constants';
this.clientId = Constants.deviceId;
答案 4 :(得分:-1)
getUniqueId在使用react-native-device-info的Android上不可靠,请参见以下问题: -https://github.com/rebeccahughes/react-native-device-info/issues/355
有一个PR等待发布: -https://github.com/rebeccahughes/react-native-device-info/pull/358
发布此更改后,您可以使用getUUID获取唯一ID