Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/194.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在具有硬编码凭据的Android项目中使用Google Drive SDK_Android_Google Drive Api - Fatal编程技术网

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

如何在具有硬编码凭据的Android项目中使用Google Drive SDK,android,google-drive-api,Android,Google Drive Api,我如何将凭据硬编码到我的Google Drive服务,以便应用程序的用户在没有身份验证的情况下始终能够访问我的文件 我已经找到了使用Java SKD的解决方案,但这些库在Android上无法正常工作: 有没有成功尝试类似任务的例子?您可能不想这样做。如果您有一个访问令牌,您可以始终将其作为URL参数添加到请求URL中。好的,我找到了解决问题的方法 当然,我的应用程序是Android应用程序,我不想让用户登录/使用任何凭据连接到我的驱动器,最后我可以使用默认的驱动器web应用程序处理文件 需要使用

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

我已经找到了使用Java SKD的解决方案,但这些库在Android上无法正常工作:


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

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

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

当然,我的应用程序是Android应用程序,我不想让用户登录/使用任何凭据连接到我的驱动器,最后我可以使用默认的驱动器web应用程序处理文件

  • 需要使用SEP:创建服务帐户,如中所示 例如
  • 下载私钥API访问站点并将其放入 资产文件夹
  • 下载并导入这些库:
    • 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
    • 番石榴-jdk5-13.0.jar
    • jackson-core-2.0.5.jar
    • jsr305-1.3.9.jar
  • 实现驱动器服务获取程序:

    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_文件是以前下载的私钥

  • 允许您的服务从驱动器访问文件夹:在“允许用户使用电子邮件:G_服务\u电子邮件”读/写访问中的文件夹共享选项中

    PKC文件集成

  • 只需在这一行硬编码您的api\u密钥,
    private static final String api\u key=“项目的api\u密钥”和它的完成。不幸的是,这个解决方案不允许修改文件通过驱动器网络应用程序,因为我想。感谢您的回复。这是否会授予无需请求用户权限即可访问应用程序的权限?我这样问是因为我试图以这种方式存储每个用户的首选项,但找不到如何删除请求许可的Google Drive消息。对我来说,这只是糟糕的用户体验。你是如何将PKC_12_文件集成到这个文件中的?我在安卓系统中使用这个有很多问题。例如,我在访问下载的文件时遇到问题(我把文件放在哪里,还是从/res/raw或/assets访问它,然后从inputstream转换?),我添加了集成此文件的方法。只需将其放入资产目录并使用此方法即可。
    
    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;
    }