light-mode-image
Learn
MobileSDKs

React Native Verifier SDK v9.0.0 Migration Guide

A guide to help developers migrate from React Native Verifier SDK v8.x to v9.0.0, including breaking changes, new features, and best practices.

Overview

This guide provides a comprehensive overview of the changes introduced in React Native Verifier SDK v9.0.0, including breaking changes, new features, and migration steps.

Key Features

  • App to app verification: The React Native Verifier SDK can now be used to request credentials from another app on the same device using OID4VP. This allows you to build verification flows directly into your apps and have a holder app on the same device respond.
  • Verify with Apple Wallet (iOS Only): The SDK can now request and verify a credential directly from an Apple Wallet using the Verify with Wallet API. Only available for iOS 16 and above.
  • Improved reliability in contactless flows: Enhanced BLE performance delivers more consistent proximity credential exchanges and faster engagements.
  • Status Lists Draft 14 Support: The SDK now supports the Token Status List Draft 14 specification while maintaining existing support for Draft 3.
  • Stronger cryptography and standards alignment: Updated COSE algorithms (as per RFC 9864) strengthen cryptographic compatibility and ensure continued compliance with evolving standards.
  • General stability and performance improvements: Multiple refinements reduce integration friction, increase consistency across mobile environments, and improve overall user experience.

For a detailed list of changes included in this release, refer to the SDK Changelog.

Breaking Changes

#ElementChangeImpact
1initialize()Now accepts options and returns a Result type.All call sites must handle the result and possible errors.
2sendProximityPresentationRequestOption renamed from skipStatusCheck to checkStatus with inverted semantics.All call sites using skipStatusCheck must be updated.
3ProximityPresentationSessionTerminationErrorTypeNew Exception value added.Exhaustive switches must handle new case.
4NFC error listener in registerForNfcDeviceEngagementNow routes parse failures to onError instead of rethrowing.Update error handling logic accordingly.

New Additions

Functions

FunctionDescriptionPlatform
fetchAppleWalletConfiguration(options)Fetches Apple Wallet configuration needed before initiating the Apple Wallet verification flow. Returns an AppleWallet object.iOS only
handleDeepLink(options)Handles a deep link URL to continue the online presentation flow.iOS only
requestMobileCredentials(options)Remote app-to-app credential verification via Digital Credential Manager / OpenID4VP. Returns OnlinePresentationSessionResult.Android (DCM/OID4VP), iOS (OID4VP only)
destroy()Destroys the verifier SDK instance. Returns an error if called while the SDK is initialized; deinitialize the SDK before calling.All
getCurrentLogFilePath()Returns path to the Verifier SDK log file.All

Updated Function Signatures

  • initialize(options?) — new InitializeOptions parameter:
    • loggerConfiguration?: LoggerConfigurationlogLevel, callbackLogLevel, optional logDir, optional callback
    • platformConfiguration?: PlatformConfigurationtenantHost: string (required for requestMobileCredentials)

New initialize Options

  • loggerConfiguration?: LoggerConfiguration — configure SDK logging: logLevel, callbackLogLevel, logDir, callback on log events.
  • platformConfiguration?: PlatformConfiguration — set MATTR VII tenant host for remote credential requests.

New Types & Enums

  • Online presentation (remote/app-to-app):
    • OnlinePresentationSessionResult{ sessionId, challenge?, mobileCredentialResponse?, error? }
    • OnlinePresentationResultError{ type: OnlinePresentationResultErrorType, message }
    • OnlinePresentationResultErrorTypeSessionAborted | VerificationError | ResponseError | WalletUnavailable | Unknown
  • Apple Wallet:
    • AppleWallet — object with requestMobileCredentials(challenge): Promise<Result<...>>
    • RequestMobileCredentialsWithAppleWalletError / RequestMobileCredentialsWithAppleWalletErrorType
  • requestMobileCredentials options & errors:
    • RequestMobileCredentialsOptions{ request, applicationId, walletProviderId?, challenge }
    • RequestMobileCredentialsErrorType
    • RequestMobileCredentialsError
  • handleDeepLink:
    • HandleDeepLinkOptions{ url: string }
  • fetchAppleWalletConfiguration:
    • FetchAppleWalletConfigurationOptions{ request, applicationId, merchantId }
    • FetchAppleWalletConfigurationError / FetchAppleWalletConfigurationErrorType
  • initialize:
    • InitializeOptions, LoggerConfiguration, PlatformConfiguration, LogLevel (Off | Error | Warn | Info | Debug | Verbose)
    • InitializeErrorType = SdkInitialized | StorageInitializedInBackground

New Error Values

LocationNew values
MobileCredentialVerifierErrorTypeConnectivity, StorageInitializedInBackground, SdkInitialized, PlatformNotSupported, PlatformConfigurationInvalid, SessionTimedOut, SessionAborted, DigitalCredentialManager, UserCanceled, FailedToRequestMobileCredentials, AppleWalletNotAvailable
ProximityPresentationSessionTerminationErrorTypeException

Minimum Requirements

iOS

  • iOS 15+ for core SDK functionality.

Android

  • Android 7 / Nougat / API 24.
  • The underlying Android Verifier SDK is built using Kotlin 2.0. This adds some intrinsic dependencies into your build tools.
    • Kotlin 2.0 is supported from AGP version 8.5.
    • AGP 8.5 is supported from Gradle version 8.7 and Android Studio Koala 2024.1.1.

Migration Steps

Update initialize() usage

The initialize() function now accepts an optional options object and returns a Result. Update your code to handle the result and possible errors:

- await initialize();
+ const result = await initialize(options);
+ if (result.isErr()) {
+   // Handle error: result.error
+ }

Update sendProximityPresentationRequest calls

The skipStatusCheck parameter has been renamed to checkStatus with inverted semantics. When checkStatus is true (default), the SDK will verify credential status. When false, it will skip status checking. Update all calls accordingly:

- const response = await sendProximityPresentationRequest({ ..., skipStatusCheck: true });
+ const response = await sendProximityPresentationRequest({ ..., checkStatus: false });
Old ParameterNew ParameterMapping
skipStatusCheck = false (default)checkStatus = true (default)No change needed
skipStatusCheck = truecheckStatus = falseInvert the boolean

Handle new ProximityPresentationSessionTerminationErrorType.Exception case

If you switch over ProximityPresentationSessionTerminationErrorType, add handling for the new Exception value.

Update NFC error handling

The NFC error listener in registerForNfcDeviceEngagement now routes parse failures to onError instead of rethrowing. Update your error handling logic accordingly.

How would you rate this page?

Last updated on

On this page