来自Chrome扩展程序的Google Calendar API HTTP请求

时间:2017-06-26 20:35:05

标签: google-chrome-extension google-calendar-api

我在chrome扩展程序中使用react-chrome-redux堆栈。 我已经尝试过Calendar API中的Javascript / Node.js快速入门,但它们无法正常工作。

所以现在我正在尝试通过Chrome Identity API检索oAuth2令牌,然后发出HTTP请求来获取我的数据。

的manifest.json

"oauth2": {
    "client_id": "CLIENT_ID.apps.googleusercontent.com",
    "scopes": [
      "https://www.googleapis.com/auth/calendar",
      "https://www.googleapis.com/auth/calendar.readonly"
    ]
  },
  "key": APP_KEY}

HTTP请求

chrome.identity.getAuthToken({ 'interactive': false }, function(token) {
  var init = { 
    'method' : 'GET',
    'async'  : true,
    'headers': {
      'Authorization' : 'Bearer ' + token,
      'Content-Type': 'application/json'
    },
    'contentType': 'json'
  };

  fetch('https://www.googleapis.com/calendar/v3/calendars/public/events', init)
  .then((response) => response.json()) // Transform the data into json
  .then(function(data) {
      console.log(data);
    })
})

我设法从oAuth2令牌中获取一长串字符,但是当我尝试发出HTTP请求时,我收到404状态错误。

我在Stack Overflow上找了很长时间,但大多数问题都没有得到很好的解答,似乎没有一种简单的方法可以使用Chrome扩展中的API。

我真的希望有人可以帮助我,谢谢!

1 个答案:

答案 0 :(得分:0)

@furydevoid想通了,

原来,默认日历关键字为“主要”而不是“公开”

所以现在我正在为HTTP请求执行此操作:

  const headers = new Headers({
      'Authorization' : 'Bearer ' + token,
      'Content-Type': 'application/json'
  })

  const queryParams = { headers };

  fetch('https://www.googleapis.com/calendar/v3/calendars/primary/events', queryParams)
  .then((response) => response.json()) // Transform the data into json
  .then(function(data) {
      console.log(data);
    })
  })

对于尝试使用Chrome扩展程序中的Google Calendar API的任何人,

  1. Node.js快速入门并没有真正起作用,因为Chrome扩展程序实际上没有“后端”来执行脚本(至少对于我尝试的内容)
  2. oAuth舞会有点不稳定,因为你不能简单地将用户重定向到Chrome:// newtab,因为他们已经授予你权限,因为Chrome:// newtab并不是真正被认可为重定向到的安全网站
  3. 无论如何,这是解决方案:

    1. 使用Chrome的身份API检索oAuth2令牌:https://developer.chrome.com/apps/app_identity
    2. 使用如上所示的直接HTTP请求。
    3. 一切顺利!感谢所有帮助过我的人!