capacitor-hce-plugin-int

Plugin to make your capacitor app to support NFC HCE


Keywords
capacitor, plugin, native
License
MIT
Install
npm install capacitor-hce-plugin-int@1.7.2

Documentation

Capacitor HCE plugin

Host Card Emulation (HCE) Plugin for Capacitor / Ionic on Android. This project is ported and reuse code based from https://github.com/agmo-ios-team/flutter_nfc_hce that forked for Flutter HCE Plugin https://pub.dev/packages/flutter_nfc_hce you can follow the introcuction for thier project

Install

npm install capacitor-hce-plugin-int
npx cap sync

Limitation

  • This plugin only support NFC Type-4 Tag with NDEF message for now

Android Setup

  1. Add permission to your AndroidManifest.xml.

     <uses-permission android:name="android.permission.NFC" />
     <uses-feature android:name="android.hardware.nfc" android:required="true" />
     <uses-feature android:name="android.hardware.nfc.hce" android:required="true" />
     <uses-permission android:name="android.permission.VIBRATE" />
  2. Register service to your AndroidManifest.xml.

     <service android:name="com.thanmgan22.plugins.nfchce.KHostApduService"
                  android:exported="true"
                  android:enabled="true"
                  android:permission="android.permission.BIND_NFC_SERVICE">
        <intent-filter>
            <action android:name="android.nfc.cardemulation.action.HOST_APDU_SERVICE"/>
            <category android:name="android.intent.category.DEFAULT"/>
        </intent-filter>
       <meta-data android:name="android.nfc.cardemulation.host_apdu_service"
                  android:resource="@xml/apduservice"/>
     </service>
  3. Add apduservice.xml to your res/xml

    <?xml version="1.0" encoding="utf-8"?>
    <host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
                       android:description="@string/servicedesc" android:requireDeviceScreenOn="false" android:requireDeviceUnlock="false">
        <aid-group android:description="@string/aiddescription"  android:category="other" >
            <aid-filter android:name="D2760000850101"/>
        </aid-group>
    </host-apdu-service>
  4. Add strings.xml to your res/values

    <resources>
    <string name="servicedesc">servicedesc</string>
    <string name="aiddescription">aiddescription</string>
    </resources>

Ios Setup

  1. Vajag Pieteikties Apple Ios HCE entitelment. Kad piesakās norādīt AID kā D2760000850101
  2. Pievienot Apple HCE pie sava projekta Xcode

Izmantošana

  1. Importēt Galveno Module
    import {NfcEmulation} from 'capacitor-hce-plugin-int';
  2. Izmanto kā parastu component, data parametrā ievada vērtību ko grib emulēt kā nfc tag.
     <NfcEmulation data="Hello World!"></NfcEmulation>
  3. January pats grib piekļūt visiem API, to var izdarīt importējot HCECapacitorPlugin
    import { HCECapacitorPlugin } from 'capacitor-hce-plugin-int';

API

StartIosEmulation(...)

StartIosEmulation(options: { Data: string; }) => Promise<{ Data: string; }>
Param Type
options { Data: string; }

Returns: Promise<{ Data: string; }>


addListener('sessionInvalidated' | 'nfcDataComplete', ...)

addListener(eventName: 'sessionInvalidated' | 'nfcDataComplete', listener: (event: any) => void) => Promise<void>
Param Type
eventName 'sessionInvalidated' | 'nfcDataComplete'
listener (event: any) => void

removeListener(...)

removeListener(eventName: 'sessionInvalidated' | 'nfcDataComplete', listener: (event: any) => void) => Promise<void>
Param Type
eventName 'sessionInvalidated' | 'nfcDataComplete'
listener (event: any) => void

startNfcHce(...)

startNfcHce(options: { content: string; mimeType?: string; persistMessage?: boolean; }) => Promise<{ success: boolean; }>
Param Type
options { content: string; mimeType?: string; persistMessage?: boolean; }

Returns: Promise<{ success: boolean; }>


stopNfcHce()

stopNfcHce() => Promise<{ success: boolean; }>

Returns: Promise<{ success: boolean; }>


isNfcSupported()

isNfcSupported() => Promise<{ supported: boolean; }>

Returns: Promise<{ supported: boolean; }>


isNfcEnabled()

isNfcEnabled() => Promise<{ enabled: boolean; }>

Returns: Promise<{ enabled: boolean; }>


isNfcHceSupported()

isNfcHceSupported() => Promise<{ supported: boolean; }>

Returns: Promise<{ supported: boolean; }>


isSecureNfcEnabled()

isSecureNfcEnabled() => Promise<{ enabled: boolean; }>

Returns: Promise<{ enabled: boolean; }>


enableApduService(...)

enableApduService(options: { enable: boolean; }) => Promise<{ enabled: boolean; }>
Param Type
options { enable: boolean; }

Returns: Promise<{ enabled: boolean; }>


addListener('onStatusChanged', ...)

addListener(eventName: 'onStatusChanged', listenerFunc: (response: { eventName: ReaderStatusType; }) => void) => Promise<PluginListenerHandle> & PluginListenerHandle
Param Type
eventName 'onStatusChanged'
listenerFunc (response: { eventName: ReaderStatusType; }) => void

Returns: Promise<PluginListenerHandle> & PluginListenerHandle


Interfaces

PluginListenerHandle

Prop Type
remove () => Promise<void>

Enums

ReaderStatusType

Members Value
CardEmulatorStarted 'card-emulator-started'
ScanError 'scan-error'
ScanCompleted 'scan-completed'
CardEmulatorStopped 'card-emulator-stopped'