Socket
Socket
Sign inDemoInstall

react-native-nfc-manager

Package Overview
Dependencies
70
Maintainers
1
Versions
113
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    react-native-nfc-manager

A NFC module for react native.


Version published
Weekly downloads
11K
increased by4.92%
Maintainers
1
Install size
4.99 MB
Created
Weekly downloads
 

Readme

Source

react-native-nfc-manager

npm version build issues

Bring NFC feature to React Native. Inspired by phonegap-nfc and react-native-ble-manager

Contributions are welcome!

Made with ❤️ by whitedogg13 and revteltech

Special thanks to javix64 for restructuring the documentation!

Table of Contents

  1. Installation
  2. Getting Started
  3. Setup
  4. Documentation
  5. Nfc compatibility
  6. Usage Concept
  7. API
  8. App demo
  9. Learn

Installation

npm i --save react-native-nfc-manager

iOS

This library use native-modules, so you will need to do pod install for iOS:

cd ios && pod install && cd ..

Android

It should be properly auto-linked, so you don't need to do anything.

Setup

iOS

  1. In apple developer site, enable capability for NFC

enable capability

  1. in Xcode, add NFCReaderUsageDescription into your info.plist, for example:
<key>NFCReaderUsageDescription</key>
<string>We need to use NFC</string>

More info on Apple's doc

Additionally, if writing ISO7816 tags add application identifiers (aid) into your info.plist as needed like this.

<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
<array>
  <string>D2760000850100</string>
  <string>D2760000850101</string>
</array>

More info on Apple's doc

Note: If you are using NfcTech.FelicaIOS, you must also add the following code to your Info.plist file, otherwise the library will crash:

<key>com.apple.developer.nfc.readersession.felica.systemcodes</key>
<array>
  <string>8005</string>
  <string>8008</string>
  <string>0003</string>
  <string>fe00</string>
  <string>90b7</string>
  <string>927a</string>
  <string>12FC</string>
  <string>86a7</string>
</array>

An incomplete list of aid's can be found here. Application identifier

  1. in Xcode's Signing & Capabilities tab, make sure Near Field Communication Tag Reading capability had been added, like this:

xcode-add-capability

If this is the first time you toggle the capabilities, the Xcode will generate a <your-project>.entitlement file for you:

xcode-add-entitlement

  1. in Xcode, review the generated entitlement. It should look like this:

edit entitlement

More info on Apple's doc

Android

Simple add uses-permission into your AndroidManifest.xml:

 <uses-permission android:name="android.permission.NFC" />
Support Android 12

We start to support Android 12 from v3.11.1, and you will need to update compileSdkVersion to 31, otherwise the build will fail:

buildscript {
    ext {
        ...
        compileSdkVersion = 31
        ...
    }
    ...
}

The reason for this is because Android puts new limitation on PendingIntent which says Starting with Build.VERSION_CODES.S, it will be required to explicitly specify the mutability of PendingIntents

The original issue is here

If you don't care about Android 12 for now, you can use v3.11.0 as a short term solution.

Getting Started

The simplest (and most common) use case for this library is to read NFC tags containing NDEF, which can be achieved via the following codes:

import React from 'react';
import {View, Text, TouchableOpacity, StyleSheet} from 'react-native';
import NfcManager, {NfcTech} from 'react-native-nfc-manager';

// Pre-step, call this before any NFC operations
NfcManager.start();

function App() {
  async function readNdef() {
    try {
      // register for the NFC tag with NDEF in it
      await NfcManager.requestTechnology(NfcTech.Ndef);
      // the resolved tag object will contain `ndefMessage` property
      const tag = await NfcManager.getTag();
      console.warn('Tag found', tag);
    } catch (ex) {
      console.warn('Oops!', ex);
    } finally {
      // stop the nfc scanning
      NfcManager.cancelTechnologyRequest();
    }
  }

  return (
    <View style={styles.wrapper}>
      <TouchableOpacity onPress={readNdef}>
        <Text>Scan a Tag</Text>
      </TouchableOpacity>
    </View>
  );
}

const styles = StyleSheet.create({
  wrapper: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
  },
});

export default App;

DOCUMENTATION

Check the full documentation that contains examples, faq and other topics like Expo in our Wiki

Nfc Compatibility

NFC TechnologiesAndroidiOS
Ndef
NfcA
IsoDep
NfcB
NfcF
NfcV
MifareClassic
MifareUltralight
MifareIOS
Iso15693IOS
FelicaIOS

Usage concept

In higher level, there're 4 steps to use this library:

  1. (Recommended but not necessary) Before all next steps, use NfcManager.start() to start listen a tag.

  2. Request your particular NFC technologies through NfcManager.requestTechnology. Let's request Ndef techonogy.

NfcManager.requestTechnology(NfcTech.Ndef);
  1. Select the proper NFC technology handler, which is implemented as getter in main NfcManager object.
NfcManager.ndefHandler
  1. Call specific methods on the NFC technology handler.
NfcManager.ndefHandler.getNdefMessage()
  1. Clean up your tech registration through:
NfcManager.cancelTechnologyRequest()

API

The following table shows the handler for each technology, so if you need to use a technology, go to index.d.ts and search for it.

NFC TechnologiesHandlers
NdefNdefHandler
NfcANfcAHandler
IsoDepIsoDepHandler
NfcB-
NfcF-
NfcVNfcVHandler
MifareClassicMifareClassicHandlerAndroid
MifareUltralightMifareUltralightHandlerAndroid
MifareIOS-
Iso15693IOSIso15693HandlerIOS
FelicaIOS-

App Demo - NfcOpenReWriter

We have a full featured NFC utility app using this library available for download. The source code is here: React Native NFC ReWriter App

react-native-nfc-rewriter
react-native-nfc-rewriter

Learn

We have published a React Native NFC course with newline.co, check it out!

  • Free course (1 hour) about basic NFC setup and concept here
  • Full course (3 hours) for more (NDEF, Deep Linking, NTAG password protection, signature with UID) here

Keywords

FAQs

Last updated on 07 Apr 2024

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc