在本机中获取设备ID?

7 android ios react-native deviceid

如何在本机中获取设备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>
  );
}
Run Code Online (Sandbox Code Playgroud)

错误:undefined不是对象(评估'RNDevice.uniqueId')

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

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

小智 11

您可以使用react-native CLI创建项目,而不是世博会.

使用命令创建一个新项目:

react-native init Myproject

cd Myproject
Run Code Online (Sandbox Code Playgroud)

使用以下命令运行项目:

react-native run-android
Run Code Online (Sandbox Code Playgroud)

然后你可以使用react-native-device-info包.

我试过以下版本,它对我有用.

  "react": "16.0.0",
  "react-native": "0.50.4",
  "react-native-device-info": "^0.12.1",
Run Code Online (Sandbox Code Playgroud)

我用命令安装它:

npm install --save react-native-device-info
Run Code Online (Sandbox Code Playgroud)

然后我用命令链接它:

react-native link react-native-device-info
Run Code Online (Sandbox Code Playgroud)

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

  1. 在android/app/build.gradle中:
 dependencies {
        ...
        compile "com.facebook.react:react-native:+"  // From node_modules
    +   compile project(':react-native-device-info')
    }
Run Code Online (Sandbox Code Playgroud)
  1. 在android/settings.gradle中:

...

包括':app'

包括':react-native-device-info'

project(':react-native-device-info').projectDir = new File(rootProject.projectDir,'../node_modules/replace-term-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()
      );
    }

    ......
  }
Run Code Online (Sandbox Code Playgroud)

权限

为AndroidManifest.xml添加适当的可选权限:

...
<uses-permission android:name="android.permission.BLUETOOTH"/>         <!-- for Device Name -->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>  <!-- for Phone Number -->
Run Code Online (Sandbox Code Playgroud)

var DeviceInfo = require('react-native-device-info');
// or import DeviceInfo from 'react-native-device-info';

var deviceId = DeviceInfo.getUniqueID();
Run Code Online (Sandbox Code Playgroud)

你可以使用上面的deviceId.


use*_*504 8

如果您正在使用 Expo,请尝试此操作。

import Constants from 'expo-constants';
this.clientId = Constants.deviceId;
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于 expo SDK 44 (4认同)

Moh*_*lil 5

你不能使用使用本机代码库世博会看到警告,如果你想使用本地代码,你需要在入门创建具有本机代码项目文档基本

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

如果您想将expo项目转换为本机代码项目,您可以执行eject-from-create-react-native-app

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

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