2014-07-07 5 views
8

Quando mi iscrivo a tutte le modifiche del mio account Drive, a volte ricevo modifiche con un ID errato. Secondo le mie osservazioni, i cambiamenti di file specifici vengono aggregati nell'ultima modifica con un certo periodo di tempo.Google Drive SDK Notifiche push, ricezione delle modifiche errate id

Ad esempio: Se cambio il file nella mia auto, e se ho ricevuto 3 notifiche con ID: "21 #, # 22, # 23", mi aspettavo che posso ottenere il cambiamento di "23 #", se non ci sono più modifiche a quel file. Ma a volte ricevo l'ultimo cambiamento con l'id più grande di quello che esiste. Quando uso lista delle modifiche API, ottengo lastlargestChangeId = receivedChangesId - 1.

ho provato con esempi google e ho ottenere gli stessi risultati:

push notifications test

{ "notification_id": " xXXXXXXXXXX " "resource_state": "cambiamento", "scadenza": "Mon, 7 luglio 2014 13:58:37 GMT", "self_link":" https://www.googleapis.com/drive/v2/changes/ "}

{ "tipo": "unità # changeList" , "ETAG": "XXXXXXXXXXX", "selfLink":" .../modifiche startChangeId = 3340" , "largestChangeId": "3386", "elementi": [... ] }

Mi sbaglio?

+1

Io corro in questo problema esatto. Quando "rimuovi" (non elimini) un file nell'unità, ricevo una notifica con un changeID. Fare un "getChange (changeID) restituisce un 404, ma quando controllo il" getLargestChangeID ", trovo che il changeID che mi è stato dato dalla notifica è di una cifra più grande di quello che è realmente l'ID di modifica più grande. ? – Stanley

+0

Lo stesso qui, sembra un bug ... Quando carico un nuovo file, ricevo una notifica di modifica, l'id fornito non è corretto, ma l'id-1 è OK. – Vico

+0

Se può aiutare, in upload, ricevo anche "cambia" per lo stato-risorsa-x-goog, e non "aggiungi" affatto – Vico

risposta

1

Ecco la risposta ufficiale:

Dopo aver parlato con i nostri ingegneri, questo in realtà sta lavorando come previsto. L'ID di modifica fornito nella notifica push (l'ID e il collegamento auto che contiene lo stesso ID) rimane valido solo fino a non ci sono modifiche più recenti su una particolare risorsa. Prendere lo scenario di esempio sull'unità di un utente con le notifiche push inviate per tutte le modifiche. 1) Risorsa A (un file o una cartella, ecc.) modifiche. 2) L'API di Drive invia una notifica push con un ID di modifica (esempio 1234). 3) Questo ID modifica (e il collegamento automatico) può essere utilizzato ora per eseguire correttamente la modifica. 4) La risorsa A cambia di nuovo. 5) L'API dell'unità invia una notifica push con l'ID di modifica 1235. Notare che gli ID di variazione aumentano in modo monotono. 6) Accedere al precedente cambia ID (1234) tramite un changes.get o il collegamento automatico sarà 404 ora perché c'è una modifica più recente sulla stessa risorsa. 7) Puoi ancora cambiare l'ID 1235 qui.

In generale, non è necessario essere in grado di ottenere un particolare ID di modifica con changes.get. Qualsiasi risorsa è solo nelle modifiche flusso una volta. Quindi, non appena la risorsa ha una nuova modifica, il vecchio ID di sostituzione non è valido. Alcuni commentatori hanno notato che è possibile modificare changeID - 1 a ottenere questa modifica. Tuttavia, questo non funzionerà sempre.Nel mio test, I ha ottenuto un 404 sia sull'ID di modifica che sull'ID di modifica: 1. Invece, è necessario sincronizzare un determinato set di risorse e annotare l'ID di modifica più grande di tale serie. Quindi, quando ricevi notifiche push nel futuro , verifica se l'ID di modifica che ricevi nella notifica push è più recente di rispetto al più grande che hai memorizzato. In tal caso, utilizzare changes.list per ottenere tutte le modifiche alle risorse tra l'ultimo ID di modifica visualizzato/ memorizzato e quello appena ricevuto.

tldr; Non contare su ID cambiamento esistenti con changes.get. Utilizzare invece il file changes.list per ottenere tutte le modifiche da un ID di modifica di base all'ID di modifica che si ottiene nella notifica push.

https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3706

+1

Nel mio problema il problema è che quando ricevo la notifica delle modifiche a volte il suo valore non esiste nemmeno. Posso verificare questo fatto con il aiuto delle modifiche _LIST API_ e _GET API_ con ** RECIEVED_ID - 1 **. Se fosse l'ultimo ** change ID **, potrei ottenerlo con _GET_ request ma non potrei. Nell'esempio sopra riportato nel mio problema alla fase 5, l'API di Drive invia ** 1236 ID ** anziché ** 1235 ** (rea l cambio ID). E non riesco a ottenerlo con _GET_ request e _LIST_ request. Ma posso ottenere (1236 -1) perché viene ricevuto con le richieste _LIST_ e _GET_. –