0Pricing
Kotlin Academy · Lezione

API della piattaforma

Acceda alle funzionalità native

API della piattaforma è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.

Accesso alle funzionalità native

Talvolta il codice condiviso ha bisogno delle funzionalità del dispositivo: archiviazione, impostazioni, orologio e rete. KMM offre diversi modi per accedere in modo pulito alle API native.

expect/actual per i valori primitivi

Per i piccoli valori specifici della piattaforma, si usa expect/actual. Il codice condiviso rimane ordinato, mentre ogni piattaforma fornisce i dettagli necessari.

// commonMain
expect fun currentTimeMillis(): Long

// androidMain
actual fun currentTimeMillis(): Long = System.currentTimeMillis()

Dependency injection del codice della piattaforma

Un approccio più flessibile consiste nel definire un'interfaccia nel codice condiviso e nell'iniettare un'implementazione specifica della piattaforma da ciascuna app.

// commonMain
interface Storage {
    fun save(key: String, value: String)
    fun load(key: String): String?
}

Implementazione Android

Android implementa l'interfaccia con SharedPreferences e la mette a disposizione del codice condiviso.

// androidMain
import android.content.SharedPreferences

class AndroidStorage(private val prefs: SharedPreferences) : Storage {
    override fun save(key: String, value: String) {
        prefs.edit().putString(key, value).apply()
    }
    override fun load(key: String): String? = prefs.getString(key, null)
}

Implementazione iOS

iOS implementa la stessa interfaccia con NSUserDefaults del framework Foundation.

// iosMain
import platform.Foundation.NSUserDefaults

class IosStorage : Storage {
    private val defaults = NSUserDefaults.standardUserDefaults
    override fun save(key: String, value: String) = defaults.setObject(value, key)
    override fun load(key: String): String? = defaults.stringForKey(key)
}

Chiamare le API native di iOS

Da iosMain è possibile chiamare direttamente i framework Apple, perché Kotlin/Native genera i binding di interoperabilità necessari.

import platform.UIKit.UIDevice

fun deviceModel(): String = UIDevice.currentDevice.model

Chiamare le API Android

androidMain ha a disposizione l'intero Android SDK, poiché viene compilato sulla piattaforma Android.

import android.os.Build

fun deviceModel(): String = Build.MODEL

Librerie multipiattaforma già pronte

Spesso non è necessario creare un'interoperabilità personalizzata. Esistono già librerie che integrano le funzionalità più comuni:

  • multiplatform-settings — archiviazione di coppie chiave-valore
  • Ktor — rete
  • SQLDelight — database locale

Fornire le implementazioni

Le implementazioni specifiche della piattaforma vengono iniettate all'avvio dell'app, in genere tramite un framework di DI come Koin, così il codice condiviso riceve quella corretta.

// Android: provide AndroidStorage(prefs)
// iOS: provide IosStorage()
// Shared Repository(storage) uses whichever was injected

Scegliere l'approccio

Linee guida:

  • Valore molto semplice → expect/actual
  • Comportamento con più metodi → interfaccia + injection
  • Esigenza comune → usare una libreria multipiattaforma già esistente

Una demo eseguibile di astrazione

L'idea dell'interfaccia si basa sul semplice Kotlin. Qui un'implementazione in memoria sostituisce un archivio specifico della piattaforma.

interface Storage {
    fun save(key: String, value: String)
    fun load(key: String): String?
}

class MemoryStorage : Storage {
    private val map = mutableMapOf<String, String>()
    override fun save(key: String, value: String) { map[key] = value }
    override fun load(key: String): String? = map[key]
}

fun main() {
    val s: Storage = MemoryStorage()
    s.save("name", "Ada")
    println(s.load("name"))
}

Verifica rapida

Serve una funzionalità di archiviazione con diversi metodi, implementata in modo diverso su ciascuna piattaforma e facile da testare. Qual è l'approccio consigliato?

Riepilogo

È possibile accedere in modo pulito alle funzionalità native:

  • expect/actual per i valori primitivi
  • Interfaccia comune + implementazione della piattaforma iniettata per i comportamenti
  • Interoperabilità diretta in androidMain/iosMain
  • Riutilizzare le librerie multipiattaforma quando possibile

Il corso KMM Basics è completo.

Domande Frequenti

La lezione «API della piattaforma» è gratuita?

Sì — il testo completo di «API della piattaforma» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.

Cosa imparerò in «API della piattaforma»?

Acceda alle funzionalità native Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Kotlin Academy?

Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «API della piattaforma»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?

Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Struttura di un progetto KMM
  2. expect e actual
  3. Condivisione della logica di business
  4. API della piattaforma
← Torna a Kotlin Academy