usingOAuth2已弃用?

时间:2013-07-02 15:37:38

标签: android oauth-2.0 google-drive-api

我一直在研究使用Google Drive API的Android应用。它最初是从quickstart example here构建的。简化的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更新后,我收到了警告

  

该方法使用了类型的OAuth2(Context,String,String ...)   GoogleAccountCredential已弃用

发生了什么事?还有另一种获取凭证的方法吗?在任何地方都有quickstart example的编辑版本吗?

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

2 个答案:

答案 0 :(得分:27)

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

取代:

  

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

  

GoogleAccountCredential crd =   GoogleAccountCredential.usingOAuth2(这一点,   Arrays.asList(DriveScopes.DRIVE_FILE));

答案 1 :(得分: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 console中的设置。我在包裹不匹配时收到此错误。

另一个感兴趣的链接是oauth2 documentationgoogle api playground