Как получить доступ к пользовательскому календарю Google из React Native (expo)? - PullRequest
0 голосов
/ 17 января 2019

Я пользуюсь Expo и хочу добавить доступ к своему приложению пользователям, имеющим учетную запись Google. Затем мне нужно получить информацию о Google календарях пользователя, который входит в мое приложение.

Я реализую функцию входа в систему, используя: Expo.Google.logInAsync(options) (https://docs.expo.io/versions/latest/sdk/google). Моя область видимости выглядит так:

scopes: ['https://www.googleapis.com/auth/userinfo.email',
         'https://www.googleapis.com/auth/userinfo.profile',
         'https://www.googleapis.com/auth/calendar.readonly']

Когда кто-то пытается войти в мое приложение, он запрашивает разрешение на просмотр списка календарей. В ответ получаю:

Object {
    "accessToken": "a",
    "idToken": "b",
    "refreshToken": "c",
    "serverAuthCode": "d",
    "type": "success",
    "user": Object {
        "email": "e",
        "familyName": "f",
        "givenName": "g",
        "id": "h",
        "name": "i",
        "photoUrl": "j",
    },
}

Я получил данные о пользователе, но у меня нет данных о его календарях. Я пытался получить данные о календарях (https://developers.google.com/calendar/v3/reference/calendarList) с помощью этой функции:

getUsersCalendarList = async (accessToken) => {
    let calendarsList = await fetch('https://www.googleapis.com/calenda/v3/users/me/calendarList', {
    headers: { Authorization: `Bearer ${accessToken}`},
    });
    return calendarsList;
}

В ответ я получил:

 Response {
       "_bodyBlob": Blob {
         "_data": Object {
           "blobId": "67b8b161-690f-4ff6-9cee-1dce12840ebd",
           "offset": 0,
           "size": 994,
         },
       },
       "_bodyInit": Blob {
         "_data": Object {
           "blobId": "67b8b161-690f-4ff6-9cee-1dce12840ebd",
           "offset": 0,
           "size": 994,
         },
       },
       "headers": Headers {
         "map": Object {
           "alt-svc": Array [
             "quic=\":443\"; ma=2592000; v=\"44,43,39,35\"",
           ],
           "cache-control": Array [
             "public, max-age=0",
           ],
           "content-type": Array [
             "application/json; charset=UTF-8",
           ],
           "date": Array [
             "Thu, 17 Jan 2019 11:30:32 GMT",
           ],
           "expires": Array [
             "Thu, 17 Jan 2019 11:30:32 GMT",
           ],
           "server": Array [
             "GSE",
           ],
           "vary": Array [
             "X-Origin",
           ],
           "x-content-type-options": Array [
             "nosniff",
           ],
           "x-frame-options": Array [
             "SAMEORIGIN",
           ],
           "x-xss-protection": Array [
             "1; mode=block",
           ],
         },
       },
       "ok": false,
       "status": 403,
       "statusText": undefined,
       "type": "default",
       "url": "https://www.googleapis.com/calendar/v3/users/me/calendarList",
     }

Как получить список пользовательских календарей Google в Expo?

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Я нахожу решение здесь: React-Native выборка JSON с URL . Нужно использовать функцию json() на возвращаемом объекте. getUsersCalendarList Шульде выглядит так:

getUsersCalendarList = async (accessToken) => {
    let calendarsList = await fetch('https://www.googleapis.com/calenda/v3/users/me/calendarList', {
    headers: { Authorization: `Bearer ${accessToken}`},
    });
    return calendarsList.json();
}
0 голосов
/ 17 января 2019

Вы также можете добавить токен доступа в качестве параметра в запрос.

https://www.googleapis.com/calenda/v3/users/me/calendarList?access_token={token}

Я не являюсь реагирующим разработчиком, поэтому не совсем уверен, как исправить свой заголовок.Смотрится нормально.

...