首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问Google GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken()

访问Google GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken()
EN

Stack Overflow用户
提问于 2014-03-03 09:13:04
回答 3查看 24.1K关注 0票数 41

最近,我在Analytics、AdSense和Tasks上大量使用Google。

我见过Google提供的一些示例,它们使用此语句获取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. 如何在第一个方法中访问auth令牌?
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-03-11 19:55:53

顾名思义,Google客户端Java库是一个用于访问Google的库,它可以用于多个平台,例如Java (一般)和Android,而Google Play服务GoogleAuthUtil只能在安卓上使用。

通过查看该项目的wiki页面,很难理解Google客户端库与GoogleAuthUtil的关系,因为wiki表明AccountManager用于处理谷歌帐户,而实际上根本没有提到GoogleAuthUtil。

但是,如果您深入研究代码及其问题跟踪器,您可以看到,您链接的任务样本实际上是使用 GoogleAuthUtil,因为当对GoogleAuthUtil的支持是已添加时,Google客户端库的版本1.12.0就已经链接了。

wiki可能是指AccountManager而不是GoogleAuthUtil,因为这是在OAuth2可用之前进行OAuth2身份验证的方式,而且因为wiki的这一部分还没有更新。

有关AccountManager和GoogleAuthUtil之间差异的更多信息,请参见:简而言之,使用OAuth2请求getAuthToken和getToken有什么区别?

简而言之,Google客户端库是一个跨平台库,用于与谷歌的服务进行交互,而版本是使用GoogleAuthUtil.实现的。

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

使用Google客户端库的原因

  • 如果您正在为安卓以外的其他平台开发,您不能使用GoogleAuthUtil,因为它是一个特定于Android的库。
  • 如果您正在开发跨平台应用程序,您可以在Android和其他平台的共享代码中使用Google客户端库。
  • 如果您与Google的许多服务进行了大量的交互,这个库可能会使您的工作变得更容易。
  • 如果您已经在使用它,并且它可以按需要工作,那么继续使用它并没有什么缺点,因为它是GoogleAuthUtil的包装器,因此与使用AccountManager或基于AccountManager的其他库相比,GoogleAuthUtil的所有优点都得到了体现。

使用GoogleAuthUtil的原因

  • 使用它不需要其他库或外部依赖项,只需要Google服务
  • 您的应用程序占用空间应该更小,因为您不需要包括额外的库。
  • 如果您与谷歌的交互是有限的,那么直接使用GoogleAuthUtil可能更容易,而不是通过另一个库。
  • GoogleAuthUtil应该不会那么难使用,所以使用一个封装在它周围的库来简化它可能不会那么容易使用。

我搞不懂在哪一种场景中使用哪一种,以及为什么。我已经成功地使用了第一种方法。

如果您正在使用Google客户端库,并且它对您很好,我看不出有什么理由不应该继续使用它。

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

..。不需要将令牌保存在首选项中(我猜这是由GoogleAccountCredential自动完成的)

是的,I,这是由GoogleAuthUtil自动处理的,而GoogleAccountCredential又使用它。

如何在第一个方法中访问auth令牌?

您应该能够调用GoogleAccountCredential对象上的方法GoogleAccountCredential

票数 47
EN

Stack Overflow用户

发布于 2014-09-16 15:34:00

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

Google APIs Client Library for Java是从所有应用程序类型(web、installed或application)访问generic的通用库。

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

为了得到一个记号,你可以-

  • 直接使用Google客户端库中的OAuth 2.0库(安卓不首选)
  • 或者使用GoogleAuthUtil和AccountPicker利用Google服务库的授权部分。阅读授权与谷歌的REST。 (GoogleAuthUtil.getToken()缓存并管理令牌过期和刷新本身。但是,在出现网络错误/服务器负载的情况下,您可能需要在重新尝试令牌之前使用指数后退算法,以避免服务器收到大量请求。)
  • 或者使用Google客户端库( Client for google-api-client-android-1.19.0.jar )在google-api-client-android-1.19.0.jar中打包的google-api-client-android-1.19.0.jar。该软件包提供基于Google服务、客户端库和GoogleAccountCredential is just a wrapper的实用程序,包括GoogleAuthUtilAccountPicker。这将允许您使用相同的一致授权流和Google服务客户端库中的标准帐户选择器对话框,同时将令牌管理委托给GoogleAccountCredential。有关示例,请参阅
票数 12
EN

Stack Overflow用户

发布于 2014-03-11 18:51:28

第一种方法(com.google.api.client.googleapis.extensions.android.gms.auth.*)是谷歌更通用的跨平台账户管理流程的一部分,而第二种方法(com.google.android.gms.auth.GoogleAuthUtil)则是安卓专用的。它看起来像各种各样的,方法二,包装和简化方法一。例如,Google+文档,第二段声明“Google+登录按钮对用户进行身份验证并管理OAuth 2.0流,这简化了与Google+的集成”。

我会用安卓特有的方法,只要可能的话,token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope),

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22142641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档