Gmail API users.watch - 没有历史记录的详细信息

2024-01-07

我已成功设置 Google Pub/Sub 以使用 Gmail API Watch 功能,如下所述:https://developers.google.com/gmail/api/guides/push https://developers.google.com/gmail/api/guides/push查看我的 Gmail 帐户中的 INBOX 标签。

一旦新消息到达,我会立即收到有效格式的推送通知,例如:

{ message: 
    { data: '.......',
    attributes: {},
    message_id: '1248700053943' },
subscription: '.....' }

对数据进行 Base64 解码后,我收到电子邮件和历史记录 ID。然后,按照建议,我请求 gmail.users.history.list API(通过 API 控制台),并将 startHistoryId 设置为推送通知中的 HistoryId。然后得到没有任何细节的空响应:

GET https://www.googleapis.com/gmail/v1/users/me/history?startHistoryId=4658879&key={YOUR_API_KEY}
200 OK
- Show headers 
{
 "historyId": "4658894"
}

所以通知中的historyId似乎无效。 看来 Gmail users.watch API 无法正常工作,并且发送了错误的历史记录 ID,或者我只是遗漏了一些东西?


看起来我误解了 users.history.list 的工作原理,流程应该如下所示:

  1. 记住 users.watch 请求响应中的 HistoryId。

  2. 在推送通知上,使用之前记住的historyId作为startHistoryId而不是通知中的新历史记录调用users.history.list,并获取最近更改的列表。

  3. 记住通知中的historyId,然后转到2。

如果我们查看对 users.history.list 的任何调用的响应,historyId 始终存在,它是最新历史记录更改的标记。推送通知带来最新的历史记录,所以如果我们用它请求 users.history.list (如问题中所示),我们会得到空的历史记录数组,并且服务器从响应中删除这个空的“历史记录”字段,这就是我们得到这个的原因:

{
 "historyId": "4658894"
}

但不是这个:

{
 "history": [ ],
 "historyId": "4658894"
}

同步指南中提供了更多详细信息:https://developers.google.com/gmail/api/guides/sync#partial https://developers.google.com/gmail/api/guides/sync#partial

因此我们无法轻易地从推送通知中获取到达INBOX的新消息的详细信息,需要进行历史挖掘和同步来查找它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Gmail API users.watch - 没有历史记录的详细信息 的相关文章

随机推荐