Поскольку Google не поддерживает API Android, я пытаюсь перейти на REST API.
Мое приложение использует Google Drive для сохранения данных пользователя.
У пользователя есть два варианта резервного копирования (вручную и по расписанию).
Пользователь выбирает учетную запись, и она сохраняется в приложении (электронная почта).
При необходимости приложение использует учетную запись для подключения к Google Диску и сохранения /удалить данные.
Чтобы выбрать учетную запись для использования приложения, используйте AccountPicker.
После выбора учетной записи приложение использует только учетную запись для подключения к Google Диску (см. кодниже).
Я хотел бы сохранить текущий механизм (пользователь выбирает учетную запись, и при необходимости приложение использует эту учетную запись для подключения к Google Drive).
Я посмотрел на образец программы и миграция документации, но не выяснили, как это сделать.
Кажется, что в примере приложения запрашивается учетная запись с выделенным действием ииспользует ретвынудили данные войти в Google Drive (не то поведение, которое мне нужно).
Я сделал некоторые изменения кода, но ничего не получилось (я получил ошибку Ошибка подключения к диску (12500) 12500: 12500: Ошибка при настройке учетной записи Google. ).См. Ниже измененный код.
Выход из кода
GoogleApiClient.Builder builder = new GoogleApiClient.Builder(context)
.addApi(Drive.API)
.setAccountName(accountName)
.addScope(Drive.SCOPE_FILE)
.addScope(Drive.SCOPE_APPFOLDER);
client = builder.build();
client.registerConnectionCallbacks(new GoogleApiClient.ConnectionCallbacks() {
@Override
public void onConnectionSuspended(int cause) {
}
@Override
public void onConnected(Bundle arg0) {
latch.countDown();
}
});
client.registerConnectionFailedListener(new GoogleApiClient.OnConnectionFailedListener() {
@Override
public void onConnectionFailed(ConnectionResult result) {
error = new DriveConnectException();
if (result.hasResolution()) {
if (activity != null) {
try {
result.startResolutionForResult(activity, requestCode);
error = new InResolutionException();
} catch (IntentSender.SendIntentException e) {
}
}
}
latch.countDown();
}
});
client.connect();
try {
latch.await();
} catch (Exception ignored) {
}
if (client.isConnected()) {
// do some work
} else {
// report error
}
Измененный код
GoogleSignInOptions signInOptions =
new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.setAccountName(accountName)
.requestScopes(new Scope(DriveScopes.DRIVE))
.build();
client = GoogleSignIn.getClient(context, signInOptions);
Task<GoogleSignInAccount> task = client.silentSignIn();
if (task.isSuccessful()) {
signInAccount = task.getResult();
} else {
final CountDownLatch latch = new CountDownLatch(1);
task.addOnCompleteListener(new OnCompleteListener<GoogleSignInAccount>() {
@Override
public void onComplete(@NonNull Task<GoogleSignInAccount> task) {
try {
signInAccount = task.getResult(ApiException.class);
} catch (ApiException e) {
// I always ends up here.
}
latch.countDown();
}
});
try {
latch.await();
} catch (Exception ignored) {
}
}