Anteriormente, este era nosso fluxo de uso GoogleSignInClient
para interagir com o serviço Google Drive.
Código legado obsoleto
// GoogleSignInClient.silentSignIn() -> GoogleSignInAccount -> Drive object
GoogleSignInClient googleSignInClient = buildGoogleSignInClient();
Task<GoogleSignInAccount> task = googleSignInClient.silentSignIn();
GoogleSignInAccount googleSignInAccount = task.getResult()
Drive drive = getDriveService(googleSignInAccount)
public static GoogleSignInClient buildGoogleSignInClient() {
GoogleSignInOptions signInOptions =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(GOOGLE_DRIVE_CLIENT_ID)
.requestEmail()
.requestScopes(new Scope(DriveScopes.DRIVE_APPDATA))
.build();
return GoogleSignIn.getClient(WeNoteApplication.instance(), signInOptions);
}
private static Drive getDriveService(GoogleSignInAccount googleSignInAccount) {
GoogleAccountCredential credential =
GoogleAccountCredential.usingOAuth2(
MyApplication.instance(), Collections.singleton(DriveScopes.DRIVE_APPDATA)
);
credential.setSelectedAccount(googleSignInAccount.getAccount());
Drive googleDriveService =
new Drive.Builder(
AndroidHttp.newCompatibleTransport(),
new GsonFactory(),
credential
)
.setApplicationName(APPLICATION_NAME)
.build();
return googleDriveService;
}
Agora, estamos tentando cumprir o prazo de descontinuação de GoogleSignInClient
- https://android-developers.googleblog.com/2024/09/streamlining-android-authentication-credential-manager-replaces-legacy-apis.html
Baseado em https://stackoverflow.com/a/78605090/72437
Parece que posso pular o uso da API do Credential Manager (autenticação) e ir diretamente para Authorization
a API (autorização)
https://developers.google.com/identity/authorization/android (autorização)
Mas qual é o substituto para o obsoleto googleSignInClient.silentSignIn
?
Com isso googleSignInClient.silentSignIn
, o usuário pode fazer login apenas uma vez e continuar usando o serviço do Google Drive sem expirar por um longo período de tempo.
Posso saber como podemos obter o equivalente usando Authorization
API?
Obrigado.
Você pode fazer uma das duas abordagens a seguir:
Presumo que você sabia dessas duas possibilidades e há algo mais que você quer realizar. O CredentialManager não tem o método "silentSignIn()", mas não acho que ele precise de um, pois ele permite uma interação sem prompt para usuários que retornam e, se não houver tal usuário, ele mostra a planilha inferior para fazer login do usuário.