2010-07-25 70 views
21

我是一個新的開發人員谷歌Android平臺 - 我的HTC Desire上週抵達。OpenID for Android應用程序,需要SignIn

現在我需要的方式登錄到我現有的應用程序(Java中,目前碼頭運行)。 服務器應用程序使用彈簧安全3.0.2

在我的情況下開發的,我想支持以下內容: 如果用戶已經建立了自己的Android手機用Googlemail電子郵件/谷歌帳戶(和大多數用戶一樣)我想使用此帳戶憑據自動登錄到我的服務器應用程序。

是否有任何支持該用例的Android框架? 或者有沒有其他的選擇?

我讀:HTTP code.google.com國際機場/ DE-DE /的API /帳號/文檔/ OpenID.html

我們如何登錄與谷歌AppEngine上的應用在這裏描述:http://blog.notdot.net/2010/05/Authenticating-against-App-Engine-from-an-Android-app

+1

你能得到它到底工作?我試圖解決一個非常類似的問題,我能找到的就是[this](http://stackoverflow.com/questions/9854781/it-is-possible-to-authenticate-a-google-user-the -one-logged-on-an-android-d?rq = 1)(查看提出的解決方案的註釋),但是我發現解決方案相當糟糕(我不想讓用戶去授予我的權限才能訪問他的聯繫人:() – tnacho 2012-07-11 02:26:51

回答

2

我不確定我是否理解用戶要登錄的位置。

請注意,您不能承擔其網絡瀏覽器將使用(默認瀏覽器,Opera移動,廠商瀏覽器等),如果你只提供一個網站,它是Web瀏覽器的責任知道用戶。大多數人已經登錄他們的谷歌帳戶。 Android在這裏是無關緊要的。

如果你希望你的Android應用程序連接到Web服務,而不會提示輸入登錄/密碼,您不能使用OpenID實現這一目標。我建議oauth這個用例。

10

我想你想要的是用AccountManager

要找出什麼類型的谷歌帳戶,使用類似:

AuthenticatorDescription[] types = mAccountManager.getAuthenticatorTypes(); // 
for (AuthenticatorDescription type : types) { 
    Log.d("account types", type.type); 
} 

然後像做

AccountManager mAccountManager = AccountManager.get(context); 
Account[] mAccounts = AccountManager.get(context).getAccountsByType("com.google"); 
// Choose which account to use if there are multiple google accounts registered, save to Account mAccount 
AccountManagerFuture<options> response = mAccountManager.getAuthToken(mAccount, type, options, activity, mCallback, mHandler); // define callback and handler yourself for where to return 

當用戶到達mHandler中的mCallback,登錄過程完成。如果用戶尚未登錄到他/她的Google帳戶,則會使用通常的Google登錄對話框。

親身體驗一下,讓我知道它是否對你有幫助!

+0

你有沒有嘗試過,如果這幫助你的? – 2010-10-10 21:15:29

+3

我想用類似的方法,但如何我的web服務驗證的authToken? – gotosleep 2011-03-01 15:40:13

+0

@gotosleep,我面臨着類似的問題這裏...我能找到的所有[this](http://stackoverflow.com/questions/9854781/it-is-possible-to-authenticate-a-google-user-the-one-logged-in-on -an-android-d?rq = 1),我不太喜歡它:(你有沒有想出更好的解決方案來解決這個問題?謝謝! – tnacho 2012-07-11 03:11:25