android - Google APIs - Android BigQuery 客户端的应用级授权

标签 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 拒绝访问 JSON 错误。

该应用程序将被部署到我们事先不知道他们帐户的任意数量的用户。此工作流程不支持该功能,除非我遗漏了一些技巧。

开始感觉我们需要设置一个 App Engine 应用程序,使用 GoogleAccountCredential.usingAudience,并将网络服务设置为 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 中生成一个物理文件对象。

通过这种方式,您可以让您的 Android 应用充当 BigQuery 的非以用户为中心的客户端。太棒了!

关于android - Google APIs - Android BigQuery 客户端的应用级授权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25003979/

相关文章:

google-bigquery - "Cannot read tablet : Incompatible types"是什么意思?

google-bigquery - 将数据从 BigQuery 导出到 GCS - 拆分文件大小控制

android - 按下退格键时应用程序崩溃

ruby-on-rails - 获取访问 token !在 Google API 中—— "Missing authorization code."

api - 使用api发送gmail附件失败

python - Apache-Beam 将序列号添加到 PCollection

Android DialogFragment 在屏幕旋转时崩溃

android - 强制 Phonegap(Android) 启动画面方向

java - Android ToggleButton 提供 null 对象引用

javascript - 谷歌 OAuth 2.0 同源错误