Bring NFC feature to React Native. Inspired by phonegap-nfc and react-native-ble-manager
Contributions are welcomed!
- Android (API 10+)
- iOS (iOS11 with iPhone 7/7+, 8/8+)
You will need to setup some capabilities / entitlement / plist stuff to enable NFC development on your device, please follow this great tutorial:
npm i --save react-native-nfc-manager
react-native link react-native-nfc-manager
Look into example/App.js
as a starting point.
The easiest way to test is simple make your AppRegistry
point to our example component, like this:
// in your index.ios.js or index.android.js
import React, { Component } from 'react';
import {
AppRegistry,
} from 'react-native';
import App from 'react-native-nfc-manager/example/App'
AppRegistry.registerComponent('NfcManagerDev', () => App);
This library provide a default export NfcManager
and a named export NdefParser
, like this:
import NfcManager, {NdefParser} from 'react-native-nfc-manager'
All methods in NfcManager
return a Promise
object and are resolved to different types of data according to individual API.
NdefParser
is an utility class to parse some well-known NDEF format, currently only support RTD URI
.
Init the module. If the device doesn't support NFC, the returning promise will be rejected.
Arguments
onSessionClosedIOS
-function
- [iOS only] the callback to invoke when anNFCNDEFReaderSession
becomes invalidated
Examples
NfcManager.start({
onSessionClosedIOS: () => {
console.log('ios session closed');
}
})
.then(result => {
console.log('start OK', result);
})
.catch(error => {
console.warn('device does not support nfc!');
this.setState({supported: false});
})
Terminates the module. This will remove the onSessionClosedIOS listener that is attached in the start
function.
Check if the NFC is enabled.
Returned Promise
resolved to a boolean value to indicate whether NFC is enabled.
Direct the user to NFC setting.
Get the NFC tag object which launches the app.
Returned Promise
resolved to the NFC tag object launching the app and resolved to null if the app isn't launched by NFC tag.
Start to listen to ANY NFC tags.
Arguments
listener
-function
- the callback when discovering NFC tagsalertMessage
-string
- (iOS) the message to display on iOS when the NFCScanning pops upinvalidateAfterFirstRead
-boolean
- (iOS) when set to true this will not have you prompt to click done after NFC Scan.
Examples
NfcManager.registerTagEvent(tag => {
console.log('Tag Discovered', tag);
}, 'Hold your device over the tag', true)
Stop listening to NFC tags.
Try to parse uri from a NdefMessage, return an object with an uri
property.
Arguments
ndef
-object
- this object should be obtained from nfc tag object with this form:tag.ndefMessage[0]
. (NFC tag object can be obtained bygetLaunchTagEvent
orregisterTagEvent
)
Examples
let {uri} = NdefParser.parseUri(sampleTag.ndefMessage[0]);
console.log('parseUri: ' + uri);
By default react-native-nfc-manager is set to not require NFC hardware on Android. This setting will overwrite what ever you put in your main AndroidManifest.xml file during react-native link
phase.
If you want to change this behavior to only have your app support NFC devices you have to override you app manifest manually.
Current setting is:
<uses-feature android:name="android.hardware.nfc" android:required="false" />
If you want to only have your app support NFC devices then you have to change required to true.