2010-07-25 6 views
21

Ich bin ein neuer Entwickler auf Googles Android Platform - mein HTC Desire kam letzte Woche an.OpenID für Android-Anwendungen, die SignIn benötigen

Jetzt brauche ich einen Weg, um mich in meine bestehende Anwendung (Java, derzeit auf Jetty läuft) anmelden. Die Server-Anwendung entwickelt wird, mit Feder Sicherheit 3.0.2

In meinem Fall möchte ich folgendes unterstützen: Wenn ein Benutzer seine Android-Handy mit einem Googlemail/google-Konto (und die meisten Benutzer tun) gesetzt Ich möchte diese Kontoanmeldeinformationen verwenden, um mich automatisch bei meiner Server-App anzumelden.

Gibt es ein Android-Framework, das diesen Anwendungsfall unterstützt? Oder gibt es Alternativen?

wir lesen: http code.google.com intl/de-DE/api/accounts/docs/OpenID.html

Wie wir mit einer App auf Google App Engine melden in ist hier beschrieben: http://blog.notdot.net/2010/05/Authenticating-against-App-Engine-from-an-Android-app

+1

Könnten Sie es am Ende zu arbeiten? Ich versuche, ein sehr ähnliches Problem zu lösen, und alles, was ich finden konnte, war [dies] (http://stackoverflow.com/questions/9854781/it-ist-possible-to-authenticate-a-google-user-the-) -ein-eingeloggt-auf-einem-android-d? rq = 1) (siehe die Kommentare für die vorgeschlagene Lösung), aber ich finde diese Lösung ziemlich schlecht (Ich möchte den Benutzer nicht fragen Gewähren Sie mir die Erlaubnis, auf seine Kontakte zuzugreifen :() – tnacho

Antwort

2

Ich bin mir nicht sicher, ob ich verstehe, wo der Benutzer angemeldet sein soll.

Beachten Sie, dass Sie nicht davon ausgehen können, welcher Webbrowser verwendet wird (Standardbrowser, Opera Mobile, Herstellerbrowser usw.) Wenn Sie nur eine Website anbieten, ist es die Verantwortung des Webbrowsers, den Benutzer zu kennen. Die meisten Leute habe ich bereits in ihrem Google-Konto eingeloggt. Android ist hier irgendwie nicht synchronisiert.

Wenn Sie möchten, dass Ihre Android-Anwendung eine Verbindung zu einem Webdienst herstellt, ohne nach einem Login/Passwort zu fragen, können Sie dies nicht mit openID erreichen. Ich empfehle oauth für diesen Anwendungsfall.

10

Ich denke, was Sie wollen, ist AccountManager

verwenden, um herauszufinden, was das Google-Konto eingeben, verwenden Sie ist so etwas wie:

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

Dann tun Sie etwas wie

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 

Wenn Der Benutzer erreicht mCallback in Ihrem mHandler, der Anmeldevorgang ist abgeschlossen. Der übliche Google-Login-Dialog wird verwendet, wenn der Benutzer nicht bereits in seinem Google-Konto angemeldet ist.

Probieren Sie es selbst aus und lassen Sie mich wissen, wenn es Ihnen geholfen hat!

+0

Haben Sie versucht, wenn dies Ihnen geholfen hat? –

+3

Ich denke über einen ähnlichen Ansatz, aber wie validiert mein Webservice die authtoken? – gotosleep

+0

@gotosleep, ich bin mit einem ähnlichen Problem konfrontiert hier ... Alles, was ich finden konnte, war [dies] (http://stackoverflow.com/questions/9854781/it-ist-possible-to-authenticate-a-google-user-the-one-logged-in-on) -an-android-d? rq = 1) und ich mag es nicht wirklich :(, hast du eine bessere Lösung für dieses Problem gefunden? Danke! – tnacho

Verwandte Themen