Google API - Android BigQuery 客户端的应用级授权
Posted
技术标签:
【中文标题】Google API - Android BigQuery 客户端的应用级授权【英文标题】:Google APIs - App-Level Authorization for Android BigQuery Client 【发布时间】:2014-07-28 20:42:07 【问题描述】:我在 Google API 中设置了一个项目以用于 BigQuery。我已生成客户端 ID 凭据,并且正在使用适用于 android 的 BigQuery 客户端。
GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(getApplicationContext(), Collections.singleton(BigqueryScopes.BIGQUERY));
...Display User Picker...
credential.setSelectedAccountName("account.selected.by.user@gmail.com");
Bigquery bigQuery = new Bigquery.Builder(AndroidHttp.newCompatibleTransport(), GsonFactory.getDefaultInstance(), credential)
.setApplicationName("My-App/1.0").build()
...use bigQuery to run a job or do whatever...
我们可以成功连接到 BigQuery,但仅限于项目成员帐户,如 https://console.developers.google.com/project/apps~my-project-name/permissions。使用其他帐户会导致 BigQuery 客户端出现 403 Access Denied JSON 错误。
该应用程序将部署给我们提前不知道他们帐户的任意数量的用户。此工作流程不支持这一点,除非我遗漏了一些技巧。
开始觉得我们需要设置 App Engine 应用,使用 GoogleAccountCredential.usingAudience,并将网络服务设置为 BigQuery 的传递。
任何想法或想法都将通过投票表示赞赏。
【问题讨论】:
【参考方案1】:这可以通过使用服务帐户来完成,该服务帐户通常适用于服务器到服务器的通信。
按照https://developers.google.com/bigquery/docs/authorization#service-accounts-server 的说明进行操作。
GoogleCredential credential = new GoogleCredential.Builder().setTransport(TRANSPORT)
.setJsonFactory(JSON_FACTORY)
.setServiceAccountId("XXXXXXX@developer.gserviceaccount.com")
.setServiceAccountScopes(SCOPE)
.setServiceAccountPrivateKeyFromP12File(new File("my_file.p12"))
.build();
bigquery = new Bigquery.Builder(TRANSPORT, JSON_FACTORY, credential)
.setApplicationName("BigQuery-Service-Accounts/0.1")
.setHttpRequestInitializer(credential).build();
将 p12 文件保存到你的 assets 文件夹,并从 assets 中的 p12 文件的 InputStream 中生成一个物理 File 对象。
通过这种方式,您可以让您的 Android 应用充当 BigQuery 的非以用户为中心的客户端。太棒了!
【讨论】:
我在项目的 assets 文件夹中添加了 key.p12 文件,并且有这个`.setServiceAccountPrivateKeyFromP12File(new File("key.p12"))
,但收到此错误java.io.FileNotFoundException: /key.p12: open failed: ENOENT (No such file or directory)
。请帮助以上是关于Google API - Android BigQuery 客户端的应用级授权的主要内容,如果未能解决你的问题,请参考以下文章
com.google.android.gms.common.api.ApiException:16:
com.google.android.gms.common.api.ApiException:12500
Google play 服务游戏静默登录错误 'com.google.android.gms.common.api.ApiException: 4:'
使用哪个 API 访问 Android 设备上的 GPS 位置? Android API 或 Google 位置服务 API
Android 平台上的 Google+ API 和 Google+ 登录弃用和停用
无法使用 Google Plus 登录,出现 com.google.android.gms.common.api.ApiException: 10: