react NativeでデバイスIDを取得する方法。 Android studioではなく、create react nativeを使用しています。これは初めてです。
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」を評価)
注:-run-Androidまたはrun-iosを使用していません
Create-react-nativeアプリとyarn startを使用しています。出力はExpoアプリを介してデバイス上にあります
expoでネイティブコードを使用するライブラリを使用することはできません 警告 を参照してくださいネイティブコードを使用する場合は、開始時にネイティブコードでプロジェクトを作成する必要があります doc 基本的に
react-native init MyProjectName
を実行しますcd MyProjectName
をcdしますreact-native run-Android
またはreact-native run-ios
を実行しますexpoプロジェクトをネイティブコードプロジェクトに変換する場合は、 ejecting-from-create-react-native-app を実行できます。
npm run eject
を実行しますその後、ネイティブコードを使用してreact-native link
を実行するサードパーティライブラリを使用できます
Expoの代わりに、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
パッケージのリンク中に問題が発生した場合は、手動リンクを行うか、パッケージが正常にリンクされているかどうかをクロスチェックできます。
dependencies { ... compile "com.facebook.react:react-native:+" // From node_modules + compile project(':react-native-device-info') }
...
「:app」を含める
「:react-native-device-info」を含める
project( ':react-native-device-info')。projectDir = new File(rootProject.projectDir、 '../node_modules/react-native-device-info/Android')
+ 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を使用できます。
Expoを使用している場合は、これを試してください。
import Constants from 'expo-constants';
this.clientId = Constants.deviceId;
クライアントの一意のIDを取得することが目的の場合は、NativeModules
を使用できます。
_Import { NativeModules } from 'react-native'
_
コンポーネントに...
iOSの場合:console.log(NativeModules.SettingsManager.clientUniqueId)
Androidの場合:console.log(NativeModules.PlatformConstants.fingerprint);
(または_NativeModules.PlatformConstants.serial
_)