(Android/Java) Google Sheets v4 isUserRecoverableСтатус ошибки: NEED_PERMISSION

В настоящее время я пытаюсь просто удалить строку из моей электронной таблицы Google, используя API Google Sheets v4.

Вот код, который я использую:

private void deleteRow()
{
    List<Request> requests = new ArrayList<>();

    DeleteDimensionRequest deleteDimensionRequest = new DeleteDimensionRequest();

    DimensionRange dimensionRange = new DimensionRange();
    dimensionRange.setStartIndex(14);
    dimensionRange.setEndIndex(15);

    deleteDimensionRequest.setRange(dimensionRange);

    requests.add(new Request()
            .setDeleteDimension(deleteDimensionRequest)
    );

    BatchUpdateSpreadsheetRequest batchUpdateRequest = new BatchUpdateSpreadsheetRequest()
            .setRequests(requests);

    try
    {
        mService.spreadsheets().batchUpdate("Spreadsheet_ID", batchUpdateRequest).execute();
    }
    catch(IOException e)
    {
        e.printStackTrace();
    }
}

Ошибка, которую эта функция дает мне:

08-14 15:47:10.818 26956-27285/com.xxx.xxxxx.xxxxxxxx         
W/GoogleAuthUtil: isUserRecoverableError status: NEED_PERMISSION

В другом моем файле класса я уже указал области разрешений, включая диск и электронные таблицы.

Вот изображение ошибки: введите здесь описание изображения

В кратком руководстве по Java...

    public static Credential authorize() throws IOException {
    // Load client secrets.
    InputStream in =
        SheetsQuickstart.class.getResourceAsStream("/client_secret.json");
    GoogleClientSecrets clientSecrets =
        GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow =
            new GoogleAuthorizationCodeFlow.Builder(
                    HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(DATA_STORE_FACTORY)
            .setAccessType("offline")
            .build();
    Credential credential = new AuthorizationCodeInstalledApp(
        flow, new LocalServerReceiver()).authorize("user");
    System.out.println(
            "Credentials saved to " + DATA_STORE_DIR.getAbsolutePath());
    return credential;
}

Это своего рода учетные данные присяги в дополнение к тому, что мне нужно включить в краткое руководство по Android?


person LinearM    schedule 14.08.2016    source источник
comment
Включаете ли вы действительные учетные данные oauth в дополнение к области действия? (Кроме того, начальный диапазон является инклюзивным, а конечный диапазон — эксклюзивным. Поэтому запрос на удаление [14,14) ничего не удалит. Если вы хотите удалить строку 14, вам нужно [14,15).)   -  person Sam Berlin    schedule 15.08.2016
comment
Спасибо за ваш ответ Сэм. Остальной код представляет собой просто пример быстрого запуска... mCredential = GoogleAccountCredential.usingOAuth2(getApplicationContext(), Arrays.asList(SCOPES)) .setBackOff(new ExponentialBackOff()); Я не знаю, как включить другие действительные учетные данные присяги... Нужен ли мне какой-то ключ API?   -  person LinearM    schedule 15.08.2016


Ответы (3)



Проблема, скорее всего, в том, что вы загружаете сохраненные учетные данные с недостаточным объемом, и вам необходимо удалить сохраненные учетные данные и снова авторизовать доступ.

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

person Eric Koleda    schedule 16.08.2016

Поскольку нет ни одного вопроса, связанного с управлением листами с помощью андроид-приложения, вот способ запросить дополнительный OATH 2.0 с нуля, на понимание которого у меня ушло несколько часов:

Стратегия получения правильной дополнительной авторизации... https://developers.google.com/identity/protocols/OAuth2InstalledApp#libraries Диаграмма: введите здесь описание изображения

Все эти запросы можно обработать с помощью некоторых импортов, таких как HttpUrlConnection... в AsyncTask.

Список областей... https://developers.google.com/sheets/guides/authorizing

person LinearM    schedule 16.08.2016