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
| # | Element | Change | Impact |
|---|---|---|---|
| 1 | initialize() | Now accepts options and returns a Result type. | All call sites must handle the result and possible errors. |
| 2 | sendProximityPresentationRequest | Option renamed from skipStatusCheck to checkStatus with inverted semantics. | All call sites using skipStatusCheck must be updated. |
| 3 | ProximityPresentationSessionTerminationErrorType | New Exception value added. | Exhaustive switches must handle new case. |
| 4 | NFC error listener in registerForNfcDeviceEngagement | Now routes parse failures to onError instead of rethrowing. | Update error handling logic accordingly. |
New Additions
Functions
| Function | Description | Platform |
|---|---|---|
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?)— newInitializeOptionsparameter:loggerConfiguration?: LoggerConfiguration—logLevel,callbackLogLevel, optionallogDir, optionalcallbackplatformConfiguration?: PlatformConfiguration—tenantHost: string(required forrequestMobileCredentials)
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 }OnlinePresentationResultErrorType—SessionAborted | VerificationError | ResponseError | WalletUnavailable | Unknown
- Apple Wallet:
AppleWallet— object withrequestMobileCredentials(challenge): Promise<Result<...>>RequestMobileCredentialsWithAppleWalletError/RequestMobileCredentialsWithAppleWalletErrorType
requestMobileCredentialsoptions & errors:RequestMobileCredentialsOptions—{ request, applicationId, walletProviderId?, challenge }RequestMobileCredentialsErrorTypeRequestMobileCredentialsError
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
| Location | New values |
|---|---|
MobileCredentialVerifierErrorType | Connectivity, StorageInitializedInBackground, SdkInitialized, PlatformNotSupported, PlatformConfigurationInvalid, SessionTimedOut, SessionAborted, DigitalCredentialManager, UserCanceled, FailedToRequestMobileCredentials, AppleWalletNotAvailable |
ProximityPresentationSessionTerminationErrorType | Exception |
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.
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 Parameter | New Parameter | Mapping |
|---|---|---|
skipStatusCheck = false (default) | checkStatus = true (default) | No change needed |
skipStatusCheck = true | checkStatus = false | Invert 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