Событие входа API календаря Google oauth2 gapi.auth2.getAuthInstance (). IsSignedIn.listen () не запускается в Safari - PullRequest
0 голосов
/ 26 января 2020

В клиентской библиотеке Google есть метод gapi.auth2.getAuthInstance().isSignedIn.listen(callback), который вызывает указанную функцию обратного вызова при обнаружении изменения входа в систему. Все работает в Chrome и Firefox, но Safari не работает. В Safari появляется приглашение для входа, но при входе событие не срабатывает. Я попытался очистить кеш и инкогнито windows, но это кажется недостатком в поддержке браузера. Как я могу заставить это работать?

Runnable codepen .

Я не могу добавить исполняемый код здесь, так как API авторизован только для источника codepen (позже он будет отключен) , Соответствующий код проблемы находится в функции init().

<script src="https://apis.google.com/js/api.js" id="calendarScript"></script>
<input
  type="button"
  value="Create Calendar Event"
  onclick="addCalendarEvent()"
/>

сценарии:

  function addCalendarEvent() {
    var event = {
    summary: "Google I/O 2015",
    location: "800 Howard St., San Francisco, CA 94103",
    description: "A chance to hear more about Google's developer products.",
    start: {
      dateTime: "2020-01-28T09:00:00-07:00",
      timeZone: "America/Los_Angeles"
    },
    end: {
      dateTime: "2020-01-28T17:00:00-07:00",
      timeZone: "America/Los_Angeles"
    },
    recurrence: ["RRULE:FREQ=DAILY;COUNT=2"],
    attendees: [{ email: "example@example.com"}],
    reminders: {
      useDefault: false,
      overrides: [
        { method: "email", minutes: 24 * 60 },
        { method: "popup", minutes: 10 }
      ]
    }
  };
  window.googleCalendar.createEvent(event);
}

window.addEventListener("load", function() {
  let credentials = {
    scope:
      "https://www.googleapis.com/auth/calendar https://www.googleapis.com/auth/calendar.events",
    clientId:
      "755605534058-58cv119cklfht2hhqiq1pn46f8luhd4h.apps.googleusercontent.com",
    apiKey: "AIzaSyA9q3FmQhyPsbbhX3c6xlEFs4cq4ZI2qAk",
    discoveryDocs: [
      "https://www.googleapis.com/discovery/v1/apis/calendar/v3/rest"
    ]
  };
  window.googleCalendar = new googleCalendar(credentials);
});

class googleCalendar {
  constructor(credentials) {
    //load dependencies...
    this.gapi = gapi;
    this.gapi.load("client:auth2", init.bind(this));
    let cal = this;
    //create call stack...
    this.callStack = {};
    function init() {
      //authorize api access...
      this.gapi.client
        .init({
          apiKey: credentials.apiKey,
          clientId: credentials.clientId,
          scope: credentials.scope,
          discoveryDocs: credentials.discoveryDocs
        })
        .then(function() {
          cal.gapi.auth2.getAuthInstance().isSignedIn.listen(updateCallstack);
          function updateCallstack() {
            cal.callStack.func(cal.callStack.args);
          }
        });
    }
  }
  userAuthStatus() {
    if (!this.gapi.auth2.getAuthInstance().isSignedIn.get()) {
      this.gapi.auth2.getAuthInstance().signIn();
    }
    return this.gapi.auth2.getAuthInstance().isSignedIn.get();
  }
  createEvent(event) {
    if (this.userAuthStatus()) {
      let request = this.gapi.client.calendar.events.insert({
        calendarId: "primary",
        resource: event
      });
      request.execute(function(e) {
        alert("done");
        console.log(e);
      });
    } else {
      this.callStack.func = this.createEvent.bind(this);
      this.callStack.args = event
    }
  }
}
...