- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在使用 Google Sheets API 将 Google Docs 中的 Google 电子表格连接到我的 Android 应用程序。
我想连接一个公共(public)电子表格作为我的应用程序的数据库。我想知道如何在没有 OAuth 的情况下执行此操作。我只希望拥有该应用程序的人能够访问/读取数据库。
我想知道如何做到这一点?
我已按照 Google Spreadsheet API 页面中的说明进行操作。
此外,以下 URL 如何帮助我访问我的公共(public) google 电子表格?以下 URL(取自 google sheets api 页面)
https://spreadsheets.google.com/feeds/worksheets/key/private/full
我的公开 Google 电子表格:here
最佳答案
更新:这实际上需要在 Google Drive API 控制台中设置 OAuth token ,其中包含用于签署应用程序的 key 指纹和应用程序包名称。
可以在没有任何生成的 OAuth token 或凭据的情况下使用手机用户的 Google 帐户,这可能会通过任何阻止访问电子表格的授权障碍:
首先,设置登录客户端:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope("https://www.googleapis.com/auth/spreadsheets"))
.requestEmail()
.build();
googleSignInClient = GoogleSignIn.getClient(this, gso);
如果用户尚未登录,则提示用户登录(在用户已登录时提示登录将导致取消错误):
if (GoogleSignIn.getLastSignedInAccount(this) == null) {
startActivityForResult(googleSignInClient.getSignInIntent(), RC_SIGN_IN);
} else {
// use the already signed in account
Account account = GoogleSignIn.getLastSignedInAccount(this).getAccount();
}
如果系统提示用户登录,则在该 Activity 完成后:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == RC_SIGN_IN) {
try {
Account account = GoogleSignIn.getSignedInAccountFromIntent(data).getResult(ApiException.class).getAccount();
} catch (ApiException e) {
Log.w("MyActivity", "signInResult: failed code=" + e.getStatusCode() + ", reason: " + GoogleSignInStatusCodes.getStatusCodeString(e.getStatusCode()), e);
}
}
}
然后在没有任何特殊 OAuth token 的情况下使用用户帐户使用工作表 API:
GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(context, Collections.singleton("https://www.googleapis.com/auth/spreadsheets"));
credential.setSelectedAccount(account);
Sheets sheetsService = new Sheets.Builder(AndroidHttp.newCompatibleTransport(), JacksonFactory.getDefaultInstance(), credential).build();
Spreadsheet response = null;
try {
response = sheetsService.spreadsheets().get("insert spreadsheet ID here").setRanges(Arrays.asList("'sheet name here'!A2:G30"))
.setFields("sheets.data.rowData.values.effectiveValue").execute();
} catch (UserRecoverableAuthIOException ex) {
context.startActivity(ex.getIntent());
} catch (IOException e) {
Log.e(CLASS_NAME, "failure to get spreadsheet: " + e.getMessage(), e);
}
使用用户的 OAuth 而不是生成任何 token 访问 Google 表格的完整项目在此处:https://github.com/stephenkittelson/interviewsetter
关于android - 如何在没有 OAuth 的情况下从 Android 应用程序访问谷歌电子表格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29968907/
我是一名优秀的程序员,十分优秀!