Udostępnij za pośrednictwem


Samouczek: wywoływanie chronionego internetowego interfejsu API w aplikacji Android (Kotlin)

Jest to czwarty samouczek z serii samouczków, który przeprowadzi Cię przez proces wywoływania chronionego internetowego interfejsu API przy użyciu Tożsamość zewnętrzna Microsoft Entra.

W tym samouczku wykonasz następujące elementy:

  • Wywoływanie chronionego internetowego interfejsu API

Wymagania wstępne

  • Samouczek: logowanie użytkowników w aplikacji mobilnej Dla systemu Android (Kotlin)

  • Rejestracja interfejsu API, która uwidacznia co najmniej jeden zakres (uprawnienia delegowane) i jedną rolę aplikacji (uprawnienie aplikacji), taką jak ToDoList.Read. Jeśli jeszcze tego nie zrobiono, postępuj zgodnie z instrukcjami wywoływania interfejsu API w przykładowej aplikacji mobilnej systemu Android, aby mieć funkcjonalny chroniony ASP.NET Core internetowego interfejsu API. Upewnij się, że wykonasz następujące kroki:

    • Rejestrowanie aplikacji internetowego interfejsu API
    • Konfigurowanie zakresów interfejsu API
    • Konfigurowanie ról aplikacji
    • Konfigurowanie opcjonalnych oświadczeń
    • Klonowanie lub pobieranie przykładowego internetowego interfejsu API
    • Konfigurowanie i uruchamianie przykładowego internetowego interfejsu API

Wywoływanie interfejsu API

  1. Aby wywołać internetowy interfejs API z aplikacji systemu Android w celu uzyskania dostępu do danych zewnętrznych lub usług, zacznij od utworzenia obiektu towarzyszącego w MainActivity klasie. Obiekt towarzyszący powinien zawierać następujący kod:

    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.
    }
    

    Obiekt towarzyszący definiuje dwie stałe prywatne: WEB_API_BASE_URL, gdzie deweloperzy ustawiają adres URL internetowego interfejsu API i scopes, gdzie deweloperzy dołączają odpowiedni scopes internetowy interfejs API.

  2. Aby obsłużyć proces uzyskiwania dostępu do internetowego interfejsu API, użyj następującego kodu:

    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
            }
        }
    }
    

    Kod uruchamia coroutine w głównym dyspozytorze. Zaczyna się od wyczyszczenia dziennika tekstowego. Następnie sprawdza, czy podstawowy adres URL internetowego interfejsu API jest pusty; Jeśli tak, wyświetla wyskakujące komunikat i zwraca. Następnie wykonuje żądanie GET do internetowego interfejsu API przy użyciu podanego tokenu dostępu w wątku w tle.

    Po otrzymaniu odpowiedzi interfejsu API zaktualizuje dziennik tekstowy przy użyciu zawartości odpowiedzi. Jeśli w trakcie tego procesu wystąpi jakikolwiek wyjątek, rejestruje wyjątek i aktualizuje dziennik tekstowy przy użyciu odpowiedniego komunikatu o błędzie.

    W kodzie, w którym określamy wywołanie zwrotne, używamy funkcji o nazwie performGetApiRequest(). Funkcja powinna mieć następujący kod:

    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 }
        }
    }
    

    Kod ułatwia wykonywanie GET żądań do internetowego interfejsu API. Główną metodą jest performGetApiRequest(), która przyjmuje podstawowy adres URL internetowego interfejsu API i token dostępu jako parametry. Wewnątrz tej metody tworzy pełny adres URL, dołączając /api/todolist go do podstawowego adresu URL. Następnie tworzy żądanie HTTP z odpowiednimi nagłówkami, w tym nagłówkiem autoryzacji z tokenem dostępu.

    Na koniec wykonuje żądanie synchronicznie przy użyciu metody OkHttp newCall() i zwraca odpowiedź. Obiekt ApiClient obsługuje wystąpienie OkHttpClient do obsługi żądań HTTP. Aby użyć OkHttpClientpolecenia , należy dodać zależność implementation 'com.squareup.okhttp3:okhttp:4.9.0' do pliku android Gradle.

    Upewnij się, że dołączysz instrukcje importowania. Program Android Studio powinien automatycznie dołączać instrukcje importowania.