无法通过GCM为Chrome应用发送通知,说“权限不足”

时间:2014-07-12 08:49:38

标签: google-chrome google-chrome-extension google-oauth google-cloud-messaging google-chrome-app

以下是我遵循的完整步骤:

  • 在Google Dev Console上注册了一个应用,为Google+ APIGoogle Cloud Messaging for Chrome启用了API。
  • 在凭据下,创建了一个类型为Web Application的新客户端。
  • 将重定向uri设置回我的服务器(在我的VPS上运行)。现在我有Client IDClient Secret
  • 使用此Client IDClient 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 tokenchannel 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上签名的电子邮件是相同的,如果这很重要。

1 个答案:

答案 0 :(得分:0)

引用我即将出版的书,“如果您正在努力处理客户端ID,客户端机密,重定向URI,刷新令牌和访问令牌,那么您的API就会错误。”使用适用于Android的Google Cloud Messaging。不要像使用旧的pushMessaging API那样打开Goog​​le Cloud Messaging for Chrome。您想使用较新的GCM API。 GCM API doc有一些指向其他文档的链接,必须仔细阅读,并且必须严格遵循说明。幸运的是,与旧的pushMessaging API相比,GCM API的设置和使用大约容易1000倍。

我不知道Google的示例在多大程度上已更新,即使对于那些已经更新的示例,该示例中使用的术语也可能已过时。此处发布了另一个问题,可能来自您,其中示例将app键与API密钥混淆。这是一团糟。