Google api GoogleAPI域范围的授权服务帐户能够模拟用户实现gmail推送吗?

Google api GoogleAPI域范围的授权服务帐户能够模拟用户实现gmail推送吗?,google-api,gmail-api,google-api-python-client,google-oauth,Google Api,Gmail Api,Google Api Python Client,Google Oauth,我在我的Google Apps域上创建了一个服务帐户,启用了域范围的委派,并从我域的控制面板在服务帐户的客户端ID上启用了完整的gmail和pubsub API作用域 我可以成功实例化gmail API客户端,并通过以下方式模拟域的一个帐户: credentials = oauth2client.SignedJwtAssertionCredentials(secret['client_email'], secret['private_key'], ['https://www.google

我在我的Google Apps域上创建了一个服务帐户,启用了域范围的委派,并从我域的控制面板在服务帐户的客户端ID上启用了完整的gmail和pubsub API作用域

我可以成功实例化gmail API客户端,并通过以下方式模拟域的一个帐户:

    credentials = oauth2client.SignedJwtAssertionCredentials(secret['client_email'], secret['private_key'], ['https://www.googleapis.com/auth/gmail.modify'], sub='accountToImpersonate@domain.com')

    http = httplib2.Http()
    credentials.authorize(http)

    return discovery.build('gmail', 'v1', http=http)
我正在尝试使用以下命令在模拟用户的帐户上设置推送通知webhook。指定的主题名称有效

  request = {
    'labelIds': ['INBOX'],
    'topicName': 'projects/projectName/topics/topicName'
  }

  gmail.users().watch(userId='me', body=request).execute()
我在呼叫观看后收到以下错误:

<HttpError 400 when requesting https://www.googleapis.com/gmail/v1/users/me/watch?alt=json returned "Invalid developer ID">

调用其他gmail API方法(列表消息等)成功


具有域范围授权的服务帐户是否能够在域用户的帐户上启用gmail推送通知Webhook?

我最近通过一个服务帐户成功地做到了这一点,只需在pubsub客户端设置呼叫中传递用户的电子邮件地址,而不是“我”

我已经尝试过,是的,这是可能的。你有没有在你的主题中授权访问gmail?你有没有找到解决这个问题的方法?我遇到了完全相同的问题,
gmailapi-push@system.gserviceaccount.com
确实被授予了对我的主题的发布权限。我(还)不确定是否要自己实现这一点。但是,如果您首先模拟用户,然后尝试与该用户订阅主题,则他们可能需要访问该主题。可能尝试使用服务帐户并给出实际的userId,而不是说userId=“me”。。。正如在
gmail.users().watch(userId='xxxxxxxxx',body=request)中一样。execute()