Google Drive SDK Push-Benachrichtigungen, die falsche Änderungs-ID erhalten

8

Wenn ich alle Änderungen meines Google Drive-Kontos abonniere, erhalte ich manchmal Änderungen mit falscher ID. Nach meinen Beobachtungen werden Änderungen bestimmter Dateien in der letzten Änderung mit einer gewissen Zeit aggregiert.

Zum Beispiel: Wenn ich die Datei in meinem Laufwerk ändere und 3 Benachrichtigungen mit IDs erhalten habe: "# 21, # 22, # 23", habe ich erwartet, dass ich eine Änderung von "# 23" bekommen kann, wenn es keine Änderungen mehr an dieser Datei gibt . Aber manchmal bekomme ich letzte Änderung mit ID größer als es existiert. Wenn ich die Liste der API-Änderungen verwende, bekomme ich lastlargestChangeId = receivedChangesId-1.

Ich habe es mit Google Beispielen getestet und bekomme die gleichen Ergebnisse:

Push-Benachrichtigungstest

  

{"notification_id": "xxxxxxxxxxx", "resource_state": "ändern", "Ablauf": "Mo, 07 Jul 2014 13:58:37 GMT", "self_link": " Ссылка 3387 "}

     

{    "kind": "drive # changeList",    "etag": "xxxxxxxxxxx",    "selfLink": "... / ändert? startChangeId = 3340",     "largeChangeId": "3386" ,    "Artikel": [     ...    ]   }

Bin ich falsch?

    
Gregory Kutuzov 07.07.2014, 14:41
quelle

2 Antworten

3

Google hat es offenbar als Fehler kategorisiert: Ссылка

Star it, damit Google es priorisieren kann.

    
Vico 09.07.2015 06:53
quelle
1

Hier ist die offizielle Antwort:

  

Nach dem Gespräch mit unseren Ingenieuren funktioniert das tatsächlich wie   beabsichtigt. Die Änderungskennung, die in der Push - Benachrichtigung angegeben ist (ID und   self link, der dieselbe ID enthält) bleibt nur so lange gültig wie   Für eine bestimmte Ressource gibt es keine neueren Änderungen. Nehmen Sie die   folgendes Beispielszenario auf dem Laufwerk eines Benutzers mit Push-Benachrichtigungen   für alle Änderungen gesendet werden. 1) Ressource A (eine Datei oder ein Ordner usw.)   Änderungen. 2) Drive API sendet eine Push-Benachrichtigung mit einer Änderungs-ID   (Beispiel 1234). 3) Diese Änderungs-ID (und der Selflink) kann jetzt verwendet werden   um die Veränderung erfolgreich durchzuführen. 4) Ressource A ändert sich erneut. 5)   Drive API sendet eine Push-Benachrichtigung mit Änderungs-ID 1235. Beachten Sie, dass   Änderungs-IDs steigen monoton an. 6) Zugang zu früher   ändere ID (1234) durch ein changes.get oder die self link wird 404 jetzt   weil es auf derselben Ressource eine neuere Änderung gibt. 7) Sie können immer noch   Rufen Sie hier die ID 1235 auf.

     

Im Allgemeinen sollten Sie nicht erwarten, dass Sie ein bestimmtes erhalten können   Ändern Sie die ID mit changes.get. Jede Ressource befindet sich nur im Änderungsstream   Einmal. Sobald die Ressource eine neuere Änderung hat, wird die alte ID geändert   ist ungültig. Einige Kommentatoren haben festgestellt, dass Sie changeID - 1 to tun können   bekomme diese Änderung. Dies wird jedoch nicht immer funktionieren. Bei meinen Tests habe ich   habe eine 404 sowohl bei der Änderungs - ID als auch bei der Änderungs - ID - 1 erhalten.   Stattdessen sollten Sie eine bestimmte Menge von Ressourcen synchronisieren und den größten Wert notieren   ändere die ID dieses Sets. Dann, wenn Sie Push-Benachrichtigungen in der   Zukünftig, sehen Sie, ob die Änderungs-ID, die Sie in der Push-Benachrichtigung erhalten, neuer ist   als die größte, die Sie gespeichert haben. Wenn ja, benutze changes.list um zu bekommen   alle Ressourcenänderungen zwischen der letzten Änderungs-ID, die Sie gesehen haben /   gespeichert und die, die Sie gerade erhalten haben.

     

tldr; Zählen Sie nicht auf Änderungskennungen, die mit changes.get vorhanden sind. Benutzen   changes.list stattdessen, um alle Änderungen von einer Basisänderungs - ID zu erhalten   ID ändern, die Sie in der Push-Benachrichtigung erhalten.

Ссылка

    
Vico 26.07.2015 05:50
quelle