授权我的应用程序使用现有文件夹

时间:2014-05-06 11:32:33

标签: android google-drive-api

使用Android Drive API时,尝试使用以下方式进行连接:

mGoogleApiClient = new GoogleApiClient.Builder(this)
            .addApi(Drive.API).addScope(Drive.SCOPE_FILE)
            .addConnectionCallbacks(this)
            .addOnConnectionFailedListener(this).build();

getGoogleApiClient.connect();

我选择了一个帐户屏幕,选择一个帐户后,我看到了:

enter image description here

  

查看和管理您已打开或创建的Google云端硬盘文件   使用此应用程序

如果我要访问其他应用创建的文件该怎么办?

我的申请是否有办法要求授权特定文件夹?

4 个答案:

答案 0 :(得分:5)

Google Play Services client library为Android开发人员提供API,以便与各个Google服务无缝集成。

该库还允许您的应用提供一致的用户界面,以获取用户授权以使用其凭据访问这些服务。

访问Google云端硬盘服务

Google Play服务客户端库附带Google Drive Android API,可提供对Google云端硬盘服务的访问权限。

但是,Google云端硬盘Android API目前仅提供 drive.file drive.appfolder authorization scopes,如果您的应用需要访问权限,则会受到限制用户驱动器上的所有内容。

要提供驱动器范围,您需要使用Drive API Client Library for Java提供的REST API。该库依赖于Google APIs Client Library for Java,它提供了生成的客户端库,可以使用来自任何应用程序(Web,已安装或Android)的REST API访问各个Google服务

Download the Drive API v2 Client Library for Java。 libs文件夹包含所有应用程序类型(Web,已安装或Android应用程序)可能需要的所有全局适用的依赖项(Google API Client Library for Java)。

对于Android,您需要以下jar(如drive / readme.html中所述)来整理依赖项

google-api-services-drive-v2-rev143-1.19.0.jar
google-api-client-1.19.0.jar
google-api-client-android-1.19.0.jar
google-http-client-1.19.0.jar
google-http-client-android-1.19.0.jar
google-http-client-gson-1.19.0.jar
google-oauth-client-1.19.0.jar
gson-2.1.jar
jsr305-1.3.9.jar

<强>授权

在访问Google云端硬盘(或任何其他Google)服务之前,您需要授权您的应用(使用OAuth 2.0)

  1. 对于使用 Google Play服务客户端库的应用程序,这将由GoogleApiClient处理。

  2. 但是,如果您要使用的服务/ Google API未包含在 Google Play服务库中,则可以使用相应的REST API进行连接以手动发出请求或使用客户端库由服务提供商提供,但您必须获取OAuth 2.0令牌。

  3. 对于驱动器范围,您需要使用 Google API Client Library for Java 和生成的客户端库(在我们的示例中为驱动器v2)。要获得授权令牌,您可以 -

    • 直接使用 Google API Client Library for Java 中的OAuth 2.0库(不适用于Android)
    • 或使用GoogleAuthUtil和AccountPicker利用Google Play服务库的授权部分。 Read Authorizing with Google for REST APIs。 (GoogleAuthUtil.getToken()缓存并管理令牌过期并刷新自身。但是,如果出现网络错误/服务器负载,您可能需要在重试令牌之前使用指数退避算法,以免使请求泛滥服务器。参考3)
    • 或使用 Google API Client Library for Java 附带的google-api-client-android-1.19.0.jar中定义的GoogleAccountCredential。该软件包提供基于Google Play servicesGoogleAccountCredential is just a wrapper围绕 GoogleAuthUtil AccountPicker 的实用程序。这样,您就可以使用相同的一致授权流程和Google Play服务客户端库附带的标准帐户选择器用户界面,同时将令牌管理和指数退避策略(如上所述)委派给GoogleAccountCredential。有关示例,请参阅1

    请注意,使用最后两种方法,您同时使用 Google Play服务客户端库(用于授权)和 Google API Client Library for Java 以及 Drive API v2 Client Library for Java 访问驱动身份验证范围的Google云端硬盘服务)。

    套餐参考

    同时结帐 -

    1. http://www.techsfo.com/blog/2014/03/android-preparing-to-access-google-drive-with-an-app-part-1/
    2. http://developer.samsung.com/android/technical-docs/Using-Google-APIs
    3. Google Play services and OAuth Identity Tools
    4. 此答案也发布在我的博客here上。

答案 1 :(得分:4)

Google Drive Android API仅支持两个范围:

drive.file:(https://www.googleapis.com/auth/drive.file) 按文件访问由应用程序创建或打开的文件

drive.appdata(https://www.googleapis.com/auth/drive.appdata) 允许访问Application Data文件夹

您需要使用Google云端硬盘网络服务(https://developers.google.com/drive/v2/reference/),您的应用必须使用适用于Java的Google API客户端库。 (https://code.google.com/p/google-api-java-client

完全访问的范围:&#34; https://www.googleapis.com/auth/drive&#34;

GoogleAccountCredential credential = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE); 
credential.setSelectedAccountName(accountName); 
Drive service = new Drive.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential).build();

答案 2 :(得分:1)

请勿使用Google Play服务提供的API。它不支持DRIVE范围。如果没有DRIVE范围,您就没有足够的权限来访问其他应用创建的文件。

您可以使用 DriveScopes.DRIVE ,这就是我在我的应用中所做的事情。我的Android应用程序需要与我的旧桌面应用程序交换数据。

您需要使用Java Jar库中的API。 https://developers.google.com/drive/web/quickstart/quickstart-java需要包含大量JAR文件,这会增加您的最终APK尺寸。但是,在ProGuard的帮助下,APK的大小仍然可以管理。

但是,我预计Google很快会强制开发人员仅使用Google Play服务,这是他们业务战略的一部分。因此,如果发生这种情况,您需要制定某种备份计划。

有关详细信息,请参阅https://stackoverflow.com/questions/21807602/migration-strategy-for-google-drive-android-api-from-google-api-java-client-goPlans for drive.appdata scope in android google drive API

答案 3 :(得分:0)

    mGoogleApiClient = new GoogleApiClient.Builder(this)
        .addApi(Drive.API)
        .addScope(Drive.SCOPE_FILE)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .build();

我认为你错过了addScope,我自己从未使用它,但在查看文档时,这是我可以找到的缺失。 documentation