如何在带有硬编码凭据的 Android 项目中使用 Google Drive SDK [英] How to use Google Drive SDK in Android project with hardcoded credentials

查看:16
本文介绍了如何在带有硬编码凭据的 Android 项目中使用 Google Drive SDK的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何将凭据硬编码到我的 Google 云端硬盘服务,以便应用程序的用户始终可以在没有身份验证的情况下访问我的文件?

How can I hardcode credentials to my Google Drive Service so users of the app will always get acces to my files without auth?

我找到了使用 Java SKD 的解决方案,但这些库不适用于 Android:https://developers.google.com/drive/service-accounts#use_service_accounts_as_application-owned_accounts

I have found solution using Java SKD but these libraries doesn't work well with Android: https://developers.google.com/drive/service-accounts#use_service_accounts_as_application-owned_accounts

有没有成功尝试类似任务的例子?

Are there any examples of successful attempts of similar tasks?

推荐答案

好的,我找到了解决问题的方法.

Ok, I've found solution for my problem.

当然,我的应用是 Android 应用,我不想让用户登录/使用任何凭据连接到我的云端硬盘,最后我可以使用默认的云端硬盘网络应用操作文件.

Of course my app is an Android one, I dont'n want make user to log in/use any credentials to connect to my Drive, and lastly I can manipulate files using default Drive web app.

  1. 需要采取措施:创建服务帐户,如 这个例子.
  2. 下载私钥API 访问站点 并把它放在例如.在资产文件夹.
  3. 下载并导入这些库:
    • google-api-client-1.13.2-beta.jar
    • google-api-client-android-1.13.2-beta.jar
    • google-api-services-drive-v2-rev60-1.13.2-beta.jar
    • google-http-client-1.13.1-beta.jar
    • google-http-client-android-1.13.1-beta.jar
    • google-http-client-gson-1.13.1-beta.jar
    • google-http-client-jackson2-1.13.1-beta.jar
    • google-oauth-client-1.13.1-beta.jar
    • gson-2.1.jar
    • guava-jdk5-13.0.jar
    • jackson-core-2.0.5.jar
    • jsr305-1.3.9.jar
  1. Seps need to be taken: Create service account as in this example.
  2. Download private key API Access site and put it eg. in assets folder.
  3. Download and import these libraries:
    • google-api-client-1.13.2-beta.jar
    • google-api-client-android-1.13.2-beta.jar
    • google-api-services-drive-v2-rev60-1.13.2-beta.jar
    • google-http-client-1.13.1-beta.jar
    • google-http-client-android-1.13.1-beta.jar
    • google-http-client-gson-1.13.1-beta.jar
    • google-http-client-jackson2-1.13.1-beta.jar
    • google-oauth-client-1.13.1-beta.jar
    • gson-2.1.jar
    • guava-jdk5-13.0.jar
    • jackson-core-2.0.5.jar
    • jsr305-1.3.9.jar

实现 Drive 服务 getter:

Implement Drive service getter:

public Drive getDriveService() throws GeneralSecurityException, IOException, URISyntaxException {
    HttpTransport httpTransport = new NetHttpTransport();
    JacksonFactory jsonFactory = new JacksonFactory();
    GoogleCredential credential = new GoogleCredential.Builder()
        .setTransport(httpTransport)
        .setJsonFactory(jsonFactory)
        .setServiceAccountId(G_SERVICE_EMAIL)
        .setServiceAccountScopes(DriveScopes.DRIVE)
        .setServiceAccountPrivateKeyFromP12File(PKC_12_FILE)
        .build();
    Drive service = new Drive.Builder(httpTransport, jsonFactory, null)
        .setHttpRequestInitializer(credential)
        .build();
    return service;
}

G_SERVICE_EMAILAPI 访问站点 的电子邮件地址,PKC_12_FILE 是之前下载的私钥.

Where G_SERVICE_EMAIL is email address from API Access site and PKC_12_FILE is previously downloaded private key.

允许您的服务从您的云端硬盘访问文件夹:在 云端硬盘应用中文件夹的共享选项中允许具有电子邮件的用户:G_SERVICE_EMAIL 读/写访问权限.

Allow your service to access folder from your Drive: in sharing options of the folder in Drive app allow user with email: G_SERVICE_EMAIL read/write access.

private File getTempPkc12File() throws IOException {
    InputStream pkc12Stream = getAssets().open("this-is-your-unique-hash-privatekey.p12");
    File tempPkc12File = File.createTempFile("temp_pkc12_file", "p12");
    OutputStream tempFileStream = new FileOutputStream(tempPkc12File);

    int read = 0;
    byte[] bytes = new byte[1024];
    while ((read = pkc12Stream.read(bytes)) != -1) {
        tempFileStream.write(bytes, 0, read);
    }
    return tempPkc12File;
}

这篇关于如何在带有硬编码凭据的 Android 项目中使用 Google Drive SDK的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆