Zar*_*wan 5 java android google-api google-sheets google-api-client
我正在开发一个Android应用,并按照以下教程添加了Google登录功能:https://developers.google.com/identity/sign-in/android/sign-in
现在用户已登录,我希望能够读取和写入他们的Google Spreadsheets.我查看了电子表格API并告诉您使用OAuth授权请求:https://developers.google.com/google-apps/spreadsheets/?hl = zh- CN
从登录页面教程:
Google登录按钮可对用户进行身份验证并管理OAuth 2.0流程,从而简化您与Google API的集成.
我正在尝试使用Google登录页面进行授权.我现在可以使用GoogleApiClient成功登录和退出我的Google帐户,因此我尝试添加以下代码来访问我在用户登录时调用的电子表格:
private class RetrieveFeedTask extends AsyncTask<String, Void, Void> {
@Override
protected Void doInBackground(String... urls) {
SpreadsheetService service = new SpreadsheetService("MySpreadsheetIntegration-v1");
try {
URL SPREADSHEET_FEED_URL = new URL(urls[0]);
SpreadsheetFeed feed = service.getFeed(SPREADSHEET_FEED_URL, SpreadsheetFeed.class);
List<SpreadsheetEntry> spreadsheets = feed.getEntries();
for (SpreadsheetEntry spreadsheet : spreadsheets) {
System.out.println(spreadsheet.getTitle().getPlainText());
}
} catch (ServiceException | IOException e) {
e.printStackTrace();
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我用这行称呼它:
new RetrieveFeedTask().execute("https://spreadsheets.google.com/feeds/spreadsheets/private/full");
Run Code Online (Sandbox Code Playgroud)
但是在service.getFeed调用上我收到以下错误:
com.google.gdata.util.ParseException: Unrecognized content type:application/binary
at com.google.gdata.client.Service.parseResponseData(Service.java:2136)
at com.google.gdata.client.Service.parseResponseData(Service.java:2098)
at com.google.gdata.client.Service.getFeed(Service.java:1136)
at com.google.gdata.client.Service.getFeed(Service.java:998)
at com.google.gdata.client.GoogleService.getFeed(GoogleService.java:645)
at com.google.gdata.client.Service.getFeed(Service.java:1017)
at com.zarwanhashem.ideatrackr.MainActivity$RetrieveFeedTask.doInBackground(MainActivity.java:320)
at com.zarwanhashem.ideatrackr.MainActivity$RetrieveFeedTask.doInBackground(MainActivity.java:312)
at android.os.AsyncTask$2.call(AsyncTask.java:292)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:818)
Run Code Online (Sandbox Code Playgroud)
我通过查看过去的问题找到的解决方案不起作用.其中一个是在调用之前做service.setUserCredentials(用户,密码),但我不知道如何获取该信息,因为我没有亲自实现OAuth部分.
如何解决此错误并使用google登录页面作为我的身份验证?
首先,我建议设置包含访问令牌的授权标头。
String accountname = Plus.AccountApi.getAccountName(mGoogleApiClient);
String scope = "oauth2:" + Scopes.PLUS_LOGIN + " " + "https://spreadsheets.google.com/feeds"; // add more scopes here
String accessToken = GoogleAuthUtil.getToken(context, accountname, scope);
service.setHeader("Authorization", "Bearer " + accessToken);
Run Code Online (Sandbox Code Playgroud)
另请注意,如果您想创建新工作表,则需要添加更多范围:
此外,如果应用程序需要创建电子表格或以其他方式操作其元数据,则该应用程序还必须请求 Google Drive API 范围;有关可用范围的信息,请参阅 Google Drive API 文档中的选择身份验证范围。
另一件要尝试的事情是使用 setOAuth2Credentials 方法,如下所述,无耻地从Create Spreadsheet using Google Spreadsheet API in Google Drive in Java 中窃取。
HttpTransport httpTransport = new NetHttpTransport();
JacksonFactory jsonFactory = new JacksonFactory();
String [] scopesArray= {"https://spreadsheets.google.com/feeds", "https://docs.google.com/feeds"}; // add more scopes here
final List SCOPES = Arrays.asList(scopesArray);
GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(httpTransport)
.setJsonFactory(jsonFactory)
.setServiceAccountId(SERVICE_ACCOUNT_EMAIL)
.setServiceAccountScopes(SCOPES)
.setServiceAccountPrivateKeyFromP12File(SERVICE_ACCOUNT_PKCS12_FILE)
.build();
SpreadsheetService service = new SpreadsheetService("MySpreadsheetIntegration-v1");
service.setOAuth2Credentials(credential);
Run Code Online (Sandbox Code Playgroud)
其他参考: https://developers.google.com/google-apps/spreadsheets/authorize https://developers.google.com/drive/web/scopes https://developers.google.com/android/reference/com /google/android/gms/common/api/范围
| 归档时间: |
|
| 查看次数: |
1077 次 |
| 最近记录: |