Google Drive SDK推送通知,收到错误的更改ID

时间:2014-07-07 14:41:10

标签: push-notification google-drive-api

当我订阅我的云端硬盘帐户的所有更改时,有时我会收到ID错误的更改。根据我的观察,特定文件的更改在最后一次更改中汇总了一段时间。

例如: 如果我在驱动器中更改文件并且我收到了3个带有ID的通知:“#21,#22,#23”,我预计如果对该文件没有更多更改,我可以更改“#23” 。但有时候我会收到ID大于存在的最后一次更改。当我使用API​​更改列表时,我得到lastlargestChangeId = receivedChangesId - 1.

我已经使用google示例对其进行了测试,结果相同:

push notifications test

  

{“notification_id”:“xxxxxxxxxxx”,“resource_state”:“更改”,“过期”:“星期一,2014年7月7日13:58:37 GMT”,“self_link”:“https://www.googleapis.com/drive/v2/changes/ 3387 “}

     

{    “kind”:“drive#changeList”,    “etag”:“xxxxxxxxxxx”,    “selfLink”:“... / changes?startChangeId = 3340”,    “largestChangeId”:“3386”,    “项目”:[     ...    ]   }

我错了吗?

2 个答案:

答案 0 :(得分:3)

似乎Google将其归类为错误: https://code.google.com/a/google.com/p/apps-api-issues/issues/detail?id=3706

明星,以便谷歌可以优先考虑它。

答案 1 :(得分:1)

这是官方答复:

  

在与我们的工程师交谈之后,这实际上是正常的   意。推送通知中给出的更改ID(ID和   包含相同ID的自链接仅在有效时保持有效   特定资源没有新的更改。拿走   以下有关推送通知的用户驱动器上的示例方案   被送去做所有的改变。 1)资源A(文件或文件夹等)   变化。 2)Drive API发送带有更改ID的推送通知   (例1234)。 3)此更改ID(和自身链接)现在可以使用   成功地推动变革。 4)资源A再次变化。 5)   Drive API会发送更改ID为1235的推送通知。请注意   更改ID单调增加。 6)访问较早的   通过changes.get更改ID(1234)或现在将自动链接404   因为同一资源上有更新的更改。 7)你仍然可以   访问更改ID 1235此处。

     

一般来说,你不应该期望得到一个特定的   使用changes.get更改ID。任何资源都只在更改流中   一旦。因此,只要资源有更新的更改,就会发生旧的更改ID   是无效的。一些评论者注意到你可以做changeID - 1到   得到这个改变。但是,这并不总是有效。在我的测试中,我   已经在更改ID和更改ID上获得了404 - 1。   相反,您应该同步一组给定的资源并注意最大的资源   更改该集的ID。然后,当您获得推送通知时   将来,看看您在推送通知中获得的更改ID是否更新   比你存储的最大。如果是这样,请使用changes.list获取   您看到的最后一次更改ID之间的所有资源更改/   存储和你刚收到的那个。

     

tldr;不要指望change.get中存在的更改ID。使用   更改.list,以获取从基本更改ID到的所有更改   更改推送通知中的ID。

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