Błędy odświeżania interfejsu API Dysku Google w czasie rzeczywistym OAuth2

W ciągu ostatnich kilku dni obserwowałem coraz bardziej problematyczne problemy z długim uruchomieniem aplikacji w czasie rzeczywistym. Wykonałem poniższe kroki, a urywek kodu na dole zawiera dodatkowe informacje debugowania z aplikacji.

Gdy strona otwiera się po raz pierwszy, pomyślnie żąda tokena OAuth i ładuje dokument w czasie rzeczywistym [A]. Po 50 minutach (10 minut przed wygaśnięciem tokena) ponownie żąda nowego tokena OAuth [B]. Po wygaśnięciu pierwszego tokena aktualnie otwarte połączenie otrzymuje 401 nieautoryzowany błąd i wymaga nowego tokena oauth [C]. Samo to wydaje się stanowić problem, ponieważ powinien był zaktualizować się, aby użyć nowego poprawnego tokena z [B].

Jednak aplikacja powinna nadal być odporna na taki błąd, więc jest obsługiwana przez zamknięcie i ponowne otwarcie dokumentu [D] i uzyskanie kolejnego nowego tokena OAuth. Niestety w tym momencie API czasu rzeczywistego znajduje się w nieskończonej pętli, pobierając błędy dla tokenu access_token [E].

Wszystkie tokeny OAuth są wymagane przy użyciu gapi.auth.authorize z tymi samymi zakresami i bez wywołania setToken. Poprzednio próbowałem użyć setToken, ale to miało dokładnie te same problemy.

Rzeczywiste pytania Jaki jest właściwy sposób radzenia sobie z odświeżaniem tokena OAuth dla API czasu rzeczywistego? Jak mogę zapobiec powtarzającym się awariom wewnętrznym interfejsów API dysku podczas zamykania i ponownego otwierania dokumentu?

[A]
_aa: "1"
access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXz9AYBkyympssqI"
client_id: "XXXXXXXXXXXXXXXX.apps.googleusercontent.com"
cookie_policy: undefined
expires_at: "1373610287"
expires_in: "3600"
g_user_cookie_policy: undefined
issued_at: "1373606687"
response_type: "token"
scope: Array[2]
state: ""
token_type: "Bearer"

[B]
_aa: "1"
access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXV2kzG4EMUppi"
client_id: "XXXXXXXXXXXXXX.apps.googleusercontent.com"
cookie_policy: undefined
expires_at: "1373613288"
expires_in: "3600"
g_user_cookie_policy: undefined
issued_at: "1373609688"
response_type: "token"
scope: Array[2]
state: ""
token_type: "Bearer"

[C]
GET https://drive.google.com/otservice/bind?id=1B-XXXXXXXXXXXXXXXXXXXXX_nRizfqmT…&RID=rpc&SID=XXXXXXXXXXXXXXXXX&CI=0&AID=221&TYPE=xmlhttp&zx=ns6e5dr7rf4&t=1 401 (Unauthorized)

Drive Realtime API Error: token_refresh_required: The OAuth token must be refreshed. 

[D]
[Close Realtime Document]
[Open Realtime Document]

_aa: "1"
access_token: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXMHzJXm2dF-"
client_id: "XXXXXXXXXXXXXX.apps.googleusercontent.com"
cookie_policy: undefined
expires_at: "1373613918"
expires_in: "3600"
g_user_cookie_policy: undefined
issued_at: "1373610318"
response_type: "token"
scope: Array[2]
state: ""
token_type: "Bearer"

[E]
[x100] Uncaught TypeError: Cannot read property 'o' of null 

Dzięki!

questionAnswers(1)

yourAnswerToTheQuestion