Google API:Gmail 服务推送通知(观看)- 用户无权执行此操作

Google API: Gmail Service Push Notification (Watch) - User not authorized to perform this action

我正在尝试在邮箱上调用 watch()。我设置了一个服务 Iam 帐户,并创建了一个主题和订阅。我向我的服务帐户授予了对我的主题和订阅的完全(所有者)权利。但是在 watch() 上调用 execute 时,出现错误:

Google.Apis.Requests.RequestError Error sending test message to Cloud PubSub projects/projectid/topics/topicname : User not authorized to perform this action. [403] Errors [ Message[Error sending test message to Cloud PubSub projects/projectid/topics/topicname : User not authorized to perform this action.] Location[ - ] Reason[forbidden] Domain[global] ]

这是我用来设置服务的代码:

 credential = new X509Certificate2("file.p12"), "password", X509KeyStorageFlags.Exportable);
var service = new GmailService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = applicationame,
        });


WatchRequest body = new WatchRequest()
    {
        TopicName = "projects/projectid/topics/topicname",
        LabelIds = new[] {"INBOX"}
string userId = "me";
UsersResource.WatchRequest watchRequest = service.Users.Watch(body, userId);
WatchResponse test = watchRequest.Execute();

我的服务帐户可以访问以下所有范围:

https://mail.google.com/
https://www.googleapis.com/auth/gmail.modify
https://www.googleapis.com/auth/gmail.readonly
https://www.googleapis.com/auth/gmail.metadata

我是不是漏掉了什么?

编辑

添加了以下范围,但仍然没有成功:https://www.googleapis.com/auth/pubsub

编辑 还添加了以下内容但没有成功:https://www.googleapis.com/auth/cloud-platform

您需要记住服务帐户不是您。服务帐户是一个虚拟用户,它有一个 google 驱动器帐户和一个 google 日历帐户,可能还有更多。但是它没有 有一个 gmail 帐户。

服务帐户已预授权。您需要授予服务帐户访问权限才能阅读用户的电子邮件。

userId 需要是您希望访问其电子邮件的用户的 ID。 'Me' 将无法工作,因为 serveries 帐户没有 gmail 帐户,它没有电子邮件可供阅读。

我没有授予 gmail 用于发布更新的服务帐户 Pub/Sub 发布到主题 (TopicName) 的权限:serviceAccount:gmail-api-push@system.gserviceaccount.com 我在控制台中授予此帐户权限。

只需要范围:

https://www.googleapis.com/auth/gmail.modify https://www.googleapis.com/auth/pubsub

在云端 Pub/Sub 开发者控制台您需要授予 serviceAccount:gmail-api-push@system.gserviceaccount.com

发布权限