2016-08-14 19 views
0

現在、GoogleスプレッドシートからGoogleスプレッドシートを削除するには、Googleスプレッドシートを使用してください。ここで(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 

私の他のクラスファイルでは、私はすでに含めた権限の範囲を示してきましたドライブとスプレッドシート。ここで

は、エラーの絵です:Javaのクイックスタートで enter image description here

...

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; 
} 

が、これはそのアンドロイドクイックスタートが提供するものに加えて、宣誓資格の一種であります私は含める必要がありますか?

+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のスコープも要求する必要があります。

さらに、エラーコード403に関する403 Forbidden error when accessing Google Drive API downloadURLのこの解決策に記載されている解決策も役立ちます。

0

理解するために私に数時間を要したアンドロイドアプリケーションで管理シートに関連する1つの質問、ここでゼロから追加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から適合しているようです。書き込み操作にそのスコープを使用しようとすると、このエラーで失敗します。

関連する問題