Push notification Google Drive SDK推送通知,接收到错误的更改id

Push notification Google Drive SDK推送通知,接收到错误的更改id,push-notification,google-drive-api,Push Notification,Google Drive Api,当我订阅我的驱动器帐户的所有更改时,有时我会收到错误id的更改。根据我的观察,特定文件的更改在某个时间段的最后更改中聚合 例如: 如果我更改了驱动器中的文件,并且收到了3个ID为“#21、#22、#23”的通知,我希望如果该文件没有更多更改,我可以更改为“#23”。但有时我会收到id大于其存在的最后更改。当我使用API更改列表时,我得到lastlargestChangeId=receivedChangesId-1 我用谷歌的例子进行了测试,得到了相同的结果: {“通知id”:“XXXXXXXX

当我订阅我的驱动器帐户的所有更改时,有时我会收到错误id的更改。根据我的观察,特定文件的更改在某个时间段的最后更改中聚合

例如: 如果我更改了驱动器中的文件,并且收到了3个ID为“#21、#22、#23”的通知,我希望如果该文件没有更多更改,我可以更改为“#23”。但有时我会收到id大于其存在的最后更改。当我使用API更改列表时,我得到lastlargestChangeId=receivedChangesId-1

我用谷歌的例子进行了测试,得到了相同的结果:

{“通知id”:“XXXXXXXXXX”,“资源状态”:“更改”,“到期”:“2014年7月7日星期一13:58:37 GMT”,“自我链接”:“3387”}

{ “种类”:“驱动器#变更列表”, “etag”:“XXXXXXXXXX”, “自链接”:“../changes?startChangeId=3340”, “最大变更ID”:“3386”, “项目”:[ ... ] }


我错了吗?

谷歌似乎把它归类为一个bug:


给它加上星星,这样谷歌就可以对它进行优先排序。

以下是官方答案:

在与我们的工程师交谈后,这实际上是在起作用 预定的推送通知中给出的更改ID(ID和 包含相同ID的自链接)仅在 特定资源上没有更新的更改。拿 以下示例场景显示了用户驱动器上的推送通知 正在发送所有更改。1) 资源A(文件或文件夹等) 变化。2) 驱动器API发送带有更改ID的推送通知 (例1234)。3) 现在可以使用此更改ID(和自链接) 以成功地调出更改。4) 资源A再次发生变化。5) 驱动器API发送更改ID为1235的推送通知。注意 变更ID是单调递增的。6) 访问较早的 通过changes.get更改ID(1234),否则自链接现在将为404 因为同一资源上有更新的更改。7) 你仍然可以 此处访问更改ID 1235

一般来说,您不应该期望能够获得特定的 使用changes.get更改ID。任何资源都只在变更流中 一旦因此,一旦资源有了新的更改,旧的更改ID 这是无效的。一些评论者指出,您可以对 找这个零钱。然而,这并不总是有效的。在我的测试中,我 在变更ID和变更ID-1上都得到了404。 相反,您应该同步一组给定的资源,并注意最大的资源 更改该集的ID。然后,当您在 以后,查看推送通知中获得的更改ID是否较新 比你储存的最大的。如果是,请使用changes.list获取 您看到的最后一个更改ID之间的所有资源更改/ 存储的和您刚刚收到的

tldr;不要指望changes.get中存在更改ID。使用 改为changes.list以获取从基本更改ID到 更改您在推送通知中获得的ID


我遇到的正是这个问题。当我“删除”(而不是删除)驱动器中的文件时,我会收到一个带有changeID的通知。执行“getChange(changeID)”返回404,但当我选中“getLargestChangeID”时“,我发现通知给我的变更ID比最大的变更ID实际大一位数。有人能解释一下吗?这里也是,看起来像个虫子。。。当我上传一个新文件时,我收到一个更改通知,提供的id不正确。但是id-1是可以的。如果可以的话,在上传时我也会收到x-goog-resource-state的“更改”,并且根本没有“添加”。在我的问题中,问题是当我收到更改通知时,有时它的值甚至不存在。我可以在更改列表API的帮助下检查这一事实,并使用received_ID-1获取API。如果这是最后一个更改ID,我可以通过get请求获得它,但我不能。在上面的示例中,在步骤5的问题中,驱动器API发送1236 ID而不是1235(实际更改ID)。我无法通过get请求和LIST请求获取它。但是我可以获取(1236-1),因为它是通过LIST和get请求接收的。