[BETA] NFC Scan - Integration & Usage Guide
Prerequisites
- An ICAO 9303 compliant travel document to scan the NFC chip in.
NOTE
While any ICAO 9303 document could theoretically be scanned, the tutorials in the module assume the document is a Passport booklet.
Integration
In your module-level app/build.gradle
, add the Incode library for NFC alongside any required dependencies. See the Library Dependencies section for more info.
Usage
To add the NFC Scan module to the flow, simply:
1) Create a new NfcScan
module with its Builder
class:
NfcScan
module with its Builder
class:val nfcScan = NfcScan.Builder()
.setShowNfcSymbolConfirmationScreen(true/false)
.setProcessNfcData(true/false)
.build()
NfcScan nfcScan = new NfcScan.Builder()
.setShowNfcSymbolConfirmationScreen(true/false)
.setProcessNfcData(true/false)
.build()
2) Add it to a FlowConfig.Builder
:
FlowConfig.Builder
:flowConfigBuilder.addNfcScan(nfcScan)
flowConfigBuilder.addNfcScan(nfcScan);
3) Add this callback to your IncodeWelcome.OnboardingListener
:
IncodeWelcome.OnboardingListener
:override fun onNfcScanCompleted(nfcScanResult: NfcScanResult) {
// NFC scan completed. Process result.
}
@Override
public void onNfcScanCompleted(@NonNull NfcScanResult nfcScanResult) {
// NFC scan completed. Process result.
}
Methods for NfcScan.Builder()
:
NfcScan.Builder()
:setShowNfcSymbolConfirmationScreen()
: Iftrue
, a screen asking the user if their document contains an NFC chip will be shown. If disabled, it's recommended to handle this case yourself to prevent a user without an NFC symbol on their passport from getting stuck. Default istrue
.setProcessNfcData()
: Iftrue
, the data read from the NFC chip will be used to validate identity. How it's used depends on how theFaceMatch
module is configured. Default istrue
.
Returning result of the module is an NfcScanResult
object which contains:
NfcScanResult
object which contains:resultCode
: AResultCode
indicating if scanning succeeded, or a known issue caused it to not succeed. See the Javadoc for more info.compositeCheckDigit
: AChar
representing the digit used to check the integrity of all the data in the MRZ of the document.dateOfBirth
: AString
in "yyMMdd" format of the date of birth of the document owner.dateOfBirthCheckDigit
: AChar
representing the digit used to check the integrity of thedateOfBirth
field.dateOfExpiry
: AString
in "yyMMdd" format of the document's expiration date.dateOfExpiryCheckDigit
: AChar
representing the digit used to check the integrity of thedateOfExpiry
field.documentCode
: AString
representing what type of ICAO 9303 compliant document this is. For example, a passport booklet is "TD3". Can be one of: TD1-3, MRVA, or MVRB.documentNumber
: AString
representing the 9 most significant digits of the passport number, CIC, etc.documentNumberCheckDigit
: AChar
representing the digit used to check the integrity of thedocumentNumber
field.gender
: AString
representing the gender of the document owner. Can be one of:MALE
,FEMALE
,UNKNOWN
, orUNSPECIFIED
.issuingStateOrOrganization
: AString
containing the 3 Letter Code of which authority issued this document. For example, for US Passports, this code is: "USA".nationality
: AString
= AString
containing the 3 Letter Code of the document owner's nationality. For example, for UK Passports, this code is: "GBR".optionalData1
: AString
with the contents of the first optional data for TD-1 and 3 style MRZs.optionalData2
: An optionalString
with the contents of the second optional data for TD-1 style MRZs only.personalNumber
: AString
with the personal number of the document owner if it's encoded inoptionalData1
.personalNumberCheckDigit
: An optionalChar
representing the digit used to check the integrity of thepersonalNumber
field. This is only populated ifdocumentCode
is "TD3".primaryIdentifier
: AString
representing the primary means of identifying the document. Typically, this is the document owner's last name.secondaryIdentifier
: AString
representing secondary means of identifying the document. Typically, this is the document owner's other names besides the last.secondaryIdentifierComponents
: AnArray<String>
of all the individual names that make up thesecondaryIdentifier
. For example, if the document owner's name is "John Jacob Jingleheimer Schmidt", thesecondaryIdentifierComponents
would be this array:["John", "Jacob", "Jingleheimer"]
.faceBitmap
: ABitmap
of the image found on the NFC chip. See the Android documentation for more info.
Face Match and NFC Scanning:
If NfcScan.Builder().setProcessNfcData()
is set to true
, the data read from the NFC chip will be processed on the backend and can be used in the FaceMatch
module. Moreover, when NFC data is available on the backend, 2 new FaceMatch.MatchTypes
become available on top of the default ID_SELFIE
type:
NFC_SELFIE
: Compares the image from the NFC chip to the Selfie taken in theSelfieScan
module.NFC_3_WAY
: Compares the cropped ID image from theIdScan
module, to the image from the NFC chip, as well as the Selfie taken in theSelfieScan
module.
Capturing Multiple IDs and NFC Scanning:
If your Flow
includes capturing multiple IDs before an NFC scan is initiated, the nfc
module is only supported for the first ID.
License
Copyright 2024 Incode Technologies. All rights reserved.
Updated 3 months ago