Permissions

Host app permission requirements for the React Native Verifier SDK.

Host App Changes Required

Before testing NFC delivery on device, your host application must declare the required native setup in AndroidManifest.xml and Android XML resources, and register a native HCE service. The SDK cannot configure these for you — they live in your app's platform directories. Core QR-only verification does not require any of this setup.

Why This Matters

The SDK can support flows that rely on device capabilities such as:

  • QR display for verifier-initiated presentation requests
  • Android NFC Host Card Emulation for request delivery (optional)

The SDK cannot register native services or grant runtime permissions for your app. Your host application must add the required native configuration before NFC delivery can work on device. Core QR-only verification does not require any platform-specific setup.

NFC Delivery Setup

VerificationView can expose the active presentation request over Android NFC Host Card Emulation (HCE) when enableNfcDelivery is true. This lets a nearby wallet app receive the same request by tapping instead of scanning the QR code.

Install the HCE peer dependency in the verifier app:

npm install react-native-hce

Add NFC and HCE declarations to the verifier app's android/app/src/main/AndroidManifest.xml:

<uses-permission android:name="android.permission.NFC" />
<uses-feature android:name="android.hardware.nfc" android:required="false" />
<uses-feature android:name="android.hardware.nfc.hce" android:required="false" />

Add the HCE service inside the <application> element:

<service
  android:name="com.reactnativehce.services.CardService"
  android:exported="true"
  android:enabled="false"
  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/aid_list" />
</service>

Create android/app/src/main/res/xml/aid_list.xml with the VECU Type 4 AID:

<host-apdu-service xmlns:android="http://schemas.android.com/apk/res/android"
  android:description="@string/app_name"
  android:requireDeviceUnlock="false">
  <aid-group
    android:category="other"
    android:description="@string/app_name">
    <aid-filter android:name="F056454355000001" />
  </aid-group>
</host-apdu-service>

The AID must match the wallet application's NFC reader configuration. If the wallet app uses the Wallet React Native SDK on iOS, configure its Info.plist and NFC entitlement entries in Wallet NFC Setup.

iOS Behavior

iOS cannot host Android-style HCE. On iOS verifier devices, enableNfcDelivery falls back to the QR presentation request. The iOS AID setup is needed by wallet apps that receive verifier-initiated NFC requests.

Related Guidance