我已经在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错误。
该应用程序将部署到任何数量的用户,我们不知道他们的帐户提前。这个工作流不支持这个,除非我错过了一些技巧。
它开始闻起来像我们需要建立一个应用程序引擎应用程序,使用GoogleAccountCredential。使用受众,并设置web服务作为BigQuery的传递。
这可以通过使用服务帐户来完成,该帐户通常用于服务器到服务器的通信。
按照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的非以用户为中心的客户端。太棒了!