Add the following code to your app to initialize API plugin with OIDC auth provider: This implementation uses `CompletableFuture`, which requires `minSdkVersion >= 24`. ```java ApiAuthProviders authProviders = ApiAuthProviders.builder() .oidcAuthProvider(() -> { CompletableFuture future = new CompletableFuture<>(); Amplify.Auth.fetchAuthSession( session -> future.complete(((AWSCognitoAuthSession) session) .getUserPoolTokens() .getValue() .getIdToken()), future::completeExceptionally ); try { return future.get(); } catch (Exception e) { e.printStackTrace(); } return null; }) .build(); AWSApiPlugin plugin = AWSApiPlugin.builder() .apiAuthProviders(authProviders) .build(); Amplify.addPlugin(plugin); ``` This implementation uses `CompletableFuture`, which requires `minSdkVersion >= 24`. ```kotlin val authProviders = ApiAuthProviders.builder() .oidcAuthProvider { val future = CompletableFuture() Amplify.Auth.fetchAuthSession( { future.complete((it as AWSCognitoAuthSession).userPoolTokens.value?.idToken) }, { future.completeExceptionally(it) } ) future.get() } .build() val plugin = AWSApiPlugin.builder() .apiAuthProviders(authProviders) .build() Amplify.addPlugin(plugin) ``` This implementation uses `CompletableFuture`, which requires `minSdkVersion >= 24`. ```kotlin val authProviders = ApiAuthProviders.builder() .oidcAuthProvider { val session = runBlocking { Amplify.Auth.fetchAuthSession() } return (session as AWSCognitoAuthSession).userPoolTokens.value?.idToken } .build() val plugin = AWSApiPlugin.builder() .apiAuthProviders(authProviders) .build() Amplify.addPlugin(plugin) ``` Using the `rxbindings` module can simplify this further. ```groovy dependencies { // other dependencies... implementation 'com.amplifyframework:rxbindings:ANDROID_VERSION' } ``` ```java ApiAuthProviders authProviders = ApiAuthProviders.builder() .oidcAuthProvider(() -> RxAmplify.Auth.fetchAuthSession() .map(session -> ((AWSCognitoAuthSession) session) .getUserPoolTokens() .getValue() .getIdToken()) .blockingGet()) .build(); AWSApiPlugin plugin = AWSApiPlugin.builder() .apiAuthProviders(authProviders) .build(); Amplify.addPlugin(plugin); ``` Using the `rxbindings` module can simplify this further. ```groovy dependencies { // other dependencies... implementation 'com.amplifyframework:rxbindings:ANDROID_VERSION' } ``` ```kotlin val authProviders = ApiAuthProviders.builder() .oidcAuthProvider { RxAmplify.Auth.fetchAuthSession() .map { (it as AWSCognitoAuthSession) .userPoolTokens .value ?.idToken } .blockingGet() } .build() val plugin = AWSApiPlugin.builder() .apiAuthProviders(authProviders) .build() Amplify.addPlugin(plugin) ```