Autore Topic: Consiglio aggiornamento dati App-server  (Letto 260 volte)

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Consiglio aggiornamento dati App-server
« il: 21 Settembre 2016, 14:40:16 CEST »
0
Buongiorno,
volevo chiedervi un consiglio per come gestire la sincronizzazione dei dati presenti su un App.

Ho un server remoto che normalmente riceve i dati dall'app ma eventualmente può pure inviarne con chiamate REST da parte dell'App; finora ho gestito l'invio/ricezione con chiamate dall'App:

- All'avvio.
- Quando l'App ha dei dati da inviare al server.
- Dopo ogni resume se è passato un tot di tempo prefissato dall'ultimo scambio dati.

Per quanto riguarda i dati da inviare al server riesco ad essere abbastanza puntuale ma nella ricezione potrei non essere così aggiornato. Se il server ha dei dati da inviare finché l'App non esegue una chiamata quest'ultima non avrà i dati aggiornati.

Sono quindi a chiedervi quali sono le best-practice al riguardo?

Consigliate di utilizzare una push notification (GCM o Firebase) ed al broadcast receiver far partire la chiamata REST per aggiornare i dati?
Consigliate magari di utilizzare gli account di sincronizzazione per farlo girare magari ad App chiusa?

Ci sono magari altre tecniche che ora mi sfuggono per mantenere aggiornati i dati da entrambe i lati, sia lato App che server?


Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Consiglio aggiornamento dati App-server
« Risposta #1 il: 22 Settembre 2016, 09:30:17 CEST »
0
Secondo me è relativo per un motivo:

Metti caso che i dati presenti sul server sono semplici barzellette. IO utente A non ho alcun rapporto con l'utente B. Quindi se scaricando i dati posso leggere 30 barzellette, magari l'utente B è più aggiornato e quindi può leggere 31 barzellette. POi ovviamente al prossimo refresh anche A potrà leggere 31 barzellette.

Nel caso in cui devi avere aggiornati dei dati che sono in comune a tutti gli utente, come per esempio dati che rappresentano la posizione degli utenti, allora le notifiche sono perfette.

In ogni caso le notifiche che solitamente usano XMPP o MQTT sono più efficienti di inutili chiamate ad un Server per poi non dover scaricare i dati

Offline iClaude

  • Utente normale
  • ***
  • Post: 177
  • Respect: +11
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S5
  • Sistema operativo:
    Windows 10
Re:Consiglio aggiornamento dati App-server
« Risposta #2 il: 22 Settembre 2016, 09:46:29 CEST »
0
Non esiste una best practice: dipende dalle esigenze specifiche dell'app.
Tutti i metodi che hai citato possono essere validi, compresa la richiesta di aggiornamento fatta direttamente dall'utente (es. pull di una lista per aggiornarla come fa Gmail), l'aggiornamento con tempo variabile a seconda che ci siano o meno modiche, oppure un sistema come Firebase che mantiene i dati del database sempre aggiornati.

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Consiglio aggiornamento dati App-server
« Risposta #3 il: 22 Settembre 2016, 11:55:50 CEST »
0
Scarterei la richiesta fatta direttamente dall'utente perché non ha può sapere quando il server avrà dei nuovi dati da inviargli ...

Un sistema come Firebase immagino che preveda la migrazione dei dati dall'attuale server ad un server Firebase; visto che tali dati servirebbero anche per statistiche lato server stesso ho dei dubbi che sia una buona idea perché poi servirebbe un PC remoto che possa accedere al database Firebase.

@tonno16
Se si trattasse di dati come barzellette il fatto che un utente se ne perda una è trascurabile. I dati non sono condivisi tra gli utenti quindi; si tratta avvertimenti di promozioni. Se l'aggiornamento avviene a promozione finita l'utente non potrà goderne ... :(

Disabilitando le notifiche dell'App al broadcast receiver arriva comunque la notifica e questo non riuscirà a visualizzarla? Oppure manco viene passata da Android la notifica al broadcast receviver?

Non ho mai utilizzato XMPP o MQTT e con un server privato immagino che dovrei installare anche una parte server locale ... sarebbe abbastanza complesso ... :(
« Ultima modifica: 22 Settembre 2016, 12:04:25 CEST da wlf »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Consiglio aggiornamento dati App-server
« Risposta #4 il: 22 Settembre 2016, 12:07:07 CEST »
0
Esistono molti baas saas che fanno tutto in maniera impeccabile. Però ovviamente non hai il tuo server dove gestisci i dati. Alla fine usi il tuo server e ti connetti come da client sul servizio Firebase per esempio.
Potresti anche fare una via di mezzo:

Utente apre l'app e aggiorna i dati.
Ogni onResume() che fai aggiorna i dati
Se stai visualizzando la stessa schermata da 20 minuti puoi far si che il server invii una semplice notifca senza contenuto in modo tale che l' utente sa di dover aggiornare di nuovo

Offline capitancooker

  • Utente junior
  • **
  • Post: 56
  • Marco
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5, Asus Zenpad S 8.0
  • Sistema operativo:
    Mac OSX El Capitan
Re:Consiglio aggiornamento dati App-server
« Risposta #5 il: 22 Settembre 2016, 12:24:08 CEST »
0
Consigliate di utilizzare una push notification (GCM o Firebase) ed al broadcast receiver far partire la chiamata REST per aggiornare i dati?

Io voto per questa soluzione.
Ciao,
Marco
Se sbaglio, correggetemi.

Offline wlf

  • Utente normale
  • ***
  • Post: 315
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Xperia
Re:Consiglio aggiornamento dati App-server
« Risposta #6 il: 23 Settembre 2016, 10:21:51 CEST »
0
@tonno16
Se il server avesse dei dati "statici" da scambiare potrei pensare ad servizio baas ma il back-end deve anche eseguire elaborazioni, viene comandato da utenti,  deve a sua volta contattare altri server prima di rispondere ... etc.

Esiste qualche baas magari che consenta la sincronizzazione con un server dati aziendale? Ad esempio che tenga sincronizzata l'anagrafica articoli aziendale ed il listino in modo che ogni aggiornamento venga replicato sul baas (inserimenti, modifiche, cancellazioni) ed a sua volta questo aggiorni i dispositivi mobile quasi in tempo reale?

Il modello che hai proposto è come l'ho implementato attualmente:
- Alla partenza dell'App aggiorno i dati.
- Ad ogni onResume se è passato un tot di tempo dall'ultimo aggiornamento; questo perché altrimenti basta che un utente metta in onPause e onResume in continuazione e continueresti inutilmente a chiedere aggiornamenti al back-end anche a distanza di pochi secondi.
- E' praticamente impossibile che l'utente rimanga 20 minuti con l'App attiva, senza timeout schermo, ricadrebbe nel caso della onResume.

Disabilitando le notifiche da impostazioni dello smartphone la notifica la ricevo comunque del server ma non potrò visualizzarla o addirittura non riceverò più notifiche dal servizio messaging?