Como obter o token off-line e atualizar o token e a atualização automática do acesso à API do Google
Estou desenvolvendo um aplicativo que acessa as APIs do Google (a partir da API do Google Agenda) usando o OAuth2 e as bibliotecas do cliente do Google para isso (no Appengine e no GWT BTW).
Eu implementei meuOAuth2Call
servlet de volta, estendendo o GoogleAbstractAppEngineAuthorizationCodeCallbackServlet
.
Eu tenho que trabalhar, tenho acesso e posso ver calendários, etc, mas tenho dois problemas:
1) Eu não recebo um token de atualização, apesar de solicitar explicitamente acesso off-line:
public static GoogleAuthorizationCodeFlow newFlow( String scope ) throws IOException {
GoogleAuthorizationCodeFlow.Builder builder = new GoogleAuthorizationCodeFlow.Builder(
HTTP_TRANSPORT,
JSON_FACTORY,
getClientSecrets(),
Collections.singleton( scope ) );
builder.setCredentialStore( new AppEngineCredentialStore() ).setAccessType("offline");
return builder.build();
}
2) Não consigo ver como definir a funcionalidade de atualização automática. Estas páginas descrevem os métodos:
Classe Credential.BuilderClasse CredentialStoreRefreshListenerMas não consigo ver onde adicionar o listener de atualização. Não existe tal método noGoogleAuthorizationCodeFlow.Builder
classe, ao contrário doCredential.Builder
classe
EDIT Depois de depurar o código mais, quando a credencial volta (noonSuccess()
método) parece ter umRefreshListener
set já ..... então talvez seja a sua por padrão, e meu único problema é que eu não estou recebendo umrefresh_token
, apesar de pedir por isso.
Talvez precise revisar as configurações no Console de APIs do Google também?