如何单独停止Gmail单个标签的watch()监听?
解决Gmail API单个标签监听停止问题
哦,这个坑我之前踩过!你遇到的问题本质是对Gmail users.stop接口的误解——它根本不是用来单独停止某个标签的监听的,而是一次性关闭当前用户的所有推送通知,不管你在请求里指定了哪个labelIds。这就是为什么你停SENT的时候,INBOX的通知也跟着没了。
那怎么才能只停止单个标签的监听呢?其实Gmail的推送机制是「单订阅覆盖」模式:每个用户同一时间只能存在一个有效的watch订阅,新的watch请求会直接替换掉旧的。所以正确的做法不是调用stop,而是重新发起watch请求,只包含你还想继续监听的标签。
举个例子,假设你之前同时监听了INBOX和SENT,现在想停止SENT的监听,只保留INBOX,你只需要重新调用watch,把labelIds设为只包含INBOX就行:
const userWatchAsync = util.promisify(gmail.users.watch); return userWatchAsync({ userId: "me", access_token: token, resource: { labelIds: ["INBOX"], // 只保留需要继续监听的标签 topicName: `projects/${projectId}/topics/${topic}` } });
这样一来,新的订阅就会覆盖掉之前包含两个标签的订阅,之后你就只会收到INBOX的通知了。如果之后又想恢复SENT的监听,再重新调用一次watch,把两个标签都加回去就行。
另外还要提醒一句:Gmail的watch订阅有效期只有7天,你需要定期(比如每6天)重新发起watch请求来刷新订阅,否则推送会自动停止。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

