Gmail API users.watch - 没有 historyId 的详细信息
Gmail API users.watch - no details for historyId
我已成功设置 Google Pub/Sub 以使用 Gmail API 此处描述的监视功能:https://developers.google.com/gmail/api/guides/push 以监视我的 gmail 帐户中的收件箱标签。
一旦收到新消息,我会立即收到有效格式的推送通知,例如:
{ message:
{ data: '.......',
attributes: {},
message_id: '1248700053943' },
subscription: '.....' }
在我对数据进行 base64 解码后,我得到了电子邮件和 historyId。然后,按照建议,我请求 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 工作不正常,发送了错误的 historyId,或者我只是遗漏了什么?
看来我误解了 users.history.list 的工作原理,流程应该如下所述:
从 users.watch 请求的响应中记住 historyId。
在推送通知调用 users.history.list 时使用之前记住的 historyId 作为 startHistoryId 而不是通知中的新 historyId,并获取最近更改的列表。
记住通知中的 historyId,然后转到 2.
如果我们查看对 users.history.list 的任何调用的响应,historyId 始终存在,它是最新历史记录更改的标记。推送通知带来了最新的 historyId,所以如果我们用它请求 users.history.list(如问题所示),我们得到空的历史数组,服务器从响应中删除这个空的 "history" 字段,这就是我们的原因得到这个:
{
"historyId": "4658894"
}
但不是这个:
{
"history": [ ],
"historyId": "4658894"
}
同步指南中提供了更多详细信息:https://developers.google.com/gmail/api/guides/sync#partial
所以我们不能很容易地从推送通知中获取到达INBOX的新消息的详细信息,需要处理历史挖掘和同步才能找到它。
我已成功设置 Google Pub/Sub 以使用 Gmail API 此处描述的监视功能:https://developers.google.com/gmail/api/guides/push 以监视我的 gmail 帐户中的收件箱标签。
一旦收到新消息,我会立即收到有效格式的推送通知,例如:
{ message:
{ data: '.......',
attributes: {},
message_id: '1248700053943' },
subscription: '.....' }
在我对数据进行 base64 解码后,我得到了电子邮件和 historyId。然后,按照建议,我请求 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 工作不正常,发送了错误的 historyId,或者我只是遗漏了什么?
看来我误解了 users.history.list 的工作原理,流程应该如下所述:
从 users.watch 请求的响应中记住 historyId。
在推送通知调用 users.history.list 时使用之前记住的 historyId 作为 startHistoryId 而不是通知中的新 historyId,并获取最近更改的列表。
记住通知中的 historyId,然后转到 2.
如果我们查看对 users.history.list 的任何调用的响应,historyId 始终存在,它是最新历史记录更改的标记。推送通知带来了最新的 historyId,所以如果我们用它请求 users.history.list(如问题所示),我们得到空的历史数组,服务器从响应中删除这个空的 "history" 字段,这就是我们的原因得到这个:
{
"historyId": "4658894"
}
但不是这个:
{
"history": [ ],
"historyId": "4658894"
}
同步指南中提供了更多详细信息:https://developers.google.com/gmail/api/guides/sync#partial
所以我们不能很容易地从推送通知中获取到达INBOX的新消息的详细信息,需要处理历史挖掘和同步才能找到它。