Programmare applicazioni mobili con flutter

Pubblicità
Ribadisco che l'app la voglio compilare solo per android e ios, le altre piattaforme non mi interessano.

Altre piattaforme mobile? Temo non ce ne siano. Se considerare lo 0.0000x% di Windows Phone è di qualche utilità...

Subito dopo aver risolto il problema della variabile impostazioni, voglio creare tutto quello che riguarda le notifiche. Quindi si tratta di mostrare notifiche sul dispositivo se sul server (dove risiederanno php e mysql) viene disposto di farlo. Vorrei evitare di usare servizi esterni tipo firebase, ma controllando periodicamente se dal server arriva qualcosa di nuovo, mostrare la notifica, anche ad applicazione chiusa. Un po' come whatsapp.

E' tutt'altra roba quindi. Comunque ho dubbi sul fatto che Whatsapp non usi le notifiche push del sistema operativo. Android ( e iOS credo ) settano le app in background in stati energetici molto bassi, praticamente quasi disattivate. Ed è per questo che si usano le notifiche del sistema, il quale riattiva l'app interessata appena arriva una notifica push.

Chiaro che se l'app è stata proprio chiusa dall'utente, sei fregato. Solo Firebase puoi gestire le notifiche in un caso del genere.

Per come la vedo io, senza Firebase puoi usare i websocket e mantenere una connessione costantemente attiva verso un server. Questo perchè non è possibile per il server contattarti direttamente, a causa dei blocchi dovuti al NAT. L'unico modo per fare il NAT traversal, è che sia l'app a connettersi al server e non viceversa. E lasciando il websocket aperto, il server potrà inviare all'app notifiche asincrone.

Potrebbe interessarti pure questo https://flutter.dev/docs/development/platform-integration/platform-channels
visto che una possibile soluzione, è realizzare un servizio Android ( e uno iOS ) per gestire il websocket o altro metodo di comunicazione asincrona.
 
Vedi questa immagine:
Screenshot_1594395089.png
Se premo "clear all" chiudo definitivamente l'app. La stessa cosa faccio anche a WhatsApp, ma comunque arrivano le notifiche. Quindi anche WhatsApp (con tutto facebook e il suo impero) usa firebase, anche se è capace di crearsi un "firebase" tutto suo?
Se necessario, posso usare firebase anche io, ma funzionerà solo per android o anche per ios?

Grazie
 
Ultima modifica:
Non lo sa se Whatsapp usa Firebase. L'alternativa è avere un servizio Android in background, sempre attivo e con un socket aperto.
 
Beh era per capire come fa whatsapp a tenere un servizio in background senza consumare batteria, perché infatti non la consuma.

Ho pensato di procedere così:
  1. iniziamo con la creazione del servizio in background dell'app, che viene avviato all'accensione del dispositivo e legge le variabili che ho salvato, e quindi non so se sarà più necessario lo splash screen
  2. attiviamo il servizio notifiche non da internet, magari premendo un pulsante nell'app, arriva una notifica di prova che punta ad una route specifica al momento che viene premuta
Cosa mi consigli?

Grazie
 
Ho letto la pagina che mi hai postato. Se ho capito bene:
  1. devo scrivere codice non ancora supportato da flutter, quindi java/kotlin e swift/ogg-c in modo da usare api di android e ios per la realizzazione di servizi
  2. il codice comunque va incorporato nel progetto dell'app, ma in una cartella a parte, nel caso in futuro posso sostituirlo con codice dart se flutter implementerà questa funzionalità (secondo te lo farà?)
  3. la realizzazione del servizio serve per tenere attiva una connessione verso firebase (o altro) per controllare se per l'app ci sono nuovi contenuti (non notifiche)
  4. se per l'app ci sono nuovi contenuti, una funzione dedicata li analizzerà e creerà la notifica in base a dei criteri che sceglierò
  5. la creazione di notifiche è indipendente dalla realizzazione di servizi, in quanto posso creare notifiche anche per app che non usano internet
Ho capito bene?

Ma c'è anche una cosa che non ho capito: c'è questa frase scritta:
Note: This guide addresses using the platform channel mechanism if you need to use the platform’s APIs or libraries in Java, Kotlin, Objective-C, or Swift. But you can also write platform-specific Dart code in your Flutter app by inspecting the defaultTargetPlatform property. Platform adaptations lists some platform-specific adaptations that Flutter automatically does for you in the framework.
Vuol dire che posso fare tutto in dart?

Grazie
 
  1. devo scrivere codice non ancora supportato da flutter, quindi java/kotlin e swift/ogg-c in modo da usare api di android e ios per la realizzazione di servizi

In teoria. Nella pratica non è che non ci sia state gente che ha avuto lo stesso problema e creato una soluzione https://pub.dev/packages/background_fetch

Se cerchi "background" e "service", vedrai che ci sono parecchie librerie per creare ed interagire con i servizi in background.

  1. il codice comunque va incorporato nel progetto dell'app, ma in una cartella a parte, nel caso in futuro posso sostituirlo con codice dart se flutter implementerà questa funzionalità (secondo te lo farà?)

Chiaramente il servizio fa parte dell'app.

  1. la realizzazione del servizio serve per tenere attiva una connessione verso firebase (o altro) per controllare se per l'app ci sono nuovi contenuti (non notifiche)

No. Firebase non ha bisogno di nessun servizio. Le notifiche push della piattaforma, vengono gestite dal sistema operativo. L'app deve solo registrarsi per essere avvisata quando arriva una notifica che la riguarda.

  1. se per l'app ci sono nuovi contenuti, una funzione dedicata li analizzerà e creerà la notifica in base a dei criteri che sceglierò

Non ho capito chi è che crea queste notifiche.

  1. la creazione di notifiche è indipendente dalla realizzazione di servizi, in quanto posso creare notifiche anche per app che non usano internet

Se parli di notifiche push, quelle riguardano la rete. Quindi senza internet, non vedo come possano arrivare.


Vuol dire che posso fare tutto in dart?

Dart è solo il linguaggio. Ovviamente si può fare tutto. La FFI esiste per questo, ovvero chiamare le API del sistema operativo scritte in C.

Faccio notare che Android ha due set di API. Il primo è quello Java. Il secondo è quello C, che va sotto l'ombrello del NDK. Quest'ultimo set di API, è stato creato per soddisfare, inizialmente, le necessità dei giochi. Un gioco in Java è lento e lagga. Flutter usa il NDK ed implementa praticamente tutto il resto da zero. Cioè Flutter non usa i widget di Android, ma ha un suo set di widget. Non sfrutta le funzionalità offerte dall'ambiente Java, ma quelle offerte dall'ambiente Linux/C sottostante.
 
Riguardo le notifiche non ho ancora ben capito il concetto.

Ci sono app che non usano internet, e che comunque inviano notifiche, tipo promemoria. Quindi le notifiche push sono altri tipi? E cosa cambia?

Grazie
 
Le notifiche push sono quelle che vengono inviate al telefono da un dispositivo esterno. Push nel senso di spingere. Cioè gli arrivano senza che le abbia richieste.
 
Perfetto, ora ho capito.

Nel frattempo ho trovato questo pacchetto su pub.dev: flutter_local_notifications
che dipende anche dal pacchetto platform, sempre presente su pub.dev

Premesso che per ora voglio iniziare con le notifiche offline, quindi non push, cosa mi consigli di fare?

Grazie
 
Beh mi pare che il pacchetto indicato sia tra i più utilizzati e completi.

Poi sia chiaro, quando parlo di notifica push, non mi riferisco al rettangolino informativo che esce sullo schermo e visualizza l'informazione. Ma mi riferisco all'infrastruttura che serve per far arrivare un'informazione esterna all'applicazione.

Il problema sta lì.
 
L'esempio mostrato nel pacchetto flutter_local_notifications non dà errori all'analizzatore, ma li dà alla console appena parte, mostrandomi schermata bianca sul cell e rimane così.
Dato che non so fare niente riguardo le notifiche, e il codice pubblicato non va, hai tu un codice migliore (anche dai tuoi progetti) che mi faccia funzionare la notifica locale (non push)?

Grazie
 
Sì infatti funziona anche a me. Ora mi diletterò su come fare qualcosa.

Nel frattempo sto impazzendo sugli oggetti Map(), dove anche il codice prelevato da questa specifica sezione, sull'analizzatore mi dà errore:
Schermata da 2020-07-12 23-20-52.webp
Voglio precisare che mi dà questo problema solo se mi trovo al di fuori di ogni oggetto o costruttore. Ma a me serve creare un oggetto map voce per voce, perché alcune voci contengono valori di voci dichiarate prima.

Come posso fare?

Grazie
 
Quel pezzo di codice da solo non dice niente. Mi pare d'intravedere, però, che hai messo quelle istruzioni fuori da qualsiasi blocco di codice ( le {} ). E questo è un grossolano errore di sintassi.
 
Pubblicità
Pubblicità
Indietro
Top