代码之家  ›  专栏  ›  技术社区  ›  Madhur Ahuja

访问Google API-GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken()

  •  41
  • Madhur Ahuja  · 技术社区  · 11 年前

    最近,我在Android上使用了很多谷歌API,特别是分析、AdSense和任务API。

    我看到了谷歌提供的一些示例,他们使用此声明获取 GoogleAccountCredential 对象

    https://code.google.com/p/google-api-java-client/source/browse/tasks-android-sample/src/main/java/com/google/api/services/samples/tasks/android/TasksSample.java?repo=samples

    credential = GoogleAccountCredential.usingOAuth2(this, Collections.singleton(TasksScopes.TASKS));

    但是,如果我查看文档,例如:
    http://developer.android.com/google/auth/http-auth.html
    http://developer.android.com/google/play-services/auth.html

    它们都提到了用于获取令牌的以下方法:
    token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope);

    我很困惑在哪种情况下使用哪一种以及为什么使用。我一直在成功地使用方法1,不需要在首选项中保存令牌(我想这是由GoogleAccountCredential自动完成的)

    1. 有人能告诉我为什么有人会使用第一种方法而不是第二种方法吗?

    2. 如何在第一个方法中访问身份验证令牌?

    3 回复  |  直到 11 年前
        1
  •  47
  •   Community CDub    7 年前

    这个 Google APIs Client Library for Java 顾名思义,它是一个用于访问GoogleAPI的库,可用于Java(一般)和Android等多种平台,而 Google Play Services GoogleAuthUtil 仅在Android上可用。

    通过查看 wiki page 很难理解GoogleAPI客户端库与GoogleAuthUtil之间的关系,因为wiki建议 AccountManager 用于处理Google帐户,它根本没有提到GoogleAuthUtil。

    然而,如果您深入研究代码及其问题跟踪程序,您可以看到 tasks sample 你实际上链接了 uses 自Google AuthUtil以来 version 1.12.0 当支持GoogleAuthUtil时 added .

    维基可能会提到AccountManager而不是GoogleAuthUtil,因为这是在GoogleAuthUtl可用之前进行OAuth2身份验证的方法,而且维基的这部分还没有更新。

    有关AccountManager和GoogleAuthUtil之间差异的更多信息,请参阅: In a nutshell what's the difference from using OAuth2 request getAuthToken and getToken

    简而言之,GoogleAPI客户端库是一个用于与Google服务交互的跨平台库,Android版本通过使用GoogleAuthUtil实现。

    有人能告诉我为什么有人会使用第一种方法而不是第二种方法吗?

    使用Google API客户端库的原因

    • 如果你是为Android以外的其他平台开发,你不能使用GoogleAuthUtil,因为它是一个Android特定的库。
    • 如果您正在开发跨平台应用程序,则可以在Android和其他平台的共享代码中使用GoogleAPI客户端库。
    • 如果你经常与谷歌的许多服务互动,这个图书馆可能会让你更容易。
    • 如果您已经在使用它,并且它可以按需要工作,那么继续使用它并没有什么缺点,因为它是GoogleAuthUtil的包装器,因此与使用AccountManager或其他基于AccountManager的库相比,您可以获得GoogleAuthUtil的所有优点。

    使用GoogleAuthUtil的原因

    • 使用此功能不需要Google Play服务以外的其他库或外部依赖项
    • 你的应用程序占地面积应该更小,因为你不必包含额外的库。
    • 如果您与Google的交互受到限制,那么直接使用GoogleAuthUtil可能会更容易,而不是通过另一个库。
    • GoogleAuthUtil使用起来应该没有那么难,所以使用一个围绕它的库来简化它可能不会那么容易。

    我很困惑在哪种情况下使用哪一种以及为什么使用。我一直在成功地使用方法1。。。

    如果你使用的是GoogleAPI客户端库,它对你来说很好,我看不出你为什么不继续使用它。

    然而,如果我要创建一个需要与谷歌服务交互的Android(唯一)应用程序,我可能会直接使用GoogleAuthUtil。

    …无需将令牌保存在首选项中(我想这是由GoogleAccountCredential自动完成的)

    是的,这是由GoogleAuthUtil自动处理的,而GoogleAccountCredential反过来使用它。

    如何在第一个方法中访问身份验证令牌?

    您应该能够调用该方法 getToken() GoogleAccountCredential 对象

        2
  •  12
  •   nightlytrails    10 年前

    Google Play Services client library 专门为Android设备编写,以提供与单个Google服务的无缝集成,并提供一致的用户界面,以获得用户使用其凭据访问这些服务的授权。

    Google APIs Client Library for Java 是一个通用库,用于从所有应用程序类型(web、已安装或Android应用程序)访问Google Services。

    回到Android,如果您要使用的Google API未包含在 Google Play services library ,可以使用适当的REST API进行连接,但必须获得OAuth 2.0令牌。

    要获取令牌,您可以-

    • 直接使用Google API Client library for Java中的OAuth 2.0库(android不首选)

    • 或利用Google Play服务库的授权部分 GoogleAuthUtil 和AccountPicker。 Read Authorizing with Google for REST APIs. ( GoogleAuthUtil.getToken() 缓存和管理令牌到期和刷新本身。但是,如果出现网络错误/服务器负载,您可能需要在重试令牌之前使用指数回退算法,以避免服务器充斥请求。)

    • 或使用 GoogleAccountCredential 包装在 google-api-client-android-1.19.0.jar 随附的 用于Java的Google API客户端库 。该软件包提供基于 Google Play服务客户端库 GoogleAccountCredential is just a wrapper 围绕 谷歌AuthUtil AccountPicker 。这将允许您使用Google Play服务客户端库中相同的一致授权流和标准帐户选择器对话框,同时将令牌管理委派给 谷歌会计凭证 参考 this 例如。

        3
  •  2
  •   GLee    11 年前

    第一种方法(com.google.api.client.googleapis.extensions.android.gms.auth.*)是谷歌更通用的跨平台帐户管理流程的一部分,而第二种方法(com.ibm.android.gmss.auth.GoogleAuthUtil)是android特有的。它看起来像各种Android谷歌API,方法二,包装和简化方法一。例如, the Google+ documentation, second paragraph ,表示“Google+登录按钮验证用户并管理OAuth 2.0流,这简化了您与Google API的集成。”

    我会使用Android特有的方法, token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope), 只要可能。