M
MrJack
Ambitioniertes Mitglied
- 10
Hallo!
Schreibe grade eine Android-App, die per Restlet mit der AppEngine kommuniziert.
Meine App sieht folgendermaßen aus:
1) Beim allerersten Start wird der Benutzer gefragt, mit welchem Google Account er sich authentifizieren will:
2) Der ausgewählte Account wird in die SharedPreferences geschrieben UND in die AppEngine (habe dafür eine User-Tabelle)
3) Für die Verbindung zum Server hole ich mir ein Token und erzeuge daraus ein Cookie (dafür habe ich folgende Vorlage genommen: http://blog.notdot.net/2010/05/Authenticating-against-App-Engine-from-an-Android-app):
4) Daraus erzeuge ich wiederrum ein Restlet-Cookie und schicke es beim 1. Request mit:
5) Am Server prüfe ich bei den GET, PUT und DELETE Aktionen immer vorher, ob der User eingeloggt ist:
Jetzt zu meinen Fragen:
1) Muss ich das Cookie bei jedem Request mitschicken, oder reicht es beim ersten Mal?
2) Wie kann ich verhindern, dass bei jedem Start der App diese ganze Prozedur neu ausgeführt wird? Kann ich das Cookie irgendwie in den SharedPreferences speichern?
3) Was mach ich, wenn das Cookie abgelaufen ist bzw. woran erkenn ich das?
4) Soll ich das Cookie vergessen und einfach jedesmal das Token mitschicken? Das könnte man ja in den Preferences speichern (ist ja nur ein String). Nur zieht dann am Server die Prüfung "isUserLoggedIn", wenn ich nur das Token mitschicke?
5) Gibts für diese Szenario "Android -> App Engine -> Cookies" irgendein gutes Tutorial?
Danke
Schreibe grade eine Android-App, die per Restlet mit der AppEngine kommuniziert.
Meine App sieht folgendermaßen aus:
1) Beim allerersten Start wird der Benutzer gefragt, mit welchem Google Account er sich authentifizieren will:
Code:
AccountManager manager = AccountManager.get( this );
Account[] accounts = manager.getAccountsByType( "com.google" );
2) Der ausgewählte Account wird in die SharedPreferences geschrieben UND in die AppEngine (habe dafür eine User-Tabelle)
3) Für die Verbindung zum Server hole ich mir ein Token und erzeuge daraus ein Cookie (dafür habe ich folgende Vorlage genommen: http://blog.notdot.net/2010/05/Authenticating-against-App-Engine-from-an-Android-app):
Code:
AccountManager accountManager = AccountManager.get( getApplicationContext() );
accountManager.getAuthToken( account, "ah", false, new GetAuthTokenCallback(), null );
...
HttpGet http_get = new HttpGet( SERVER + "_ah/login?continue=http://localhost/&auth=" + token );
4) Daraus erzeuge ich wiederrum ein Restlet-Cookie und schicke es beim 1. Request mit:
Code:
ClientResource cr = new ClientResource( SERVER + "test" );
cr.getCookies().add( myCookie );
5) Am Server prüfe ich bei den GET, PUT und DELETE Aktionen immer vorher, ob der User eingeloggt ist:
Code:
if ( UserServiceFactory.getUserService().isUserLoggedIn() )
{
// ...
}
Jetzt zu meinen Fragen:
1) Muss ich das Cookie bei jedem Request mitschicken, oder reicht es beim ersten Mal?
2) Wie kann ich verhindern, dass bei jedem Start der App diese ganze Prozedur neu ausgeführt wird? Kann ich das Cookie irgendwie in den SharedPreferences speichern?
3) Was mach ich, wenn das Cookie abgelaufen ist bzw. woran erkenn ich das?
4) Soll ich das Cookie vergessen und einfach jedesmal das Token mitschicken? Das könnte man ja in den Preferences speichern (ist ja nur ein String). Nur zieht dann am Server die Prüfung "isUserLoggedIn", wenn ich nur das Token mitschicke?
5) Gibts für diese Szenario "Android -> App Engine -> Cookies" irgendein gutes Tutorial?
Danke