Skip to content

Android NFC

Overview

BiometridStandardNFC provides NFC document reading capabilities for Android. It reads data from NFC-enabled identity documents (passports, national ID cards) including personal information and biometric photos. The module supports two OCR providers for MRZ (Machine Readable Zone) reading: OCR01 (Innovatrics) and OCR03 (Regula).

Prerequisites

  • The Core SDK must be initialized first
  • Android minSdk 30 or higher
  • Device must have NFC hardware
  • NFC permission in AndroidManifest.xml
  • <uses-permission android:name="android.permission.NFC" />

Initialization

Create an instance of BiometridStandardNFC by providing the activity, lifecycle, OCR provider, and callback.

import com.biometrid.biometridstandardnfc.BiometridStandardNFC
import com.biometrid.biometridstandardnfc.model.NfcOcrProvider
import com.biometrid.biometridstandardnfc.BiometridStandardNFCCallback
import com.biometrid.biometridstandardnfc.model.BiometridNFCData
import com.biometrid.biometridstandard.model.BiometridErrorInfo

val nfcCallback = object : BiometridStandardNFCCallback {
    override fun readWithSuccess(result: BiometridNFCData?) {
        // Handle NFC data
    }

    override fun readWithError(error: BiometridErrorInfo?) {
        // Handle NFC error
    }
}

val nfc = BiometridStandardNFC(
    activity = this,
    lifecycle = lifecycle,
    ocrProvider = NfcOcrProvider.OCR03,
    nfcCallback = nfcCallback
)

Available Methods

Constructor

BiometridStandardNFC(
    activity: Activity,
    lifecycle: Lifecycle,
    ocrProvider: NfcOcrProvider,
    nfcCallback: BiometridStandardNFCCallback
)
Parameter Type Description
activity Activity The host Activity for NFC operations
lifecycle Lifecycle Activity lifecycle for automatic NFC dispatch management
ocrProvider NfcOcrProvider The OCR provider to use for MRZ reading
nfcCallback BiometridStandardNFCCallback Callback to receive NFC read results

startNFC

suspend fun startNFC()

Initializes the NFC reader and starts listening for NFC tags. When a compatible document is detected, the module reads the chip data and delivers the result through the callback.

Callback Interface

BiometridStandardNFCCallback

interface BiometridStandardNFCCallback {
    fun readWithSuccess(result: BiometridNFCData?)
    fun readWithError(error: BiometridErrorInfo?)
}
Method Description
readWithSuccess(result) Called when NFC data is successfully read from the document
readWithError(error) Called when NFC reading fails

Enums

NfcOcrProvider

enum class NfcOcrProvider {
    OCR01,   // Innovatrics OCR engine (license: iengine.lic)
    OCR03    // Regula OCR engine (license: regula.license)
}

Data Models

BiometridNFCData

@Serializable
data class BiometridNFCData(
    var name: String? = null,
    var surname: String? = null,
    var documentType: String? = null,
    var mrzCode: String? = null,
    var documentNumber: String? = null,
    var dateOfBirth: String? = null,
    var dateOfExpiry: String? = null,
    var gender: String? = null,
    var idNumber: String? = null,
    var nationality: String? = null,
    var photos: BiometridNFCPhotos? = null
)
Property Type Description
name String? First name(s) from the document
surname String? Surname from the document
documentType String? Type of document (e.g., passport, ID card)
mrzCode String? Raw MRZ code string
documentNumber String? Document number
dateOfBirth String? Date of birth
dateOfExpiry String? Document expiry date
gender String? Gender
idNumber String? National ID number
nationality String? Nationality code
photos BiometridNFCPhotos? Biometric photos from the chip

BiometridNFCPhotos

@Serializable
data class BiometridNFCPhotos(
    var face: PlatformImageType? = null,
    var signature: PlatformImageType? = null
)

On Android, PlatformImageType wraps a Bitmap:

actual class PlatformImageType(val bitmap: Bitmap?)
Property Type Description
face PlatformImageType? Face photo from the document chip (wraps Bitmap)
signature PlatformImageType? Signature image from the document chip (wraps Bitmap)

BiometridErrorInfo

@Serializable
data class BiometridErrorInfo(
    val code: String? = null,
    val message: String? = null,
    val data: JsonElement? = null
)

Error Handling

Errors are returned as BiometridErrorInfo objects through the readWithError callback. Error codes are prefixed with MSN (NFC module).

The module automatically manages NFC foreground dispatch through the activity lifecycle. NFC dispatch is enabled in onResume and disabled in onPause.

Usage Example

class NFCActivity : AppCompatActivity() {

    private lateinit var nfc: BiometridStandardNFC

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val callback = object : BiometridStandardNFCCallback {
            override fun readWithSuccess(result: BiometridNFCData?) {
                result?.let { data ->
                    val name = data.name
                    val surname = data.surname
                    val documentNumber = data.documentNumber
                    val facePhoto = data.photos?.face?.bitmap

                    // Process NFC data
                    // Submit to BiometridStandard.updateStep()
                }
            }

            override fun readWithError(error: BiometridErrorInfo?) {
                Log.e("NFC", "Read failed: ${error?.message}")
            }
        }

        nfc = BiometridStandardNFC(
            activity = this,
            lifecycle = lifecycle,
            ocrProvider = NfcOcrProvider.OCR03,
            nfcCallback = callback
        )

        // Start NFC reading
        CoroutineScope(Dispatchers.Main).launch {
            nfc.startNFC()
        }
    }
}