Gmail API用户.watch -没有historyId的细节



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

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

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

我base64decode数据后,我得到电子邮件和历史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用户。手表API不能正常工作,并发送错误的historyId,或者我只是错过了什么?

看起来我误解了users.history.list的工作方式,流程应该像下面描述的那样:

  1. 从用户响应中记住historyId。观看请求。

  2. 在推送通知调用users.history.list与先前记住的历史id startHistoryId而不是从通知的新一个,并获得最近更改的列表

  3. 记住notification中的historyId,然后转到2

如果我们查看任何调用users.history的响应。列表中,historyId总是存在的,它是最新历史变化的标志。推送通知带来了最新的历史id,所以如果我们用它来请求users.history.list(就像在问题中一样),我们得到了一个空的历史数组,服务器从响应中删除了这个空的"历史"字段,这就是为什么我们得到这个:

{
 "historyId": "4658894"
}

但不是这个:

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

更多细节请参见同步指南:https://developers.google.com/gmail/api/guides/sync#partial

因此,我们不能轻易地从推送通知中获得到达INBOX的新消息的详细信息,需要处理历史挖掘和同步才能找到它。

相关内容

  • 没有找到相关文章