Android authentication on API < 24

Hi!

I’m developing an android app with a custom Okta sign-in UI.
My app run on android API 22 and up, meaning I need to add compatibility for devices that don’t support Java8.

I’ve added the libraries from here and now my code looks so:

val authenticationClient: AuthenticationClient? = AuthenticationClients.builder().setOrgUrl("https://dev-396102.okta.com").build()
                if (authenticationClient == null) {

                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                        authenticationClient?.authenticate(email, password.toCharArray(), null, handler)
                    } else {
                        CoroutineScope(Dispatchers.Default).launch {
                            val request = authenticationClient?.instantiate(AuthenticationRequest::class.java)
                                    .setUsername(email)
                                    .setPassword(password.toCharArray())
                                    .setRelayState(null)

                            authenticationClient?.authenticate(request, null, handler)
                        }
                    }
                }

This works fine on a device running API 29 but when I run my code on a device with API 22 I get this exception:

FATAL EXCEPTION: main
Process: com.alohaprj.app, PID: 27751
java.lang.NoSuchMethodError: No static method stream([Ljava/lang/Object;)Ljava/util/stream/Stream; in class Ljava/util/Arrays; or its super classes (declaration of 'java.util.Arrays' appears in /system/framework/core-libart.jar)
    at com.okta.sdk.impl.config.DefaultEnvVarNameConverter.buildReverseLookupToMap(DefaultEnvVarNameConverter.java:46)
    at com.okta.sdk.impl.config.DefaultEnvVarNameConverter.<init>(DefaultEnvVarNameConverter.java:34)
    at com.okta.sdk.impl.config.EnvironmentVariablesPropertiesSource$OktaFilteredEnvironmentPropertiesSource.<clinit>(EnvironmentVariablesPropertiesSource.java:44)
    at com.okta.sdk.impl.config.EnvironmentVariablesPropertiesSource.oktaFilteredPropertiesSource(EnvironmentVariablesPropertiesSource.java:39)
    at com.okta.authn.sdk.impl.client.DefaultAuthenticationClientBuilder.<init>(DefaultAuthenticationClientBuilder.java:94)
    at com.okta.authn.sdk.impl.client.DefaultAuthenticationClientBuilder.<init>(DefaultAuthenticationClientBuilder.java:85)
    at com.aloha.vvm.utils.OktaUtils.authClientAuthenticate(OktaUtils.kt:193)
    at com.aloha.vvm.ui.activity.WelcomeActivity.signIn(WelcomeActivity.kt:218)
    at com.aloha.vvm.ui.fragments.EmailAuthFragment.sendEmailAndPasswordRequest(EmailAuthFragment.kt:166)
    at com.aloha.vvm.ui.fragments.EmailAuthFragment$verifyEmail$1.invokeSuspend(EmailAuthFragment.kt:107)
    at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
    at android.os.Handler.handleCallback(Handler.java:739)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:135)
    at android.app.ActivityThread.main(ActivityThread.java:5292)
    at java.lang.reflect.Method.invoke(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:372)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:904)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:699)

In my understanding, the method setOrgUrl() can’t be found. The documentation that is provided with the libraries for lower APIs provides alternative methods to use with my AuthenticationClient but doesn’t provide an alternative for creating the client.

My question is: If setOrgUrl() can’t be used for API < 24, how do I create an AuthenticationClient for said versions?

Thanks in advance :slight_smile: