UPDATE2: Я пересмотрел эту проблему и решил проблему, тщательно следуя приведенным ниже документам doco. Но во-первых, для тех, кто борется с этим, вы в хорошей компании. Существует так много версий doco от Google, что это сбивает с толку! Включите в свой html файл platform.js или client.js? Вы загружаете gapi.auth или gapi.auth2? Вы используете gapi.auth2.render или gapi.auth.authorize, или gapi.auth2.init и т.д.
Способ, которым возвращает access_token (начиная с этой даты в статье), приведен ниже. Мне удалось получить эту работу, тщательно следуя руководству и ссылке с помощью platform.js. Затем динамически загружаются другие библиотеки, такие как client.js, используя gapi.load( "диск", обратный вызов).
https://developers.google.com/identity/sign-in/web/listeners https://developers.google.com/identity/sign-in/web/reference
==== ОРИГИНАЛЬНЫЙ ВЫПУСК ДЛЯ ПРОЦВЕТАНИЯ ====
ОБНОВЛЕНИЕ 1: Я обновил образец кода, чтобы выполнить рекурсивный поиск объекта googleUser. По крайней мере, это не должно ломаться в последующей библиотеке.
Ниже приведен фрагмент кода для обработки проблемы, когда access_token в объекте Google gapi.auth2.AuthResponse не находится на верхнем уровне... он скрыт: (в глубине объекта!
Так что это можно восстановить, но не на верхнем уровне!!?? Я заметил, что это проблема синхронизации... Когда приложение выполняется некоторое время при последующих проверках, оно содержит токен доступа на верхнем уровне!
var authResponse = _.googleUser.getAuthResponse();
_.id_token = authResponse.id_token; // Always exists
// access_token should also be a param of authResponse
if (authResponse.access_token) {
debug("Worked this time?");
_.access_token = authResponse.access_token;
} else {
// !!! Internal object access !!!
debug("Attempt to get access token from base object.");
_.access_token = _.objRecursiveSearch("access_token", _.googleUser);
if (_.access_token) {
debug("Access token wasn't on authResponse but was on the base object, WTF?");
} else {
debug("Unable to retrieve access token.");
return false;
}
}
_.objRecursiveSearch = function(_for, _in) {
var r;
for (var p in _in) {
if (p === _for) {
return _in[p];
}
if (typeof _in[p] === 'object') {
if ((r = _.objRecursiveSearch(_for, _in[p])) !== null) {
return r;
}
}
}
return null;
}
Я предполагаю, что getAuthResponse каким-то образом обеспечивает обратный вызов, когда он готов, но я не вижу, где в API. https://developers.google.com/identity/sign-in/web/reference