我想设置推送通知监视但我收到错误响应。我需要什么授权?
请求:
// Google API
$client = getClient();
// POST request
$ch = curl_init('https://www.googleapis.com/gmail/v1/users/me/watch');
curl_setopt_array($ch, array(
CURLOPT_POST => TRUE,
CURLOPT_RETURNTRANSFER => TRUE,
CURLOPT_HTTPHEADER => array(
'Authorization: Bearer ' . $client->getAccessToken()['access_token'],
'Content-Type: application/json'
),
CURLOPT_POSTFIELDS => json_encode(array(
'topicName' => 'projects/xxxx/topics/xxxx',
'labelIds' => ["INBOX"]
))
));
响应:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "forbidden",
"message": "Error sending test message to Cloud PubSub projects/xxxx/topics/xxxx : User not authorized to perform this action."
}
],
"code": 403,
"message": "Error sending test message to Cloud PubSub projects/xxxx/topics/xxxx : User not authorized to perform this action."
}
}
更多详情:
GMAIL_READONLY
。 答案 0 :(得分:7)
来自页面:https://developers.google.com/gmail/api/guides/push#grant_publish_rights_on_your_topic
Cloud Pub / Sub要求您授予Gmail发布权限 通知您的主题。
要执行此操作,您需要向其授予发布权限 serviceAccount:gmail-api-push@system.gserviceaccount.com。你可以做 这使用Cloud Pub / Sub Developer Console权限界面 遵循资源级访问控制指令。
(强调补充)
答案 1 :(得分:2)
您必须授予对主题的权限。 转到您的主题列表 或单击下面的链接https://console.cloud.google.com/cloudpubsub/topic。
然后输入新的成员电子邮件,或者如果您的应用具有多个用户,则可以输入 allUsers 。然后选择角色发布/订阅发布者,然后点击保存按钮。
答案 2 :(得分:1)
不要添加allAuthenticatedUsers
或allUsers
,这将使您的主题公开。您可能已经看到此警告
此资源是公共资源,任何互联网上的人都可以访问。 要删除公共访问权限,请删除“ allUsers”和“ allAuthenticatedUsers” 来自资源成员。
相反,添加gmail-api-push@system.gserviceaccount.com
。这将起作用。
参考:https://developers.google.com/gmail/api/guides/push#grant_publish_rights_on_your_topic