Google API - 适用于Android BigQuery Client的应用级授权

时间:2014-07-28 20:42:08

标签: android google-api google-bigquery google-api-client

我已经在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,并将Web服务设置为BigQuery的传递。

任何想法或想法都会得到赞赏。

1 个答案:

答案 0 :(得分:2)

这可以通过使用服务帐户来完成,该帐户通常适用于服务器到服务器的通信。

按照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文件夹,并从资产中的p12文件中生成InputStream中的物理File对象。

通过这种方式,您可以将Android应用程序充当BigQuery的非以用户为中心的客户端。真棒!

相关问题