9

我一直在开发一个使用 Google Drive API 的 Android 应用程序。它最初是从这里的快速入门示例构建的。API 调用的简化序列(此处未显示正确的错误处理)是:

 GoogleAccountCredential cred = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE_FILE);
 cred.setSelectedAccountName("...");  
 Drive drvSvc = new Drive.Builder (AndroidHttp.newCompatibleTransport(), new GsonFactory(), cred).build();
 FileList gooLst = drvSvc.files().list().setMaxResults(MAX_DOWN).setQ(_rqst).execute();

它一直运行良好,我正要发布我的应用程序。但突然,在 Drive API 更新后,我收到了警告

GoogleAccountCredential 类型的 usingOAuth2(Context, String, String...) 方法已弃用

发生了什么?有没有其他方法可以获取凭证?是否在任何地方都可以使用经过编辑的快速入门示例

提前感谢您的任何澄清。肖恩

4

2 回答 2

27

所以,我自己的问题的简单答案是

代替:

GoogleAccountCredential crd = GoogleAccountCredential.usingOAuth2(this, DriveScopes.DRIVE_FILE);

GoogleAccountCredential crd = GoogleAccountCredential.usingOAuth2(this, Arrays.asList(DriveScopes.DRIVE_FILE));

于 2013-07-04T14:43:30.917 回答
2

为了完整性

我猜您是按照Google Drive QuickStart中的代码示例来处理这个异常的。如果是这样,您可能会发现我必须修改的以下内容很有趣。

Google Play 服务库(注意。请参阅下面的评论!)

该文档使用向 Android 项目添加库的旧方法。当使用最新的 ADT 执行时,这将失败。您将能够编译并上传到设备/模拟器,但在执行时您将收到 NoClassDefFoundError。

java.lang.NoClassDefFoundError: Failed resolution of: Lcom/google/android/gms/common/AccountPicker;

要解决此问题,您应该将文件复制粘贴到google-play-services.jar文件libs夹中。

缺少元标记

直到下一个错误。然后,我收到了一份IllegalStateException说明,要求在包含 google-play-services 版本的清单中添加元标记。

因此,在清单的应用程序标记中添加:

<meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version"/>

在其中一个资源文件 ( res/values/a-file-here.xml) 中添加以下内容:

<integer name="google_play_services_version">4030500</integer>

在我的情况下,lib 匹配这个版本。如果您在此处输入错误的版本,您将收到一个错误,显示要指定的正确版本。所以一定要检查输出。

没有权限

最后,我在应用程序中收到了 oauth 提示,只是为了发现示例应用程序仍然缺少权限。错误供参考:

java.io.FileNotFoundException: /storage/emulated/0/Pictures/IMG_20131211_110629.jpg: open failed: EACCES (Permission denied)

在示例中列出的权限旁边:

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.INTERNET" />

还要在清单中添加 WRITE_EXTERNAL_STORAGE 权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

更多资源

如果您com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException在根本原因的某个描述中遇到异常,Unknown您应该检查Google API 控制台中的设置。我在包不匹配时收到此错误。

另一个感兴趣的链接是oauth2 文档google api playground

于 2013-12-11T10:53:24.013 回答