12

如何在本机反应中获取设备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>
  );
}

错误:未定义不是对象(评估“RNDevice.uniqueId”)

注意:- 我没有使用 run-android 或 run-ios

我正在使用 Create-react-native app 和 yarn start。输出将通过 Expo 应用程序在设备上

4

5 回答 5

16

您可以使用 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

然后我将它与命令链接:

react-native link react-native-device-info

如果您在链接软件包时遇到任何问题,那么您可以进行手动链接,或者您可以交叉检查软件包是否成功链接。

  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 中:

...

包括':应用程序'

包括 ':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。

于 2017-11-28T09:18:56.837 回答
8

如果您使用世博会试试这个。

import Constants from 'expo-constants';
this.clientId = Constants.deviceId;
于 2019-10-21T10:44:58.377 回答
6

如果你想使用原生代码,你不能使用使用原生代码的库,如果你想使用原生代码,你需要在入门文档中使用原生代码创建项目。

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

如果你想将 expo 项目转换为原生代码项目,你可以做从创建反应原生应用程序弹出

  1. 如上所述安装本机代码要求
  2. npm run eject

之后,您可以使用使用本机代码并运行的第三方库react-native link

于 2017-09-27T17:18:34.720 回答
2

如果您的目标是获取客户端唯一 ID,那么您可能需要使用NativeModules.

Import { NativeModules } from 'react-native'

在您的组件上...

对于 iOS: console.log(NativeModules.SettingsManager.clientUniqueId) 对于 Android:(console.log(NativeModules.PlatformConstants.fingerprint);NativeModules.PlatformConstants.serial

于 2019-08-07T14:27:06.160 回答
-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

于 2018-07-21T16:58:56.480 回答