以下是我遵循的完整步骤:
Google+ API
和Google Cloud Messaging for Chrome
启用了API。Web Application
的新客户端。 Client ID
和Client Secret
Client ID
和Client Secret
获取refresh token
(通过发送access_type=offline
)使用此refresh token
通过在我的本地计算机上运行以下来获得新的access token
:
curl -s https://accounts.google.com/o/oauth2/token -d "client_secret=<your client secret here>&grant_type=refresh_token&refresh_token=<your refresh token here>&client_id=<your client id here>" | grep "access_token" | awk -F\" '{print $4}'
我在我的机器上安装了official sample app,启动后,它显示了我的频道ID。现在,我尝试使用先前获得的access token
和channel id
curl -s -H "Authorization: Bearer <ACCESS TOKEN HERE>" -H "Content-Type: application/json" https://www.googleapis.com/gcm_for_chrome/v1/messages -d "{'channelId': '<CHANNEL ID HERE>', 'subchannelId': '0', 'payload': 'Hello World'}"
我收到了以下回复:
{
"error": {
"errors": [
{
"domain": "global",
"reason": "insufficientPermissions",
"message": "Insufficient Permission"
}
],
"code": 403,
"message": "Insufficient Permission"
}
}
为什么这样?我该如何解决?我没有对示例chrome应用程序进行任何更改。如果我不得不提及我的client id
,我会仔细查找说明和代码,但似乎不是必需的。那么,这是否意味着我可以向任何人发送通知,如果我有他们的channel id
?
我用来创建新应用的电子邮件ID以及我在Chrome上签名的电子邮件是相同的,如果这很重要。
答案 0 :(得分:0)
引用我即将出版的书,“如果您正在努力处理客户端ID,客户端机密,重定向URI,刷新令牌和访问令牌,那么您的API就会错误。”使用适用于Android的Google Cloud Messaging。不要像使用旧的pushMessaging API那样打开Google Cloud Messaging for Chrome。您想使用较新的GCM API。 GCM API doc有一些指向其他文档的链接,必须仔细阅读,并且必须严格遵循说明。幸运的是,与旧的pushMessaging API相比,GCM API的设置和使用大约容易1000倍。
我不知道Google的示例在多大程度上已更新,即使对于那些已经更新的示例,该示例中使用的术语也可能已过时。此处发布了另一个问题,可能来自您,其中示例将app键与API密钥混淆。这是一团糟。