Errores de actualización de OAuth2 API de Google Drive en tiempo real

Durante los últimos dos días he estado viendo algunos problemas cada vez más problemáticos con una aplicación en tiempo real de larga ejecución. He recorrido los pasos a continuación y el fragmento de código en la parte inferior contiene información de depuración adicional de la aplicación.

Cuando la página se abre por primera vez, solicita con éxito un token OAuth y carga el documento en tiempo real [A]. Después de 50 minutos (10 minutos antes de que caduque el token), vuelve a solicitar un nuevo token OAuth con éxito [B]. Después de que el primer token haya caducado, la conexión actualmente abierta recibe un error no autorizado 401 y requiere un nuevo touth [C]. Esto en sí mismo parece un problema, ya que debería haberse actualizado para utilizar el nuevo token válido de [B].

Sin embargo, la aplicación aún debe ser resistente a un error como este que ocurre, por lo que se maneja cerrando y volviendo a abrir el documento [D] y obteniendo otro token OAuth nuevo. Desafortunadamente, en este punto, la API en tiempo real se encuentra en un bucle infinito y obtiene errores para access_token [E].

Todos los tokens de OAuth se solicitan utilizando gapi.auth.authorize con los mismos ámbitos y sin llamada a setToken. Anteriormente intenté usar setToken, pero eso tenía exactamente los mismos problemas.

Preguntas reales ¿Cuál es la forma correcta de lidiar con la actualización del token de OAuth para la API en tiempo real? ¿Cómo puedo evitar los errores repetidos internos de las API de la unidad al cerrar y volver a abrir un documento?

[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 

¡Gracias!

Respuestas a la pregunta(1)

Su respuesta a la pregunta