Получение ошибки 401 Unauthorized сразу после установки приложения Google Marketplace, но затем работает

Недавно у меня возникла проблема, когда пользователи установили мое приложение Google из Google Apps Marketplace.

Как только приложение установлено и пользователь нажимает кнопку «Запустить приложение», чтобы перенаправиться на мой сайт, я проверяю, является ли пользователь администратором. Для этого требуется подключение к Google Directory API с использованием OAuth2.

Если я нажму кнопку «Запустить приложение», как только оно появится, я получу ответ «401 Unauthorized» от Google при попытке подтвердить пользователя. Но если я подожду пару секунд, прежде чем нажму, все работает нормально.

Я попытался решить эту проблему, добавив задержку в 5 секунд и повторную попытку, если первая попытка не удалась. Это работает во многих случаях, но мне все же удалось воспроизвести ошибку.

Я мог бы просто подождать еще 5 секунд и попробовать еще раз, но это, конечно, не идеальное решение. Есть ли лучший способ сделать это?

Я использую версию 1.20.0 java-клиента Google API.

Это трассировка стека, которую я получаю:

com.google.api.client.auth.oauth2.TokenResponseException: 401 Unauthorized
    at com.google.api.client.auth.oauth2.TokenResponseException.from(TokenResponseException.java:105) ~[google-oauth-client-1.20.0.jar:1.20.0]
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:287) ~[google-oauth-client-1.20.0.jar:1.20.0]
    at com.google.api.client.auth.oauth2.TokenRequest.execute(TokenRequest.java:307) ~[google-oauth-client-1.20.0.jar:1.20.0]
    at com.google.api.client.googleapis.auth.oauth2.GoogleCredential.executeRefreshToken(GoogleCredential.java:384) ~[google-api-client-1.20.0.jar:1.20.0]
    at com.google.api.client.auth.oauth2.Credential.refreshToken(Credential.java:489) ~[google-oauth-client-1.20.0.jar:1.20.0]
    at ... my code

Как видите, я запускаю метод refreshToken(). Я делаю это, чтобы убедиться, что соединение будет работать.




Ответы (1)


Это отставание кажется довольно распространенным явлением, и это не связано с какой-либо ошибкой с вашей стороны. Лучший обходной путь, вероятно, заключается в том, чтобы в вашем приложении была некоторая логика повторных попыток, чтобы вы могли справиться с этой ситуацией.

person Eric Koleda    schedule 31.07.2015
comment
Спасибо, Эрик. Добавил еще несколько повторных попыток, и, кажется, все работает нормально. - person popstr; 04.08.2015