--- title: "Upgrading from 8.0.1 to 9.0.0" slug: "s3suite94-android-upgrading-from-801-to-900" updated: 2026-10-27T18:41:44Z published: 2026-10-27T18:41:44Z canonical: "docs.onespan.com/s3suite94-android-upgrading-from-801-to-900" --- > ## Documentation Index > Fetch the complete documentation index at: https://docs.onespan.com/llms.txt > Use this file to discover all available pages before exploring further. # Upgrading from 8.0.1 to 9.0.0 > The following are introduced in 9.0.0. The client SDKs are backwards compatible and you can continue to use the 8.0.1 APIs. However, there are new features and updated behavior detailed below that could affect your application and it is best to review to determine if any changes are needed: - Replace the m2repository folder from the extracted 8.0.1 package with the same folder from the 9.0.0 package. - In the app level build.gradle file, replace all 8.0.1.x versions with 9.0.0.x - To use Tutorial App version 8.0.1 with the SDK version 9.0.0, set the version number in AppSDK/android-studio/app_tutorial_plus/app/src/main/res/raw/config.json file to "9.0.0". - Classes extending from com.noknok.android.client.utils.BaseTask must implement the new method void handleException(RuntimeException e, final Params... params); - In class com.noknok.android.client.utils.ActivityProxy the startActivityForResult() method now takes 2 parameters instead of 3. Remove the last (int timeout) parameter. - The constructor for class: com.noknok.android.client.appsdk.adaptive.authenticate.AuthenticationController takes an extra argument suggestRegOpts of type HashMap . Pass null if no options are expected. - In class: com.noknok.android.client.appsdk.adaptive.authenticate.AuthenticationViewModel, the return type of the method getMethods() has changed. **Old return type**: MutableLiveData>, MethodUIFactory.Operation>> **New return type**: MutableLiveData - In class: com.noknok.android.client.appsdk.adaptive.register.RegistrationViewModel the method setMethods() has two new parameters: ResultType resultType and String message. - The class: com.noknok.android.client.utils.ActivityStarter has been removed. Use the class: com.noknok.android.client.utils.ActivityProxy instead. - The class: com.noknok.android.client.appsdk.adaptive.suggest.SuggestRegController has been deprecated. Use the class com.noknok.android.client.appsdk.adaptive.suggest.SuggestRegistrationController instead. - In class: com.noknok.android.client.appsdk.adaptive.suggest.SuggestRegViewModel, the return type of the method getMethods() has changed. **Old return Type:** MutableLiveData>> **New return type:** MutableLiveData - ```kotlin In class: com.noknok.android.client.appsdk.adaptive.suggest.SuggestRegViewModel, the method setMethods() has two new parameters: ResultType resultType and String message. ``` - ```kotlin In class: com.noknok.android.client.appsdk_plus.registration.FidoRegistrationViewModel the return type of the method getFidoMethodsLiveData() has changed. Old return type: MutableLiveData> New return type: MutableLiveData ``` - ```kotlin In class: com.noknok.android.client.appsdk_plus.registration.FidoRegistrationViewModel the method setMethods() has two new parameters: ResultType resultType and String message. ``` - ```kotlin In class: com.noknok.android.client.appsdk_plus.management.ManageRegistrationViewModel the return type of the method getFidoMethodsLiveData() has changed. Old return Type: MutableLiveData New return Type: MutableLiveData ``` - ```kotlin In class com.noknok.android.client.appsdk_plus.management.ManageRegistrationViewModel the method setMethods() has two new parameters: ResultType resultType and String message. ``` - ```kotlin In interface com.noknok.android.client.appsdk_plus.IOperationResultListener, in the method onFailure(), the type of the parameter exception has changed. Old parameter type: AppSDKException New parameter type: RuntimeException ``` - The class AdaptiveAppSDK2 has been removed. Use class AppSDK2 instead. - In the abstract class: com.noknok.android.client.appsdk.adaptive.MethodUIFactory the method getTitle() takes one additional parameter: String name. **Old header:** String getTitle(String id, Operation operation, Context context) **New header:** String getTitle(String id, String name, Operation operation, Context context) - In class: com.noknok.android.client.appsdk.adaptive.authenticate.BaseAdaptiveAuthFragment the method enable() is deprecated. Instead, call AuthenticationController.enable() directly: com.noknok.android.client.appsdk.adaptive.authenticate.BaseAdaptiveAuthFragment.getController().enable() ##### AutoStart.AUTO_ANY The behavior of AutoStart.AUTO_ANY in class AuthenticationController is changed. If your application uses this mode for authentication then update your code to match the following behavior: - The promise returned by enable(AutoStart.AUTO_ANY) is rejected only if there is no possibility to complete authentication. If this promise is rejected, your application should not call enable(AutoStart.AUTO_NONE) because it results in an empty view. - The promise returned by enable(AutoStart.AUTO_ANY) is resolved even if authentication does not succeed and the session is still not available. If this is the case then more authentication methods can be used. Your application should call enable(AutoStart.AUTO_NONE) to get a list of all possible methods: ```kotlin enable(requireActivity(), AUTO_ANY)   .then { autoAnyResult ->       if (autoAnyResult == null) {           //It is not possible to complete authentication with AUTO_ANY.           //Start AUTO_NONE to present the list of choices and continue           // authentication           showAdaptiveAuthFragment(getFragment())           controller.enable(requireActivity(), AUTO_NONE).then{}.error{}       } else {           //Authentication completed with AUTO_ANY       }   .error { failureResult ->       //It is not possible to complete authentication with any mode       //as there is not enough registered methods available to satisfy       //the adaptive ruleset. } ``` - FidoRegistrationController and ManageRegistrationController no longer call onRefresh() after an operation is complete. If you only display the fragment from one of these controllers at a time, call onRefresh() on the respective controller when an operation is complete. If you display the fragment from more than one controller at the same time, you need to ensure that a change in one fragment is reflected in all fragments. Instead of calling onRefresh() after each operation, create an OperationResultObserver object that implements the IOperationResultListener interface. Observe the LiveData field on the OperationResultObserver object to listen for the failure or completion of the operation. Then call the Controller.onOpCompleted() method from the observe() method to keep the fragments updated. Here is an example observe() method: ```kotlin mOperationResultObserver = new OperationResultObserver(); OperationResultListener.addInstance(mOperationResultObserver); mOperationResultObserver.getLiveData().observe(getViewLifecycleOwner(),           operationResult ->           mRegistrationController.onOpCompleted(requireActivity(),                                        mRegistrationViewModel, operationResult) ); ``` - A new function getIcon() is added to the MethodUIFactory protocol. If your application adopts the MethodUIFactory protocol then it must implement getIcon(): ```kotlin public abstract String getIcon(String id, String name, Context context) ```