Questo rientra nelle basi della comunicazione del protocollo. Una transazione è stata richiesta dal client Android e il server deve eseguire la transazione. Se la transazione dipende dalla conferma del client Android, si tratta di una chiamata di comunicazione ACK / NAK.
ACK (riconoscimento) e NAK (riconoscimento negativo) vengono utilizzati per indicare l'altro lato il risultato di una richiesta.
Quello che stai chiedendo è un tipo di scambio handshake tra il client e il server, e può essere eseguito con uno scambio di base ACK / NAK.
Ecco un esempio di Android che carica un file con riconoscimento a due vie.
Android -> upload files -> Server
Android <- ACK #id <- Server
Android -> ACK #id -> Server
Nell'esempio precedente ho aggiunto un identificatore univoco #id
per la transazione. Il server dovrebbe ricevere i file, creare un record di transazione e inviarlo come risposta ad Android. Android dovrebbe quindi seguire con un riconoscimento di quella transazione (o in alternativa un NAK per un rifiuto).
Ecco un esempio di disconnessione di Android durante l'handshake.
Android -> upload files -> Server
Android <- ACK #id <- Server
/** no ACK response **/
Nell'esempio precedente il server ha accettato i file caricati e inviato una risposta di #id
ACK su Android, ma Android non risponde mai con un ACK. Il dispositivo Android non è riuscito a completare l'handshake. Spetta a te decidere come il Server dovrebbe gestirlo. Distruggi la transazione, mantieni la transazione e attendi che il dispositivo Android torni più tardi o completi la transazione comunque.
Il server può presumere che dal momento che il dispositivo non ha risposto con ACK. Che il dispositivo Android non ha aggiornato lo stato interno per indicare che il caricamento è andato a buon fine. Scarterei la transazione e consentirò al dispositivo di ripeterlo in futuro.