(Android/Java) Google Sheets v4 isUserRecoverableError 状态:NEED_PERMISSION
(Android/Java) Google Sheets v4 isUserRecoverableError status: NEED_PERMISSION
我目前正在尝试使用 Google Sheets v4 API 从我的 Google 电子表格中删除一行。
这是我使用的代码:
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
在我的另一个 class 文件中,我已经指明了权限范围,包括驱动器和电子表格。
错误图片如下:
在 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 快速入门提供的证书之外,这是一种宣誓证书吗?
由于没有一个与使用 android 应用程序管理工作表相关的问题,这里是从头开始请求额外的 OATH 2.0 的方法,我花了几个小时才理解:
获得正确额外授权的策略...
https://developers.google.com/identity/protocols/OAuth2InstalledApp#libraries
图:
所有这些请求都可以通过一些导入处理,例如 AsyncTask 中的 HttpUrlConnection...。
范围列表...
https://developers.google.com/sheets/guides/authorizing
根据给定的 JSON 响应,遇到错误是由于身份验证范围不足。您可以尝试检查 Authorizing requests with OAuth 2.0.
中给出的 Google 工作表 API 所需的 OAuth 2.0 范围信息
请注意,对 Google 工作表 API 的非 public 用户数据请求必须由经过身份验证的用户授权。同样,如果应用程序需要创建电子表格或以其他方式操作其元数据,则该应用程序还必须请求 Google Drive API 范围。
此外,此 SO post - 403 Forbidden error when accessing Google Drive API downloadURL 中关于错误代码 403 的解决方案也可能有所帮助。
问题可能是您加载了范围不足的存储凭据,您需要删除存储的凭据并再次授权访问。
您的代码似乎改编自 Java quickstart,它请求只读范围。尝试使用该范围进行写入操作会失败并出现此错误。
我目前正在尝试使用 Google Sheets v4 API 从我的 Google 电子表格中删除一行。
这是我使用的代码:
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
在我的另一个 class 文件中,我已经指明了权限范围,包括驱动器和电子表格。
错误图片如下:
在 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 快速入门提供的证书之外,这是一种宣誓证书吗?
由于没有一个与使用 android 应用程序管理工作表相关的问题,这里是从头开始请求额外的 OATH 2.0 的方法,我花了几个小时才理解:
获得正确额外授权的策略...
https://developers.google.com/identity/protocols/OAuth2InstalledApp#libraries
图:
所有这些请求都可以通过一些导入处理,例如 AsyncTask 中的 HttpUrlConnection...。
范围列表... https://developers.google.com/sheets/guides/authorizing
根据给定的 JSON 响应,遇到错误是由于身份验证范围不足。您可以尝试检查 Authorizing requests with OAuth 2.0.
中给出的 Google 工作表 API 所需的 OAuth 2.0 范围信息请注意,对 Google 工作表 API 的非 public 用户数据请求必须由经过身份验证的用户授权。同样,如果应用程序需要创建电子表格或以其他方式操作其元数据,则该应用程序还必须请求 Google Drive API 范围。
此外,此 SO post - 403 Forbidden error when accessing Google Drive API downloadURL 中关于错误代码 403 的解决方案也可能有所帮助。
问题可能是您加载了范围不足的存储凭据,您需要删除存储的凭据并再次授权访问。
您的代码似乎改编自 Java quickstart,它请求只读范围。尝试使用该范围进行写入操作会失败并出现此错误。