簡體   English   中英

訪問Google API - GoogleAccountCredential.usingOAuth2與GoogleAuthUtil.getToken()

[英]Access to Google API - GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken()

最近,我一直在使用Android上的Google API,特別是Google Analytics,AdSense和Tasks API。

我見過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);

我很困惑在哪種場景中使用哪一個以及為什么。 我一直在使用Method no。 1成功而無需在首選項中保留令牌(我猜這是由GoogleAccountCredential自動完成的)

  1. 任何人都可以告訴我為什么有人會使用第一種方法而不是第二種方法?

  2. 如何在第一種方法中訪問身份驗證令牌?

Google API客戶端庫for Java顧名思義就是一個用於訪問Google API的庫,它可用於多種平台,例如Java(一般)和Android,而Google Play服務GoogleAuthUtil僅適用於Android。

通過查看項目的Wiki頁面 ,很難理解Google API客戶端庫與GoogleAuthUtil的關系,因為維基建議使用AccountManager來處理Google帳戶,而且根本沒有提到GoogleAuthUtil。

但是,如果您深入研究代碼及其問題跟蹤器,您可以看到,自添加了對GoogleAuthUtil的支持以來,您鏈接的任務樣本實際上使用了Google API Client Client庫的1.12.0 版以后的GoogleAuthUtil。

維基可能會提到AccountManager而不是GoogleAuthUtil,因為這是在GoogleAuthUtil可用之前進行OAuth2身份驗證的方式,因為該部分維基尚未更新。

有關AccountManager和GoogleAuthUtil之間差異的更多信息,請參閱: 簡而言之,使用OAuth2請求getAuthToken和getToken的區別是什么

簡而言之,Google API客戶端庫是一個用於與Google服務交互的跨平台庫,Android版本是使用GoogleAuthUtil實現的。

任何人都可以告訴我為什么有人會使用第一種方法而不是第二種方法?

使用Google API客戶端庫的原因

  • 如果您正在開發Android以外的其他平台,則無法使用GoogleAuthUtil,因為它是Android特定的庫。
  • 如果您正在開發跨平台應用程序,則可以在共享代碼中使用Google API客戶端庫,以用於Android和其他平台。
  • 如果您與Google的許多服務進行了很多互動,那么這個庫可能會讓您更輕松。
  • 如果您已經在使用它並且它按預期工作,那么繼續使用它並沒有任何缺點,因為它是GoogleAuthUtil的包裝器,因此與使用AccountManager或基於AccountManager的其他庫相比,您可以獲得GoogleAuthUtil的所有優勢。

使用GoogleAuthUtil的原因

  • 使用此功能不需要其他庫或外部依賴項,而不是Google Play服務
  • 您的應用程序的占用空間應該更小,因為您不必包含其他庫。
  • 如果您與Google的互動受到限制,可能更容易直接使用GoogleAuthUtil,而不是通過其他圖書館。
  • GoogleAuthUtil不應該那樣難以使用,因此使用包圍它的庫來簡化它可能不會那么容易使用。

我很困惑在哪種場景中使用哪一個以及為什么。 我一直在使用Method no。 1成功...

如果您使用的是Google API客戶端庫,它可以正常使用,我看不出您不應該繼續使用它的任何理由。

但是,如果我要創建一個需要與Google服務進行交互的Android(僅限)應用程序,我可能會直接使用GoogleAuthUtil。

...無需在首選項中保留令牌(我猜這是由GoogleAccountCredential自動完成的)

是的,我這是由GoogleAccountCredential反過來使用的GoogleAuthUtil自動處理的。

如何在第一種方法中訪問身份驗證令牌?

您應該能夠在GoogleAccountCredential對象上調用方法GoogleAccountCredential ()

Google Play Services client library專為Android設備編寫,可提供與各個Google服務的無縫集成以及一致的用戶界面,以獲取用戶授權以使用其憑據訪問這些服務。

Google APIs Client Library for Java是一個通用庫,可從所有應用程序類型(Web,已安裝或Android應用程序)訪問Google服務。

返回Android,如果您要使用的Google API未包含在Google Play services library ,則可以使用相應的REST API進行連接,但必須獲取OAuth 2.0令牌。

要獲得令牌,您可以 -

  • 直接使用來自Google API Client Library for Java的OAuth 2.0庫(不適用於Android)

  • 或使用GoogleAuthUtil和AccountPicker利用Google Play服務庫的授權部分。 閱讀Google使用REST API授權。 GoogleAuthUtil.getToken()緩存並管理令牌過期並刷新自身。但是,如果出現網絡錯誤/服務器負載,您可能需要在重試令牌之前使用指數退避算法,以免使請求泛濫服務器。)

  • 或使用GoogleAccountCredential封裝在google-api-client-android-1.19.0.jar自帶的谷歌API客戶端庫的Java。 該軟件包提供基於Google Play服務客戶端庫的 Utilities,而GoogleAccountCredential is just a wrapper GoogleAuthUtilAccountPicker GoogleAccountCredential is just a wrapper 這樣,您就可以使用相同的一致授權流程和Google Play服務客戶端庫中的標准帳戶選擇器對話框,同時將令牌管理委派給GoogleAccountCredential 請參閱示例。

方法一(com.google.api.client.googleapis.extensions.android.gms.auth。*)是Google更一般的跨平台帳戶管理流程的一部分,而方法二是(com.google.android.gms。 auth.GoogleAuthUtil)是特定於Android的。 它看起來像各種Android Google API,方法二,包裝和簡化方法一。 例如, Google+文檔第二段指出“Google+登錄按鈕可對用戶進行身份驗證並管理OAuth 2.0流程,從而簡化了與Google API的集成。”

我會token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope),特定於Android的方法,即token = GoogleAuthUtil.getToken(mActivity, mEmail, mScope),

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM