如何在Android项目中使用带有硬编码凭据的Google Drive SDK

时间:2013-03-19 11:12:31

标签: android google-drive-api

如何将凭据硬编码到我的Google云端硬盘服务中,以便应用的用户无需使用身份验证即可访问我的文件?

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

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

2 个答案:

答案 0 :(得分:3)

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

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

  1. 需要采取措施:在this中创建服务帐户 例。
  2. 下载私钥 API访问网站并将其设置为例如。在 资产文件夹。
  3. 下载并导入这些库:
    • 谷歌-API的客户端 - 1.13.2-beta.jar
    • 谷歌-API的客户端 - 机器人-1.13.2-beta.jar
    • 谷歌-API服务驱动-V2-rev60-1.13.2-beta.jar
    • 谷歌-HTTP-客户1.13.1-beta.jar
    • 谷歌-HTTP-客户机器人-1.13.1-beta.jar
    • 谷歌-HTTP-客户GSON-1.13.1-beta.jar
    • 谷歌-HTTP-客户jackson2-1.13.1-beta.jar
    • 谷歌OAuth的客户端 - 1.13.1-beta.jar
    • GSON-2.1.jar
    • 番石榴jdk5-13.0.jar
    • 杰克逊 - 芯 - 2.0.5.jar
    • jsr305-1.3.9.jar
  4. 实施云服务获取器:

    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_EMAIL 是来自 API访问网站的电子邮件地址,而 PKC_12_FILE 是以前下载的私钥。

  5. 允许您的服务访问云端硬盘中的文件夹:在Drive app中共享文件夹选项,允许用户使用电子邮件: G_SERVICE_EMAIL 读/写访问权限。

    PKC FILE INTEGRATION

    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;
    }
    

答案 1 :(得分:0)

你可能不想这样做。如果您有访问令牌,则始终可以将其作为URL参数access_token=MY_ACCESS_TOKEN添加到请求URL。