在本机中获取设备ID?

时间:2017-09-27 16:07:01

标签: 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>
  );
}

错误:undefined不是对象(评估&#39; RNDevice.uniqueId&#39;)

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

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

5 个答案:

答案 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

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

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

      ...

           

      包括&#39;:app&#39;

           

      包括&#39;:react-native-device-info&#39;

           

      项目(&#39;:react-native-device-info&#39;)。projectDir = new File(rootProject.projectDir,   &#39; ../ node_modules /反应天然器件用方式/机器人&#39)

        MainApplication.java中的
      1. + 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

  1. 安装预请求应用程序(节点 - Java开发工具包 - 安卓工作室 - xcode - 反应原生cli)
  2. 运行命令react-native init MyProjectName
  3. cd你的项目文件夹cd MyProjectName
  4. 运行react-native run-androidreact-native run-ios
  5. 如果要将expo项目转换为本机代码项目,可以执行doc

    1. 按上述方式安装本机代码要求
    2. 运行npm run eject
    3. 之后,您可以使用使用本机代码的第三方库并运行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