当我订阅我的云端硬盘帐户的所有更改时,有时我会收到ID错误的更改。根据我的观察,特定文件的更改在最后一次更改中汇总了一段时间。
例如: 如果我在驱动器中更改文件并且我收到了3个带有ID的通知:“#21,#22,#23”,我预计如果对该文件没有更多更改,我可以更改“#23” 。但有时候我会收到ID大于存在的最后一次更改。当我使用API更改列表时,我得到lastlargestChangeId = receivedChangesId - 1.
我已经使用google示例对其进行了测试,结果相同:
{“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”, “项目”:[ ... ] }
我错了吗?
答案 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