Esercitazione: Chiamare un'API Web protetta in un'app Android (Kotlin)
Questa è la quarta esercitazione della serie che illustra come chiamare un'API Web protetta usando Microsoft Entra per ID esterno.
In questa esercitazione si apprenderà come:
- Chiamare un'API Web protetta
Prerequisiti
Esercitazione: accesso utenti nell'app per dispositivi mobili Android (Kotlin)
Registrazione API che espone almeno un ambito (autorizzazioni delegate) e un ruolo dell'app (autorizzazione dell'applicazione), ad esempio ToDoList.Read. Se non è già stato fatto, seguire le istruzioni per chiamare un'API in un'app per dispositivi mobili Android di esempio per avere un'API Web ASP.NET Core protetta e funzionale. Assicurarsi di completare i passaggi seguenti:
- Registrare un'applicazione API Web
- Configurare gli ambiti dell'API
- Configurare i ruoli dell'app
- Configurare le attestazioni facoltative
- Clonare o scaricare un'API Web di esempio
- Configurare ed eseguire un'API Web di esempio
Chiamare un'API
Per chiamare un'API Web da un'applicazione Android per accedere a dati o servizi esterni, iniziare creando un oggetto complementare nella classe
MainActivity
. L'oggetto complementare deve includere il codice seguente:companion object { private const val WEB_API_BASE_URL = "" // Developers should set the respective URL of their web API here private const val scopes = "" // Developers should append the respective scopes of their web API. }
L'oggetto complementare definisce due costanti private:
WEB_API_BASE_URL
, dove gli sviluppatori impostano l'URL dell'API Web escopes
, dove gli sviluppatori aggiungono i rispettiviscopes
delle API Web.Per gestire la procedura di accesso a un'API Web, usare il codice seguente:
private fun accessWebApi() { CoroutineScope(Dispatchers.Main).launch { binding.txtLog.text = "" try { if (WEB_API_BASE_URL.isBlank()) { Toast.makeText(this@MainActivity, getString(R.string.message_web_base_url), Toast.LENGTH_LONG).show() return@launch } val apiResponse = withContext(Dispatchers.IO) { ApiClient.performGetApiRequest(WEB_API_BASE_URL, accessToken) } binding.txtLog.text = getString(R.string.log_web_api_response) + apiResponse.toString() } catch (exception: Exception) { Log.d(TAG, "Exception while accessing web API: $exception") binding.txtLog.text = getString(R.string.exception_web_api) + exception } } }
Il codice avvia una coroutine nel dispatcher principale. Inizia cancellando il registro di testo. Verifica quindi se l'URL di base dell'API Web è vuoto; in tal caso, visualizza un messaggio di tipo avviso popup e ritorna. Esegue quindi una richiesta GET all'API Web usando il token di accesso fornito in un thread in background.
Dopo aver ricevuto la risposta dell'API, aggiorna il registro di testo con il contenuto della risposta. Se si verifica un'eccezione durante questo processo, registra l'eccezione e aggiorna il registro di testo con il messaggio di errore corrispondente.
Nel codice, dove si specifica il callback, si usa una funzione denominata
performGetApiRequest()
. La funzione deve avere il codice seguente:object ApiClient { private val client = OkHttpClient() fun performGetApiRequest(WEB_API_BASE_URL: String, accessToken: String?): Response { val fullUrl = "$WEB_API_BASE_URL/api/todolist" val requestBuilder = Request.Builder() .url(fullUrl) .addHeader("Authorization", "Bearer $accessToken") .get() val request = requestBuilder.build() client.newCall(request).execute().use { response -> return response } } }
Il codice facilita l'esecuzione di richieste
GET
a un'API Web. Il metodo principale èperformGetApiRequest()
, che accetta l'URL di base dell'API Web e un token di accesso come parametri. All'interno di questo metodo viene creato un URL completo aggiungendo/api/todolist
all'URL di base. Compila quindi una richiesta HTTP con le intestazioni appropriate, compresa l'intestazione dell'autorizzazione con il token di accesso.Infine, esegue la richiesta in modo sincrono usando il metodo
newCall()
di OkHttp e restituisce la risposta. L'oggettoApiClient
mantiene un'istanza diOkHttpClient
per gestire le richieste HTTP. Per usareOkHttpClient
, è necessario aggiungere la dipendenzaimplementation 'com.squareup.okhttp3:okhttp:4.9.0'
al file Android Gradle.Assicurarsi di includere le istruzioni per l’importazione. Android Studio deve includere automaticamente le istruzioni per l’importazione.
Contenuto correlato
- Consentire agli utenti di accedere e chiamare un'API Web protetta in un'app Android (Kotlin) di esempio
- Consentire agli utenti di accedere a un'app per dispositivi mobili Android (Kotlin) di esempio usando l'autenticazione nativa
- Esercitazione: Preparare l'app per dispositivi mobili Android per l'autenticazione nativa
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per