[英]Access to Google API - GoogleAccountCredential.usingOAuth2 vs GoogleAuthUtil.getToken()
最近,我一直在使用Android上的Google API,特別是Google Analytics,AdSense和Tasks API。
我見過Google提供的一些示例,他們使用此聲明來獲取GoogleAccountCredential
對象
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自動完成的)
任何人都可以告訴我為什么有人會使用第一種方法而不是第二種方法?
如何在第一種方法中訪問身份驗證令牌?
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客戶端庫的原因
使用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
GoogleAuthUtil
和AccountPicker
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.