Tap2iD SDK โ Android API Reference
Complete API reference for integrating the Tap2iD Android SDK. Verify mobile credentials (mDL) based on ISO/IEC 18013-5:2021 via QR code, NFC, or both with just a few lines of Kotlin.
Explore APIInitialize SDK
Call initSdk once at startup before any mDL verification. Provide your API key and application context via SdkConfig and receive results through InitSdkResultListener.
suspend fun initSdk(
config: SdkConfig,
initSdkListener: InitSdkResultListener
)
Parameters
| Parameter | Type | Description |
|---|---|---|
| config | SdkConfig | SDK configuration containing API key and application context. required |
| initSdkListener | InitSdkResultListener | Callback interface for initialization results. required |
SdkConfig
data class SdkConfig(
val apiKey: String,
val applicationContext: Context
)
InitSdkResultListener
interface InitSdkResultListener {
fun onInitializationSuccess(result: SdkInitializationResult)
fun onInitializationFailure(error: Error)
}
Example
val config = SdkConfig(
apiKey = "your_api_key_here",
applicationContext = applicationContext
)
lifecycleScope.launch {
Tap2iDSdk.initSdk(config, object : InitSdkResultListener {
override fun onInitializationSuccess(result: SdkInitializationResult) {
// SDK ready to use
}
override fun onInitializationFailure(error: Error) {
// Handle initialization error
}
})
}
Verify mDL
Call verifyMdoc with an EngagementConfig specifying the verification method โ QR code, NFC, or both simultaneously. Subscribe to MdocVerificationListener for real-time lifecycle events.
suspend fun verifyMdoc(
engagementConfig: EngagementConfig,
mdocVerificationListener: MdocVerificationListener
)
Parameters
| Parameter | Type | Description |
|---|---|---|
| engagementConfig | EngagementConfig | Verification method configuration โ QR, NFC, or both. required |
| mdocVerificationListener | MdocVerificationListener | Callback interface for verification lifecycle events. required |
EngagementConfig
Configure QR code verification, NFC verification, or both. At least one of qrConfig or nfcConfig must be non-null.
data class EngagementConfig(
val qrConfig: QrConfig? = null,
val nfcConfig: NfcConfig? = null
)
data class QrConfig(
val mDocString: String // QR code payload
)
data class NfcConfig(
val activity: Activity // Activity for NFC operations
)
MdocVerificationListener
Track verification progress through granular lifecycle callbacks.
interface MdocVerificationListener {
// Called when a verification stage begins
fun onVerificationStageStarted(stage: VerificationStage)
// Called if a verification stage encounters an error
fun onVerificationStageError(stage: VerificationStage, error: Throwable)
// Called when a verification stage completes successfully
fun onVerificationStageCompleted(stage: VerificationStage)
// Called with final verification result and credential data
fun onVerificationCompleted(verificationResult: VerificationResult)
}
Example: QR Code Verification
val qrConfig = EngagementConfig(
qrConfig = QrConfig(mDocString = scannedQrCode)
)
lifecycleScope.launch {
Tap2iDSdk.verifyMdoc(qrConfig, object : MdocVerificationListener {
override fun onVerificationStageStarted(stage: VerificationStage) {
// Update UI: show progress for current stage
}
override fun onVerificationStageError(stage: VerificationStage, error: Throwable) {
// Handle stage-specific errors
}
override fun onVerificationStageCompleted(stage: VerificationStage) {
// Stage completed successfully
}
override fun onVerificationCompleted(verificationResult: VerificationResult) {
val attributes = verificationResult.mdocAttributes
val isValid = verificationResult.isIssuerSignedAuthenticated &&
verificationResult.isDeviceSignedAuthenticated
if (isValid) {
// Process verified credential
} else {
verificationResult.validationErrors?.forEach { error ->
Log.e("Verification", "Error: ${error.message}")
}
}
}
})
}
Example: NFC Verification
val nfcConfig = EngagementConfig(
nfcConfig = NfcConfig(activity = this)
)
lifecycleScope.launch {
Tap2iDSdk.verifyMdoc(nfcConfig, verificationListener)
}
Example: Dual Mode (QR + NFC)
val dualConfig = EngagementConfig(
qrConfig = QrConfig(mDocString = scannedQrCode),
nfcConfig = NfcConfig(activity = this)
)
lifecycleScope.launch {
Tap2iDSdk.verifyMdoc(dualConfig, verificationListener)
}
Handle Results
The onVerificationCompleted callback delivers a VerificationResult containing all extracted credential attributes and the outcome of each security check.
data class VerificationResult(
val mdocAttributes: MdocAttributes, // Extracted credential attributes
val isIssuerSignedAuthenticated: Boolean, // Issuer signature validation
val isDeviceSignedAuthenticated: Boolean, // Device signature validation
val issuerInfo: String, // Issuer information
val isIssuerVerified: Boolean, // Issuer trust verification
val isMsoSigned: Boolean, // Mobile Security Object signature
val validationErrors: MutableSet? // Any validation errors encountered
)
Security Properties
| Property | Type | Description |
|---|---|---|
| isIssuerSignedAuthenticated | Boolean | Mobile Security Object signature is valid. |
| isDeviceSignedAuthenticated | Boolean | ECDSA/MAC device signature passes verification. |
| isIssuerVerified | Boolean | Issuing CA found in the SDK trust store. |
| isMsoSigned | Boolean | Mobile Security Object is properly signed. |
| validationErrors | MutableSet? | Detailed issues. Null or empty when all checks pass. |
isIssuerSignedAuthenticated and isDeviceSignedAuthenticated before trusting the credential data.
Utility Methods
Get SDK Version
Returns the current SDK version string. Useful for debugging and logging.
fun getSdkVersion(): String
val version = Tap2iDSdk.getSdkVersion()
Log.d("SDK", "Using Tap2iD SDK version: version")
Key Features
suspend fun pattern โ call initSdk and verifyMdoc inside a lifecycleScope.launch { } block to keep UI responsive.