| |||||||
Das Thema "Android -> AppEngine Cookies" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Modell: Samsung Galaxy S (I9000) Registriert seit: 14.12.2011
Beiträge: 20
Abgegebene Danke: 8
Erhielt 0 Danke für 0 Beiträge
| 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" ); 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/Authe...-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 ); Code: ClientResource cr = new ClientResource( SERVER + "test" ); cr.getCookies().add( myCookie ); 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 |
| | |
| | #2 (permalink) |
| Neuer Benutzer Modell: Samsung Galaxy S (I9000) Registriert seit: 14.12.2011
Beiträge: 20
Abgegebene Danke: 8
Erhielt 0 Danke für 0 Beiträge
|
So, bin jetzt bei folgendem Stand: Ich habe mir eine eigene serialisierbare Klasse geschrieben, mit deren Hilfe ich meinen Cookie + Benutzer speichern kann: Code: public class SerializableCookie implements Serializable
{
private String name;
private String value;
private String domain;
private String path;
private int version;
private String username;
public SerializableCookie( Cookie cookie, String username )
{
this.name = cookie.getName();
this.value = cookie.getValue();
this.domain = cookie.getDomain();
this.path = cookie.getPath();
this.version = cookie.getVersion();
this.username = username;
}
//.... Danach hole ich mir mit diesem Account ein Token und dann von der AppEngine ein Cookie, welches ich (zusammen mit dem Benutzername = E-Mail-Adresse) in den SharedPreferences speichere. Diesen Cookie übergebe ich bei jedem Request. Funktioniert großartig, bis .... das Cookie abläuft! Laut Default-Einstellung in der AppEngine ist die Expiration 1 Tag (kann man bis auf 2 Wochen erhöhen). Ich müsste also eines der folgenden Vorschläge umsetzen: 1) Bei jedem Start ein neues Cookie anfordern (möchte ich irgendwie verhindern) 2) Erkennen, wann das Cookie abgelaufen ist und nur dann ein neues anfordern (wird wahrscheinlich aufwändiger als Punkt 1 sein) 3) Das Expiration Date der AppEngine auf unendlich setzen (geht das überhaupt und ist das sinnvoll?) 4) In den SharedPreferences speichern, wann das Cookie ablaufen wird und erst dann ein neues anfordern (Optimalfall?) Was kann ich also tun? |
| | |
| | #3 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Sensation Registriert seit: 31.08.2011
Beiträge: 390
Abgegebene Danke: 25
Erhielt 59 Danke für 57 Beiträge
|
Ich kenn mich mit Cookies nicht aus, aber laut API gibts die Methode: Cookie | Android Developers Das sollte doch helfen, oder nicht? ;-) |
| | |
| Folgender Benutzer bedankt sich bei Tom299 für diesen Beitrag: | MrJack (09.02.2012) |
| | #4 (permalink) | |
| Neuer Benutzer Modell: Samsung Galaxy S (I9000) Registriert seit: 14.12.2011
Beiträge: 20
Abgegebene Danke: 8
Erhielt 0 Danke für 0 Beiträge
| Zitat:
Danke für den Tipp, so funktioniert's. Edit: Ich habe jetzt aber doch noch 1 Problem! Im Emulator mit Version 2.2 funktioniert alles, auf meinem Gerät mit Version 4.0 leider nicht. Da bekomme ich beim Auslesen des Tokens immer null zurück: Code: bundle.getString( AccountManager.KEY_AUTHTOKEN ) <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.USE_CREDENTIALS"/> Geändert von MrJack (09.02.2012 um 16:58 Uhr) | |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Umzug auf neues Android / Transfer der Bookmarks und Cookies | niko26 | Kommunikation | 3 | 25.01.2012 16:02 |
| Cookies machen Probleme | bauerdirk | Asus Eee Pad Transformer Forum | 5 | 07.11.2011 12:41 |
| Cookies löschen in Dolphin Browser HD 5.1.0 | Klicker | Kommunikation | 2 | 17.10.2011 20:52 |
| Cookies einstellen im Browser | casy34 | Motorola Defy Forum | 6 | 24.07.2011 06:30 |
| Automatisch Cookies löschen | Murphy | LG GT540 Forum | 0 | 10.11.2010 14:19 |