Kurz: Volání chráněného webového rozhraní API v aplikaci Android (Kotlin)
Toto je čtvrtý kurz série kurzů, který vás provede voláním chráněného webového rozhraní API pomocí Microsoft Entra Externí ID.
V tomto kurzu:
- Volání chráněného webového rozhraní API
Požadavky
Kurz: Přihlášení uživatelů v mobilní aplikaci Android (Kotlin)
Registrace rozhraní API, která zveřejňuje alespoň jeden obor (delegovaná oprávnění) a jednu roli aplikace (oprávnění aplikace), jako je ToDoList.Read. Pokud jste to ještě neudělali, postupujte podle pokynů pro volání rozhraní API v ukázkové mobilní aplikaci pro Android, abyste měli funkční chráněné webové rozhraní API ASP.NET Core. Ujistěte se, že jste dokončili následující kroky:
- Registrace aplikace webového rozhraní API
- Konfigurace oborů rozhraní API
- Konfigurace rolí aplikací
- Konfigurace volitelných deklarací identity
- Klonování nebo stažení ukázkového webového rozhraní API
- Konfigurace a spuštění ukázkového webového rozhraní API
Volání rozhraní API
Pokud chcete volat webové rozhraní API z aplikace pro Android pro přístup k externím datům nebo službám, začněte vytvořením doplňkového objektu ve třídě
MainActivity
. Doprovodný objekt by měl obsahovat následující kód: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. }
Doprovodný objekt definuje dvě privátní konstanty:
WEB_API_BASE_URL
, kde vývojáři nastavují adresu URL svého webového rozhraní API ascopes
kde vývojáři připojují odpovídajícíscopes
své webové rozhraní API.Pokud chcete zpracovat proces přístupu k webovému rozhraní API, použijte následující kód:
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 } } }
Kód spustí korutin v hlavním dispečera. Začíná vymazáním textového protokolu. Pak zkontroluje, jestli je základní adresa URL webového rozhraní API prázdná. pokud ano, zobrazí zprávu informační zprávy a vrátí se. Dále provede požadavek GET na webové rozhraní API pomocí poskytnutého přístupového tokenu ve vlákně na pozadí.
Po přijetí odpovědi rozhraní API aktualizuje textový protokol obsahem odpovědi. Pokud během tohoto procesu dojde k nějaké výjimce, zaznamená výjimku a aktualizuje textový protokol odpovídající chybovou zprávou.
V kódu, kde zadáme zpětné volání, použijeme funkci s názvem
performGetApiRequest()
. Funkce by měla mít následující kód: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 } } }
Kód usnadňuje provádění
GET
požadavků na webové rozhraní API. Hlavní metoda jeperformGetApiRequest()
, která přebírá základní adresu URL webového rozhraní API a přístupový token jako parametry. Uvnitř této metody vytvoří úplnou adresu URL připojením/api/todolist
k základní adrese URL. Potom vytvoří požadavek HTTP s příslušnými hlavičkami, včetně autorizační hlavičky s přístupovým tokenem.Nakonec provede požadavek synchronně pomocí metody OkHttp
newCall()
a vrátí odpověď. ObjektApiClient
udržuje instanciOkHttpClient
pro zpracování požadavků HTTP. Pokud chcete použítOkHttpClient
, musíte přidat závislostimplementation 'com.squareup.okhttp3:okhttp:4.9.0'
do souboru Android Gradle.Nezapomeňte zahrnout příkazy importu. Android Studio by měl automaticky obsahovat příkazy pro import.