Vai al contenuto
Lingua: IT

Un framework multipiattaforma può raggiungere ogni funzione NFC?

Solo quanto il suo plugin NFC incapsula. Framework come Flutter e React Native raggiungono le API di piattaforma tramite codice nativo, quindi un plugin espone quello che le API di Android e di iOS offrono, e solo quello che il suo autore ha incapsulato. Le dichiarazioni restano nei progetti nativi, e un'applicazione in una WebView non ha Web NFC.

Un plugin è codice nativo

I framework multipiattaforma raggiungono le API di piattaforma tramite codice nativo. Flutter documenta i canali di piattaforma per chiamare le API di una piattaforma da Kotlin o Java su Android e da Swift o Objective-C su iOS, e React Native documenta i moduli nativi per le API di piattaforma che né lui né una libreria esistente forniscono.

Un plugin NFC per l'uno o per l'altro è codice di quel genere. Su Android chiama le classi di tecnologia e lo smistamento coperti da questa rubrica, e su iOS chiama Core NFC. Può esporre quello che quelle API offrono, e soltanto la parte che il suo autore ha incapsulato.

Le dichiarazioni restano native

Un framework non toglie quello che ciascuna piattaforma esige. Il permesso NFC, i filtri di Intent e, da Android 17, il permesso di smistamento sull'attività che riceve vivono tutti nel manifest Android, come descrive la pagina del manifest.

Su iOS, la capacità di lettura e la sua descrizione d'uso appartengono al progetto iOS che il framework costruisce, esattamente come farebbero per un'applicazione scritta in Swift.

Dove le due piattaforme differiscono

Un'API sola su due piattaforme deve decidere che cosa fare di quello che solo una delle due offre. Android sa avviare un'applicazione da un tag tramite il suo manifest, scegliere fra modo lettore e smistamento in primo piano, ed emulare una scheda tramite Host Card Emulation; iOS legge dentro una sessione che il sistema mostra.

Un plugin o espone la sola parte comune, o aggiunge chiamate proprie a una piattaforma su cui il codice condiviso deve ramificarsi. La prima nasconde le funzioni di Android, la seconda riporta i due percorsi di codice che il framework doveva togliere.

Le applicazioni disegnate in una WebView

I framework che disegnano l'applicazione in una vista web sono un caso a parte. La scheda di stato della piattaforma Chrome elenca Web NFC nel solo Chrome su Android, senza sostegno nella WebView di Android, quindi una pagina che funziona in Chrome non ottiene niente dentro un'applicazione del genere.

Anche quelle applicazioni raggiungono l'NFC tramite un plugin nativo, il che le lascia con gli stessi limiti dei framework qui sopra.

Che cosa verificare prima di scegliere

Elenca le chiamate che al progetto servono su ciascuna piattaforma, poi verifica ognuna rispetto al plugin prima della prima riga di codice: leggere e scrivere NDEF, bloccare, comandi grezzi per tecnologia, avviare l'applicazione da un tag, ed emulazione di scheda dove conta.

Poi prova su telefoni veri di tutt'e due le piattaforme. Il campo si comporta allo stesso modo qualunque linguaggio lo abbia chiamato, e i guasti che contano, un tag che se ne va a metà scrittura o un chip che rifiuta un comando, compaiono solo lì.

Domande frequenti

Un framework toglie il bisogno dell'abilitazione iOS?

No. L'abilitazione appartiene al progetto iOS che il framework costruisce, come farebbe per un'applicazione scritta in Swift, e Core NFC la esige prima di aprire una sessione.

Un'applicazione ibrida può usare Web NFC nella sua WebView?

No. La scheda di stato della piattaforma Chrome non elenca alcun sostegno per Web NFC nella WebView, quindi un'applicazione ibrida raggiunge l'NFC tramite un plugin nativo.

Un plugin espone Host Card Emulation?

Solo se il suo autore l'ha incapsulata, e solo su Android, dove la piattaforma la offre alle applicazioni. L'emulazione di scheda su iPhone dipende dalle condizioni di Apple più che dal plugin.

Che cosa verificare per primo in un plugin?

Se ogni chiamata che al progetto serve esiste su ciascuna piattaforma: lettura, scrittura e blocco NDEF, comandi grezzi, avvio dell'applicazione da un tag, ed emulazione di scheda se conta. Una chiamata che manca costa meno a trovarla prima di scrivere codice.