使用弃用方法的GoogleAccountCredential.RequestHandler解决方法

时间:2016-10-14 09:12:07

标签: android google-drive-api google-play-services

我正在使用v3 REST Api向我的应用添加Google云端硬盘支持,如下所述:https://developers.google.com/drive/v3/web/quickstart/android

Gmail API中出现完全相同的问题:https://developers.google.com/gmail/api/quickstart/android

我正在使用GoogleAccountCredential。它通过我的gradle包含在内:

compile('com.google.api-client:google-api-client-android:1.22.0') {
    exclude group: 'org.apache.httpcomponents'
}

但是,嵌套类GoogleAccountCredential.RequestHandler存在问题 在方法handleResponse中,这调用了GoogleAuthUtil.invalidateToken(context,token);被标记为已弃用,因为它需要权限MANAGE_ACCOUNTS和USE_CREDENTIALS,如下所示: GoogleAuthUtil.invalidateToken

当我使用Google网络界面将应用与驱动器断开连接并尝试使用上述快速入门示例重新进行身份验证时,会显示此信息。然后抛出一个java.lang.SecurityException:调用者uid缺少任何android.permission.MANAGE_ACCOUNTS,android.permission.USE_CREDENTIALS (如预期的那样)。

我当然可以将这些权限添加到我的应用中,但我宁愿不这样做。 Android Studio SDK管理器不会显示相关库的更新更新。

除了不使用PlayServices而是直接使用GoogleAuthUtil?

之外的任何解决方法

1 个答案:

答案 0 :(得分:2)

经过一些实验,我能够通过继承GoogleAccountCredential来解决这个问题,并在其中进行公共虚拟初始化(HttpRequest请求)"使用RequestHandler,它是默认实现的副本,除了它调用clearToken而不是invalidateToken。 clearToken可能会抛出一些必须被捕获并妥善处理的异常。