2016-08-14 3 views
0

현재 Google 스프레드 시트에서 Google 스프레드 시트 v4 API를 사용하여 행을 삭제하려고합니다.(Android/Java) Google 스프레드 시트 v4 isUserRecoverableError 상태 : NEED_PERMISSION

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 

, 나는 이미 포함 권한의 범위를 표시 한 드라이브 및 스프레드 시트. 여기

오류의 사진이다
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; 
} 

이 안드로이드 빠른 의해 제공된 하나 이외에 선서 증명서의 일종 ... 자바 빠른에서 enter image description here

그 포함시켜야합니까? 를 얻을 수

전략 : 안드로이드 응용 프로그램과 시트를 관리하는 관련없는 하나의 문제가 있으므로

+1

범위 외에 유효한 oauth 자격 증명을 포함하고 있습니까? (또한 by, 시작 범위가 포함되며 끝 범위는 배타적입니다. 따라서 [14,14]을 삭제하라는 요청은 아무 것도 삭제하지 않게됩니다. 14 번 행을 삭제하려면 [14,15]을 입력하십시오.) –

+0

답장을 보내 주셔서 감사합니다. 나머지 코드는 간단히 샘플 빠른 시작입니다 ... mCredential = GoogleAccountCredential.usingOAuth2 ( getApplicationContext(), Arrays.asList (SCOPES)) .setBackOff (새로운 ExponentialBackOff()); 다른 유효한 맹세 증명서를 포함시키는 방법에 대해 잘 모르겠습니다 ... API 키가 필요합니까? – LinearM

답변

1

, 발생한 에러가 불충분 한 인증 범위에 기인한다. Authorizing requests with OAuth 2.0에 명시된대로 Google 스프레드 시트 API에 필요한 OAuth 2.0 범위 정보를 확인하려고 할 수 있습니다.

비공개 사용자 데이터에 대한 Google 스프레드 시트 API에 대한 요청은 인증 된 사용자의 승인을 받아야합니다. 마찬가지로 애플리케이션이 스프레드 시트를 만들거나 메타 데이터를 조작해야하는 경우 애플리케이션은 Google 드라이브 API 범위를 요청해야합니다.

또한이 SO 게시물에 제공된 403 Forbidden error when accessing Google Drive API downloadURL 해결책은 오류 코드 403과 관련하여 도움이 될 수 있습니다.

0

, 여기에 이해하는 나에게 몇 시간이 걸렸다 처음부터 추가 OATH 2.0을 요청하는 방법입니다 바로 추가 승인 ... https://developers.google.com/identity/protocols/OAuth2InstalledApp#libraries 도 :

이러한 요청의 모든 enter image description here는 AsyncTask를 내 같은 HttpURLConnection의 ... 일부 수입으로 처리 할 수 ​​있습니다.

범위의 목록은

... 주어진 JSON 응답으로부터 기준 https://developers.google.com/sheets/guides/authorizing

1

범위가 충분하지 않은 저장된 자격 증명을로드하는 경우 문제가 발생할 수 있으며 저장된 자격 증명을 삭제하고 다시 액세스 권한을 부여해야합니다.

코드는 읽기 전용 범위를 요청하는 Java quickstart에서 채택 된 것으로 보입니다. 쓰기 작업에 해당 범위를 사용하려고하면이 오류가 발생하여 실패합니다.

관련 문제