Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google api Gmail API users.watch-没有historyId的详细信息_Google Api_Gmail Api_Google Cloud Pubsub - Fatal编程技术网

Google api Gmail API users.watch-没有historyId的详细信息

Google api Gmail API users.watch-没有historyId的详细信息,google-api,gmail-api,google-cloud-pubsub,Google Api,Gmail Api,Google Cloud Pubsub,我已经成功地设置了GooglePub/Sub以使用Gmail API监视功能,如下所述:在我的Gmail帐户中监视收件箱标签 新消息到达后,我立即收到有效格式的推送通知,如: { message: { data: '.......', attributes: {}, message_id: '1248700053943' }, subscription: '.....' } 在我解码数据之后,我收到了电子邮件和historyId。然后,正如建议的那样,我请求gmail

我已经成功地设置了GooglePub/Sub以使用Gmail API监视功能,如下所述:在我的Gmail帐户中监视收件箱标签

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

{ message: 
    { data: '.......',
    attributes: {},
    message_id: '1248700053943' },
subscription: '.....' }
在我解码数据之后,我收到了电子邮件和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改为StartThisToryID,而不是通知中的新ID,并获取最近更改的列表

  • 记住通知中的historyId,然后转到2

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

    {
     "historyId": "4658894"
    }
    
    但不是这个:

    {
     "history": [ ],
     "historyId": "4658894"
    }
    
    同步指南中提供了更多详细信息:


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

    您确定在测试应用程序中使用的电子邮件地址与在API Explorer中使用的电子邮件地址完全相同吗?@Tholle,是的。此外,如果我从提供的SyryYID减去了一个比特,比如说不是4658879,而是4658800,并使用它作为StestTistRyID,我就能够在响应数组中间的某个地方获取关于新消息的数据。它不准确,而且工作起来很神奇,我需要一种简单的方法通过histroyId从推送消息中获取准确的数据。是的,推送通知只是一个无效通知。然后,客户端应该至少调用history.list(),然后可能调用messages.get()等其他调用,以获得最新的结果。有没有办法获取触发第一个webhook的消息?在你描述的情况下,我们永远不会收到最初的电子邮件。