【问题标题】:Workaround for GoogleAccountCredential.RequestHandler using deprecated methods使用已弃用方法的 GoogleAccountCredential.RequestHandler 的解决方法
【发布时间】:2017-06-08 01:49:43
【问题描述】:

我正在使用 v3 REST Api 向我的应用添加 Google Drive 支持,如下所述: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: caller uid missing any android.permission.MANAGE_ACCOUNTS,android.permission.USE_CREDENTIALS (如预期的那样)。

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

除了不使用 PlayServices 而是直接使用 GoogleAuthUtil 之外的任何解决方法?

【问题讨论】:

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


    【解决方案1】:

    经过一些试验,我能够通过继承 GoogleAccountCredential 来解决这个问题,并且在它的“public void initialize(HttpRequest request)”中使用一个 RequestHandler,它是默认实现的副本,除了它调用 clearToken 而不是 invalidateToken。 clearToken 可能会抛出一些必须被适当捕获和处理的异常。

    【讨论】:

    • 我在使用 gmail api 时遇到了完全相同的问题,并以与您相同的方式解决了问题。你能接受你自己的答案吗?也许它可以在遥远的未来帮助某人,就像在不久的将来一样
    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 2016-06-08
    • 2012-09-20
    • 2020-11-28
    • 1970-01-01
    • 2012-12-18
    相关资源
    最近更新 更多