在 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 基本上

  1. 安装预请求应用程序(节点 - Java 开发工具包 - android 工作室 - xcode - react native cli)
  2. 运行 命令 react-native init MyProjectName
  3. cd 你的项目文件夹 cd MyProjectName
  4. 运行 react-native run-androidreact-native run-ios

如果你想将 expo 项目转换为本机代码项目,你可以这样做 ejecting-from-create-react-native-app

  1. 如上所述安装本机代码要求
  2. 运行 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。

  1. 在android/app/build.gradle:
 dependencies {
        ...
        compile "com.facebook.react:react-native:+"  // From node_modules
    +   compile project(':react-native-device-info')
    }
  1. 在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')

  1. 在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;