仅在有新邮件到达时接收 Gmail 推送通知

Posted

技术标签:

【中文标题】仅在有新邮件到达时接收 Gmail 推送通知【英文标题】:Receive Gmail push notification only when a new message arrives 【发布时间】:2015-10-21 11:53:06 【问题描述】:

我正在尝试制作一个应用程序,该应用程序将查明收件人是否已经使用 GMAIL 的推送通知回复了我的电子邮件。 它运行良好,但问题是,我正在收到有关我的 gmail 任何更改的通知。

这是我使用的代码

request = 
        'labelIds': ['UNREAD'],
        'topicName': topic,
        'labelFilterAction': 'include'
    
service.users().watch(userId=user.google_id, body=request).execute()

然后我尝试使用 'labelFilterAction': 'exclude'

system_labels = ['CATEGORY_UPDATES', 'UNREAD', 'DRAFT', 'CATEGORY_PROMOTIONS', 'INBOX', 'CATEGORY_SOCIAL', 'CATEGORY_PERSONAL', 'CATEGORY_FORUMS', 'TRASH', 'CHAT', 'IMPORTANT', 'SENT', 'STARRED', 'SPAM']
system_labels.remove('UNREAD')
request = 
        'labelIds': system_labels,
        'topicName': topic,
        'labelFilterAction': 'exclude'
    
service.users().watch(userId=user.google_id, body=request).execute()

有了这个,我根本没有收到任何通知。 有什么建议吗?

【问题讨论】:

新的未读邮件也有INBOX-标签,所以我认为所有新邮件都会被排除在外。也试试system_labels.remove('INBOX'),你至少会过滤掉很多消息,但可能不是全部。 我尝试这样做,但我仍然没有收到任何通知。 嗯...试试system_labels.remove('INBOX')system_labels.remove('UNREAD')system_labels.remove('CATEGORY_PERSONAL')。我想就是这样! :) @khulas15 您是否设法只收到UNREAD 中的更改通知? 【参考方案1】:

工作python代码

credentials = get_credentials(email)
http = credentials.authorize(httplib2.Http())
service = discovery.build('gmail', 'v1', http=http)

    request = 
        'labelIds': ['CATEGORY_PERSONAL'],
        'topicName': 'projects/myproject/topics/getNotification',
        'labelFilterAction': 'exclude'
    
service.users().watch(userId='me',body=request).execute()

【讨论】:

仅供参考,这不起作用,API 无法有效过滤标签,包括系统标签(请参阅issuetracker.google.com/issues/36759803)。每次单击电子邮件时,上述代码都会收到 UNREAD 通知,因此您将看到至少两个通知,并且您不会收到 CATEGORY_PERSONAL 的任何通知。文档是错误的(阅读谷歌问题跟踪器)

以上是关于仅在有新邮件到达时接收 Gmail 推送通知的主要内容,如果未能解决你的问题,请参考以下文章

我们可以使用云发布/订阅接收多个用户到同一推送端点的 gmail 推送通知吗

Android 设备接收无休止的推送通知

Python 和 GmailAPI:如何监控 Gmail 收件箱以获取新电子邮件?

收到来自 gmail users.watch API 的推送通知后如何阅读用户 gmail?

Xtify Cordova 未在应用程序中接收 gcm 推送(仅在从推送启动时)

服务器上有新数据时的 Ionic 2 推送通知