Introduzione

Upo food è un applicazione Android nativa di food delivery completa con 3 diverse tipologie di account: Cliente, Rider e Gestore.

L’applicazione è stata creata come progetto per il corso di “Applicazioni Mobili” all’ Università del Piemonte Orientale.


Fasi del progetto

Analisi e pianificazione

Essendo un progetto universitario riporto qua sotto un estratto della consegna richiesta dal docente:

Il progetto prevede lo sviluppo di un’applicazione Android per un mini market che offre servizio di consegna a domicilio. L’applicazione supporta tre tipi di utenti: cliente, rider e gestore. In particolare per ognugno di essi l’applicazione deve offrire le seguenti funzionalità:

  • Cliente:
    • Registrazione e login per il cliente.
    • Possibilità di inserire l’indirizzo manualmente o utilizzando il GPS.
    • Visualizzazione di prodotti con foto, titolo e prezzo.
    • Aggiunta di prodotti al carrello con quantità specifica.
    • Pagamento in contanti o con carta di credito al rider.
    • Notifiche sull’avanzamento della consegna.
    • Opzioni opzionali come visualizzare la posizione del rider sulla mappa e valutare il servizio.
  • Rider:
    • Registrazione e login per il rider.
    • Impostazione dello stato (disponibile o non disponibile).
    • Notifiche per le consegne con dettagli sulla posizione.
    • Accettazione o rifiuto dell’incarico di consegna.
    • Chat con il cliente durante il tragitto e con il gestore.
    • Segnalazione di pagamento avvenuto e fine della consegna.
    • Storico delle consegne con esito.
  • Gestore:
    • Registrazione e login per il gestore.
    • Caricamento di prodotti con foto, titolo, descrizione, prezzo e quantità.
    • Modifica di prodotti già disponibili.
    • Ricezione di notifiche sugli ordini e selezione di un rider.
    • Contatto con il rider tramite chat.
    • Storico delle consegne con esito.
    • Opzioni opzionali come visualizzare la posizione dei rider sulla mappa.

In aggiunta alle funzionalità sopra elencate abbiamo aggiunto anche funzionalità facoltative come la possibilità di caricare periodicamente la posizione del rider sul server, valutazioni reciproche tra rider e cliente, e la gestione di ordini già evasi.

L’app mira a migliorare l’efficienza del servizio di consegna, fornendo un’esperienza utente completa per tutte e tre le tipologie di utenti coinvolti.

Sviluppo

Per creare l’applicazione abbiamo usato Kotlin in combinazione con XML per la grafica. Per il lato back-end ci siamo affidati a Firebase, ma più nello specifico abbiamo usato le seguenti tecnologie/librerie:

Nome Descrizione
Firebase Auth Libreria firebase usata per autenticare gli utenti nella nostra app.
Firebase Firestore Libreria firebase usata per gestire l'intero database dell'app.
Firebase Database Libreria firebase usata per gestire e memorizzare le chat.
Firebase Storage Libreria firebase usata per memorizzare le foto di profilo degli utente, le immagini dei prodotti e tutte le immagini dei market
Firebase Messagging Libreria firebase usata per inviare notifiche sottoforma di messaggi tramite token.
Chatkit Libreria che aggiunge la grafica essenziale per la gestione della chat.
Lottie Libreria per mostrare SVG animati.
Picasso/glide Libreria per caricamento immagini dentro imageview.
FirePush Libreria per inviare tramite http messaggi FCM.
Java Sun Email Libreria per inviare dinamicamente un email a un utente.
EasyPermission Libreria usata per gestire i permessi di posizione nella splash activity

Oltre alle librerie indicate in tabella ne abbiamo aggiunte altre per avere a disposizione un maggior numero di elementi grafici da usare insieme a quelli di Material Design.

Debugging

Durante le prime fasi dello sviluppo dell’app, abbiamo riscontrato un problema con una libreria di terze parti di Android per la costruzione grafica degli step durante la registrazione di un account. Il problema consisteva nel fatto che vi era una limitazione nella creazione del numero di step e inoltre presentava alcuni bug grafici. Dopo alcune settimane siamo riusciti a metterci in contatto con colui che forniva la libreria esterna e dopo svariati messaggi e scambi di codice siamo riusciti insieme a sistemare i bug e a rilasciare una versione funzionante e migliorata della medesima libreria che poi è stata naturalmente utilizzata nel progetto per la registrazione degli account.


Presentazione del progetto

Elenco qua sotto le varie aree dell’app con eventuali screenshot.

Schermate log-in/sign-up

Una volta aperta l’app e concesse le opportune autorizzazioni, è possibile loggare o creare un qualsiasi tipo di account.

NOTA: gli account da gestore e da rider devono essere autorizzati da un account amministratore tramite un codice.

Account Cliente

Una volta loggato da cliente comparirà la dashboard del cliente dove sarà possibile:

  • Cambiare la proprio posizione tramite indirizzo/GPS
  • Visualizzare tutti i market nel range di 10 KM sia in una lista che sulla mappa.

Tutto inizia quando un cliente sceglie un market e decide di ordinare qualche prodotto: una volta cliccato su un market verranno mostrate tutte le informazioni di quel negozio e soprattutto verrà mostrato il catalogo con tutti i prodotti che il medesimo offre.

Una volta scelti i prodotti con le relative quantità, essi finiranno nel carrello.

Una volta completato un ordine tutto passa nelle mani del gestore e del rider scelto da quest’ultimo. Il cliente non dovrà fare più nulla fino all’arrivo del rider che gli porterà il suo ordine.

Account Rider

Una volta loggati da rider, si avrà davanti la dashboard del rider dove sarà possibile:

  • Settare il proprio stato da rider (DISPONIBILE o NON DISPONBIILE). Attenzione al fatto che se un rider accetta un ordine e ritira i prodotti dal negozio, il suo stato diventerà “IN CONSEGNA” e non potrà essere cambiato finche l’ordine non verrà completato o annullato.
  • Vedere le richieste attive. Per richieste attive si intendono gli ordini dove il gestore ha scelto tale rider per effettuare la consegna. Per ogni ordine elencato nella medesima schermata, il rider dovrà accettare o rifiutare un ordine.
  • Vedere le statistiche inerenti alle consegne effettuate.
  • Vedere la sua posizione attuale. Se un rider ha ordini attivi, abbiamo inserito un servizio di Android che, se l’app è aperta, carica la posizione aggiornata ogni tot secondi nel database. In questo modo gli altri utente possono vedere in tempo reale dove si trova. Tutto quello che deve fare un utente loggato come rider, è accettare pian piano i vari ordini e mandarli avanti tramite la relativa schermata di dettaglio ordini e ovviamente consegnarli.

Account Gestore

Una volta loggati da gestore, si potrà visionare la dashboard del gestore dove sarà possibile:

  • Visualizzare il nome del negozio controllato e il suo stato (aperto o chiuso). Attenzione al fatto che se un market viene chiuso con ordini attivi, tali ordini verranno automaticamente annullati.
  • Visualizzare gli ordini da accettare, ovvero gli ordini effettuati dai clienti al negozio in questione. Per ognuno di questi ordini (lo stato sarà impostato a ‘Scelta Rider’) il gestore dovrà selezionare un rider che porterà avanti l’ordine.
  • Visualizzare le statistiche del negozio. Cliccando sulla card con le informazioni del negozio permetterà l’accesso alla pagina dello stesso dove sarà possibile aggiungere/modificare prodotti e informazioni riguardanti il negozio. Attenzione, un market non può esser messo in stato di apertura se tutte le informazioni presenti in ‘Modifica Negozio’ non sono state compilate. Questo blocco è stato inserito per evitare che un cliente possa effettuare un ordine quando mancano informazioni importanti. Nella schermata ordini di ogni utente loggato come gestore, c’è la possibilità di vedere per ogni stato, l’elenco degli ordini corrispondenti.

Account Admin

In aggiunta agli account da cliente, rider e gestore abbiamo creato un account di tipo “amministratore” per eseguire piccole funzioni sul database (specificato meglio nella tabella della demo).


Demo

L’applicazione è disponibile gratuitamente a scopo di testing nel Play Store.

Per testare il funzionamento dell’app, abbiamo già preparato almeno 1 account per ogni tipo di utente, qua di seguito sono riportati i dati:

Tipo Email Descrizione
Admin upofooddelivery@gmail.com Account da admin per aggiungere negozi e autorizzare nuovi rider.
Gestore 20026303@studenti.uniupo.it Account da gestore che controlla il market con id 'mcdonald'.
Cliente farrauto.loris@gmail.com Un semplice client dell'app.
Rider lizzosgabriele@live.it Un semplice rider dell'app.
Gestore 20025867@studenti.uniupo.it Account da gestore che controlla il market con id 'Dolcevita'
Cliente lizzosgabriele@gmail.com Un semplice client dell'app.
Rider lorisfarry@rocketmail.com Un semplice rider dell'app.

NOTA: la password di tutti gli account è: Ciao98!

NOTA: il tema scuro nella nostra app non è supportato! Si consiglia di disattivarlo prima di utilizzare l’app.

NOTA: i market creati con gli account da gestore sopra riportati hanno tutti come sede la città di Vercelli.

Tecnologie utilizzate

Kotlin

Java

HTML

Firebase

Gradle

Photoshop

Illustrator

After Effects


Autori del progetto

Nome Ruolo Links
Gabriele Lizzos Scrittura lato back-end, gestione firebase, struttura progetto, creazione contenuti e testing. Github Linkedin
Loris Farrauto Scrittura lato front-end, creazione grafica, creazione contenuti e testing. Github Linkedin Email