Jetzt kostenlos registrieren. Mitglieder surfen ohne Werbung auf Android-Hilfe.de!
Zurück   Android-Hilfe.de > Android Developer > Android App Entwicklung

Android -> AppEngine Cookies

Das Thema "Android -> AppEngine Cookies" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.


Antwort

 

Themen-Optionen Ansicht
Alt 26.01.2012, 16:27   #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
Standard Android -> AppEngine Cookies

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:
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/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 );
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
MrJack ist offline   Mit Zitat antworten
Alt 08.02.2012, 13:35   #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
Standard AW: Android -> AppEngine Cookies

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;
    }
    //....
Beim Start der App prüfe ich, ob in den SharedPreferences ein SerializableCookie gespeichert ist. Wenn ja, verwende ich diesen. Wenn nicht, fordere ich den Benutzer auf, einen Google Account auszuwählen.
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?
MrJack ist offline   Mit Zitat antworten
Alt 09.02.2012, 07:30   #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
Standard AW: Android -> AppEngine Cookies

Ich kenn mich mit Cookies nicht aus, aber laut API gibts die Methode:
Cookie | Android Developers

Das sollte doch helfen, oder nicht? ;-)
Tom299 ist offline   Mit Zitat antworten
Folgender Benutzer bedankt sich bei Tom299 für diesen Beitrag:
MrJack (09.02.2012)
Alt 09.02.2012, 16:18   #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
Standard AW: Android -> AppEngine Cookies

Zitat:
Zitat von Tom299 Beitrag anzeigen
Ich kenn mich mit Cookies nicht aus, aber laut API gibts die Methode:
Cookie | Android Developers

Das sollte doch helfen, oder nicht? ;-)
Omg, ich glaube ich bin blind!
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 )
Hats da irgendein Berechtigungsproblem? Ich habe folgende Permissions in der manifest definiert:
<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)
MrJack ist offline   Mit Zitat antworten
Antwort

Stichworte
-

Themen-Optionen
Ansicht


Ähnliche Themen

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




Du liest gerade: "Android -> AppEngine Cookies" unter "Android App Entwicklung" auf Android-Hilfe.de.


Powered by vBulletin®
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Search Engine Friendly URLs by vBSEO
© Android-Hilfe.de 2012 - All rights reserved.