Ich bin ziemlich frustriert. Ich versuche, ein rundenbasiertes Mehrspieler-Online-Spiel für Android unter Verwendung von Google App Engine in Java als Server zu erstellen.
Sie scheinen perfekt zueinander zu passen. Android erfordert ein Google-Konto und GAE verwendet ein Google-Konto zur Authentifizierung, während es kostenlos und skalierbar ist.
Vor den Feiertagen konnte ich die Authentifizierung meiner GAE-App von meinem Android-Client aus mit der neuen AccountManager-API in Android 2.0 durchführen. Der folgende Code ermöglicht es Ihnen, auf das AuthToken des Google-Kontos des Benutzers zuzugreifen und es dann zur Authentifizierung zu verwenden, sodass der Benutzer seinen Kontonutzernamen und sein Passwort nicht manuell eingeben muss:
AccountManager mgr = AccountManager.get(this);
Account[] accts = mgr.getAccountsByType("com.google");
Account acct = accts[0];
AccountManagerFuture accountManagerFuture = mgr.getAuthToken(acct, "ah", null, this, null, null);
Bundle authTokenBundle = accountManagerFuture.getResult();
String authToken = authTokenBundle.get(AccountManager.KEY_AUTHTOKEN).toString();
Dann konnte ich den resultierenden AuthToken-String an die entsprechende URL anhängen und ein gültiges Cookie erhalten, das ich dann für alle weiteren Anfragen verwenden konnte. Das Einzige ist, dass es letzte Woche einfach aufgehört hat, für mich zu funktionieren. Jetzt, wenn ich versuche, den AuthToken aus dem obigen Code zu verwenden, wird kein Cookie zurückgegeben und mein Code wirft eine NullPointerException für das fehlende Cookie.
Wenn ich auf die alte Methode zurückgehe, bei der der Benutzer seinen Google-Benutzernamen und sein Passwort manuell eingibt und ich das AuthToken von "https://www.google.com/accounts/ClientLogin" erhalte, funktioniert es einwandfrei.
Bitte sagen Sie mir, dass jemand da draußen einen Android-Client für eine Google App Engine-App erstellt hat, der das AuthToken vom Google-Konto auf dem Smartphone des Benutzers verwendet, und geben Sie mir einen Hinweis, warum dies nicht mehr funktioniert.
Ich möchte wirklich, dass dies funktioniert. Meine Alternativen bestehen darin, den Benutzer aufzufordern, seine Anmeldedaten einzugeben (was umständlich ist und was er nicht tun sollte) oder eine andere Lösung für den Server zu wählen.
Vielen Dank im Voraus.
0 Stimmen
Können wir dies auf einem Emulator testen, der Google APIs ausführt?
1 Stimmen
Für diejenigen, die sich fragen, was die "angemessene URL" ist und wie man "einen gültigen Cookie erhalten" kann, ist dies übersichtlich in diesem Blog-Beitrag erklärt, der auch die Ungültigmachung des AuthTokens behandelt.