Migration from 1.9.x to 1.10.x
PowerAuth Mobile SDK in version 1.10.0
provides the following improvements:
- PowerAuth mobile SDK no longer supports activation by the recovery code.
- New
PowerAuthBiometricConfiguration
class that simplifies biometric configuration ofPowerAuthSDK
class. - PowerAuth mobile SDK now ensures sensitive keys are not retained in memory.
Compatibility with PowerAuth Server
- This release is fully compatible with PowerAuth Server version
1.9.0
and newer.
Android
Notable changes on Android:
- New
PowerAuthBiometricPrompt
class simplifies biometric key setup and authentication. - Added the
SecureData
class toio.getlime.security.powerauth.core
package to enhance in-memory management of sensitive data.
API changes
- The following methods or properties are now deprecated:
PowerAuthSDK
class:changePasswordUnsafe()
- use asynchronouschangePassword()
as a replacement.persistActivationWithAuthentication()
- use asynchronous variant withIPersistActivationListener
as a callback parameter.persistActivationWithPassword()
- use asynchronous variant withIPersistActivationListener
as a callback parameter.persistActivation(..., IPersistActivationWithBiometricsListener)
- use asynchronous method withIPersistActivationListener
as a callback parameter.- All variants of
addBiometryFactor()
with “title” and “description” parameters are now replaced with variant usingPowerAuthBiometricPrompt
. removeBiometryFactor()
- use asynchronous variant withIRemoveBiometryFactorListener
as a callback parameter.authenticateUsingBiometrics()
- with “title” and “description” parameters, use variant withPowerAuthBiometricPrompt
parameter instead.requestGetSignatureWithAuthentication()
- useauthorizationHeaderForRequestWithParams()
method instead which throws an exception in case of failure.requestSignatureWithAuthentication()
- useauthorizationHeaderForRequestWithBody()
method instead which throws an exception in case of failure.
PowerAuthConfiguration
class:getOfflineSignatureComponentLength()
- usegetOfflineAuthorizationCodeComponentLength()
instead.
PowerAuthConfiguration.Builder
class:offlineSignatureComponentLength()
- useofflineAuthorizationCodeComponentLength()
instead.
PowerAuthKeychainConfiguration
class:isLinkBiometricItemsToCurrentSet()
- usePowerAuthBiometricConfiguration.isInvalidateBiometricFactorAfterChange()
instead.isConfirmBiometricAuthentication()
- use equal method inPowerAuthBiometricConfiguration
instead.isAuthenticateOnBiometricKeySetup()
- use equal method inPowerAuthBiometricConfiguration
instead.isFallbackToSharedBiometryKeyEnabled()
- use equal method inPowerAuthBiometricConfiguration
instead.Builder.linkBiometricItemsToCurrentSet()
- usePowerAuthBiometricConfiguration.Builder.invalidateBiometricFactorAfterChange(boolean)
instead.Builder.confirmBiometricAuthentication()
- use equal method inPowerAuthBiometricConfiguration.Builder
instead.Builder.authenticateOnBiometricKeySetup()
- use equal method inPowerAuthBiometricConfiguration.Builder
instead.Builder.enableFallbackToSharedBiometryKey()
- use equal method inPowerAuthBiometricConfiguration.Builder
instead.
PowerAuthToken
class:generateHeader()
- usegenerateTokenHeader()
as a replacement. Note that you should usePowerAuthTokenStore.generateAuthorizationHeader()
to make sure the PowerAuth SDK synchronize the time with the server properly.
PowerAuthAuthorizationHttpHeader
class:- The value of
powerAuthErrorCode
property, or value returned ingetPowerAuthErrorCode()
is filled only in deprecated SDK functions, such asrequestSignatureWithAuthentication()
. To fix this, migrate toauthorizationHeaderForRequestWithBody()
that throws an exception in case of failure. isValid()
method is also deprecated, because the new methods, such asauthorizationHeaderForRequestWithBody()
, always returns the valid header.
- The value of
- The following classes and interfaces are now deprecated:
IPersistActivationWithBiometricsListener
- useIPersistActivationListener
instead.
- Due to removed support of recovery codes, the following classes and methods are no longer available:
- Methods removed in
PowerAuthSDK
:createRecoveryActivation()
hasActivationRecoveryData()
getActivationRecoveryData()
confirmRecoveryCode()
- Methods removed in
PowerAuthActivation.Builder
:- all variants of
recoveryActivation()
- all variants of
- Methods removed in
ActivationCodeUtil
:parseFromRecoveryCode()
validateRecoveryCode()
validateRecoveryPuk()
- Other removed methods:
CreateActivationResult.getRecoveryData()
ErrorResponseApiException.getCurrentRecoveryPukIndex()
- Removed classes and interfaces:
IGetRecoveryDataListener
IConfirmRecoveryCodeListener
RecoveryData
- Methods removed in
- The following functions now takes or returns
SecureData
instead ofbyte[]
:PowerAuthSDK.persistActivationWithPassword()
PowerAuthSDK.addBiometryFactor()
PowerAuthSDK.setExternalEncryptionKey()
PowerAuthSDK.addExternalEncryptionKey()
PowerAuthConfiguration.getExternalEncryptionKey()
PowerAuthConfiguration.Builder.externalEncryptionKey()
PowerAuthAuthentication.getBiometryFactorRelatedKey()
PowerAuthAuthentication.getOverriddenPossessionKey()
- All static functions in
PowerAuthAuthentication
that takes custom possession or biometry key in parameter. IFetchEncryptionKeyListener.onFetchEncryptionKeySucceed()
CryptoUtils.ecdhComputeSharedSecret()
BiometricKeyData.getDerivedData()
BiometricKeyData.getDataToSave()
- Removed all interfaces deprecated in release
1.9.x
Other changes
- TBA
iOS & tvOS
Notable changes on iOS:
- Added the
PowerAuthCoreData
object toPowerAuthCore
module to enhance in-memory management of sensitive data.
API changes
- The following methods or properties are now deprecated:
PowerAuthSDK
class:unsafeChangePassword(from:to:)
- use asynchronouschangePassword(from:to:callback:)
as a replacement.persistActivation(with:)
- use asynchronouspersistActivation(with:callback:)
as a replacement.persistActivation(withPassword:)
- use asynchronouspersistActivation(withPassword:callback:)
as a replacement.removeBiometryFactor()
- use asynchronousremoveBiometryFactor(callback:)
as a replacement.- Constructor
PowerAuthSDK(configuration:keychainConfiguration:clientConfiguration:)
- use methods withPowerAuthBiometricConfiguration
parameter instead. requestSignature(with:method:uriId:body:)
- useauthorizationHeaderForRequestWithBody(with:method:uriId:body:)
method instead.requestGetSignature(with:uriId:params:)
- useauthorizationHeaderForRequestWithParams(with:method:uriId:params:)
method with"GET"
as method parameter.offlineSignature(with:uriId:body:nonce:)
- use asynchronousofflineAuthorizationCode(with:uriId:body:nonce:callback:)
method that handle the biometric authentication properly.
PowerAuthConfiguration
class:offlineSignatureComponentLength
property is now replaced withofflineAuthorizationCodeComponentLength
- All static methods for accessing a various shared instances are now deprecated:
PowerAuthSDK.initSharedInstance(...)
andPowerAuthSDK.sharedInstance()
- To ensure better control and flexibility, manage the global instances within your application code.PowerAuthClientConfiguration.sharedInstance()
- use a class constructor with no parameters if you want to create the default configuration.PowerAuthKeychainConfiguration.sharedInstance()
- use a class constructor with no parameters if you want to create the default configuration.
- The following properties in
PowerAuthKeychainConfiguration
class are now deprecated:linkBiometricItemsToCurrentSet
- use newPowerAuthBiometricConfiguration.invalidateBiometricFactorAfterChange
instead, with the same meaning.allowBiometricAuthenticationFallbackToDevicePasscode
- use newPowerAuthBiometricConfiguration.allowFallbackToDevicePasscode
instead, with the same meaning.invalidateLocalAuthenticationContextAfterUse
- use newPowerAuthBiometricConfiguration.invalidateLocalAuthenticationContextAfterUse
instead, with the same meaning.- Be aware that if you provide both,
PowerAuthBiometricConfiguration
andPowerAuthKeychainConfiguration
objects to initializePowerAuthSDK
, then the values from the biometric configuration takes precedence.
- Due to removed support of recovery codes, the following classes and methods are no longer available:
- Methods removed in
PowerAuthSDK
:createActivation(withName:recoveryCode:recoveryPuk:extras:callback:)
hasActivationRecoveryData()
activationRecoveryData(authentication:callback:)
confirm(recoveryCode:, authentication:callback:)
- Methods removed in
PowerAuthActivationCodeUtil
:validateRecoveryCode()
validateRecoveryPuk()
parseFromRecoveryCode()
- Other changes:
- removed class
PowerAuthActivationRecoveryData
- removed property
PowerAuthActivationResult.activationRecovery
- removed constructor
PowerAuthActivation(recoveryCode:recoveryPuk:name:)
- removed class
- Methods removed in
- The following functions or properties now takes or returns
PowerAuthCoreData
instead ofData
:PowerAuthSDK.setExternalEncryptionKey()
PowerAuthSDK.addExternalEncryptionKey()
PowerAuthSDK.fetchEncryptionKey()
PowerAuthConfiguration.externalEncryptionKey
- All static functions in
PowerAuthAuthentication
that takes custom possession or biometry key in parameter. PowerAuthAuthentication.overridenPossessionKey
property is nowcustomPossessionKey
PowerAuthAuthentication.overridenBiometryKey
property is nowcustomBiometryKey
PowerAuthCoreCryptoUtils.ecdhComputeSharedSecret()
- The following methods in
PowerAuthSDK
class now returns cancelable object allowing you to cancel the pending biometric authentication:authenticateUsingBiometry(withPrompt:callback:)
authenticateUsingBiometry(withContext:callback:)
- Removed all interfaces deprecated in release
1.9.x
Other changes
- TBA
iOS & tvOS App Extensions
- The
PowerAuth2ForExtensions
library is now deprecated and no longer supported and maintained. You can use full feature PowerAuth mobile SDK as a replacement in your app extension.
Known Bugs
The PowerAuth SDKs for watchOS, do not use time synchronized with the server for token-based authentication. To avoid any compatibility issues with the server, the authentication headers generated in your App Extension or on watchOS still use the older protocol version 3.1. This issue will be fixed in a future SDK update.
You can watch the following related issues:
Last updated on Mar 17, 2025 (17:19)
Edit on Github
Send Feedback