在 React Native 中获取设备 ID?
Get device id in react native?
如何在 React Native 中获取设备 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 不是对象(正在计算 'RNDevice.uniqueId')
注意:- 我没有使用 运行-android 或 运行-ios
我正在使用 Create-react-native app 和 yarn start。输出将通过 Expo 应用在设备上
你不能将使用本机代码的库与 expo 一起使用 caveats if you want to use native code you need to create your project with native code at getting started doc 基本上
- 安装预请求应用程序(节点 - Java 开发工具包 - android 工作室 - xcode - react native cli)
- 运行 命令
react-native init MyProjectName
- cd 你的项目文件夹
cd MyProjectName
- 运行
react-native run-android
或 react-native run-ios
如果你想将 expo 项目转换为本机代码项目,你可以这样做 ejecting-from-create-react-native-app
- 如上所述安装本机代码要求
- 运行
npm run eject
之后,您可以使用使用本机代码和 运行 react-native link
的第三方库
您可以使用 react-native CLI 创建项目而不是 expo。
使用命令创建一个新项目:
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
然后我用命令 link :
react-native link react-native-device-info
如果您在 link 安装包时遇到任何问题,那么您可以执行手册 link 或者您可以交叉检查包是否成功 link。
- 在android/app/build.gradle:
dependencies {
...
compile "com.facebook.react:react-native:+" // From node_modules
+ compile project(':react-native-device-info')
}
- 在android/settings.gradle:
...
include ':app'
include ':react-native-device-info'
project(':react-native-device-info').projectDir = new File(rootProject.projectDir,
'../node_modules/react-native-device-info/android')
- 在MainApplication.java中:
+ 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。
getUniqueId 在 Android 上使用 react-native-device-info 不可靠,请参阅以下问题:
- https://github.com/rebeccahughes/react-native-device-info/issues/355
有一个PR等待发布:
- https://github.com/rebeccahughes/react-native-device-info/pull/358
发布此更改后,您可以使用 getUUID
获取唯一标识
如果您的目标是获得客户端唯一 ID,那么您可能希望使用 NativeModules
。
Import { NativeModules } from 'react-native'
在您的组件上...
对于 iOS:console.log(NativeModules.SettingsManager.clientUniqueId)
对于 Android:console.log(NativeModules.PlatformConstants.fingerprint);
(或 NativeModules.PlatformConstants.serial
)
如果您使用的是 Expo,请试试这个。
import Constants from 'expo-constants';
this.clientId = Constants.deviceId;
如何在 React Native 中获取设备 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 不是对象(正在计算 'RNDevice.uniqueId')
注意:- 我没有使用 运行-android 或 运行-ios
我正在使用 Create-react-native app 和 yarn start。输出将通过 Expo 应用在设备上
你不能将使用本机代码的库与 expo 一起使用 caveats if you want to use native code you need to create your project with native code at getting started doc 基本上
- 安装预请求应用程序(节点 - Java 开发工具包 - android 工作室 - xcode - react native cli)
- 运行 命令
react-native init MyProjectName
- cd 你的项目文件夹
cd MyProjectName
- 运行
react-native run-android
或react-native run-ios
如果你想将 expo 项目转换为本机代码项目,你可以这样做 ejecting-from-create-react-native-app
- 如上所述安装本机代码要求
- 运行
npm run eject
之后,您可以使用使用本机代码和 运行 react-native link
您可以使用 react-native CLI 创建项目而不是 expo。
使用命令创建一个新项目:
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
然后我用命令 link :
react-native link react-native-device-info
如果您在 link 安装包时遇到任何问题,那么您可以执行手册 link 或者您可以交叉检查包是否成功 link。
- 在android/app/build.gradle:
dependencies { ... compile "com.facebook.react:react-native:+" // From node_modules + compile project(':react-native-device-info') }
- 在android/settings.gradle:
...
include ':app'
include ':react-native-device-info'
project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android')
- 在MainApplication.java中:
+ 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。
getUniqueId 在 Android 上使用 react-native-device-info 不可靠,请参阅以下问题: - https://github.com/rebeccahughes/react-native-device-info/issues/355
有一个PR等待发布: - https://github.com/rebeccahughes/react-native-device-info/pull/358
发布此更改后,您可以使用 getUUID
获取唯一标识如果您的目标是获得客户端唯一 ID,那么您可能希望使用 NativeModules
。
Import { NativeModules } from 'react-native'
在您的组件上...
对于 iOS:console.log(NativeModules.SettingsManager.clientUniqueId)
对于 Android:console.log(NativeModules.PlatformConstants.fingerprint);
(或 NativeModules.PlatformConstants.serial
)
如果您使用的是 Expo,请试试这个。
import Constants from 'expo-constants';
this.clientId = Constants.deviceId;