2012-10-02 5 views
9

Update:Neu veröffentlichte „Authentifizierung mit Google Play-Dienste“, Probleme mit einem Token über GoogleAuthUtil.getToken bekommen

Gerade jetzt habe ich unterschrieben mit dem Google-Konto bei Google API up Ich bin auch für die Google App Engine und jetzt hat sich der Fehler geändert com.google.android.gms.auth.GoogleAuthException: Unknown


Google gerade eine neue Art und Weise zu sign up to one's app via a Google Account veröffentlicht und hat eine Erklärung in ihrer blogpost auch gegeben.

Ich schreibe eine Android-App, für die Sie sich anmelden müssen, um ein Benutzerkonto zu erstellen, und ich verwende Google App Engine für das Back-End. Mit den Play-Diensten möchte ich den Nutzern eine E-Mail mit ihrem Android-Gerät und einem Token zukommen lassen. Ich kann die E-Mail schon bekommen, aber das Token bekommt nur Fehler, und da die Dokumentation ziemlich spärlich ist, weiß ich nicht, wie ich diese beheben kann. Das ist, wie ich die E-Mail erhalten:

private String[] getAccountNames() { 
    mAccountManager = AccountManager.get(this); 
    Account[] accounts = mAccountManager.getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 
    names = new String[accounts.length]; 
    for (int i = 0; i < names.length; i++) { 
     names[i] = accounts[i].name; 
    } 

    return names; 
} 

jedoch, wenn ich token = GoogleAuthUtil.getToken(context, email, "scope" Aufruf, es gibt mir diese Fehler: GooglePlayServices not available due to error 1 und com.google.android.gms.auth.GooglePlayServicesAvailabilityException: GooglePlayServicesNotAvailable.

Jetzt ist meine Frage, muss ich irgendwelche Berechtigungen einstellen oder irgendwelche Bibliotheken einschließen, um das zu beheben? Und was ist der Umfangsparameter? Ein Beispiel dafür, wie man ein Token bekommt und was man für den Gültigkeitsbereich eingeben kann, ist in seinem Blogpost angegeben, um die Gültigkeitsbereichsvariable auf "https://www.googleapis.com/auth/userinfo.profile" zu setzen, aber ich erhalte leider immer noch den gleichen Fehler.

Ich habe auch meine App für die Google API-Konsole registriert und die G + API aktiviert, muss ich dort auch noch etwas anderes konfigurieren?

Antwort

2

Sie können nur Token für Google-Dienste erhalten, die OAuth2 unterstützen. Wenn Sie Ihren eigenen Webservice schreiben, sollten Sie sich authentifizieren, indem Sie seinen nativen Authentifizierungsmechanismus (Benutzername und Passwort?) Verwenden. "Umfang" ist offensichtlich ein ungültiger Bereich, aber anscheinend haben Sie Google Play Services nicht installiert, und das ist die Ursache für Ihren Fehler. Sie können es aus dem Play Store installieren, aber es wird nicht wirklich funktionieren, da Sie keinen Google-Dienst verwenden.

+1

Danke, ich bin zwar eigentlich mit Google App Engine. Ich habe mich jedoch gerade mit dem richtigen Google-Konto angemeldet, mit dem ich auch die Google App Engine verwende. Die Fehlermeldung wurde nun in com.google.android.gms.auth.GoogleAuthException geändert: Unbekannt. –

+0

Wenn Sie versuchen, GAE mit OAuth2 zu authentifizieren, funktioniert das nur, wenn Sie Endpoints verwenden, die nur für vertrauenswürdige Tester verfügbar sind. Welchen Umfang möchten Sie verwenden? Pflegen Sie auch die vollständige Stapelverfolgung. –

+0

Ich hatte vergessen den SHA1-Schlüssel meiner Android App im Google API zu aktualisieren. Jetzt erhalte ich einen Token mit dem Geltungsbereich "oauth2: https: //www.googleapis.com/auth/plus.me" ;. Löst das alles und ist das der richtige Umfang? Was ist mit dem Umfang "https://www.googleapis.com/auth/userinfo.profile" ;? –

3

erstes müssen Sie das richtig formatiert Umfang, wie dies passieren:

private final static String G_PLUS_SCOPE = 
     "oauth2:https://www.googleapis.com/auth/plus.me"; 
    private final static String USERINFO_SCOPE = 
     "https://www.googleapis.com/auth/userinfo.profile"; 
    private final static String SCOPES = G_PLUS_SCOPE + " " + USERINFO_SCOPE; 

Sie müssen auch Google von hier, https://play.google.com/store/apps/details?id=com.google.android.gms Play-Dienste installieren. Die Google Play-Dienste werden auf allen Geräten mit Google Play installiert (Froyo +).

Es gibt mehr Informationen hier zu finden: http://android-developers.blogspot.com/2012/09/google-play-services-and-oauth-identity.html

20

Ich hatte das gleiche Problem, die Google-Client-Bibliothek für Google Drive. Die Lösung ist ziemlich einfach. Stellen Sie "oauth2:" Ihrem scopeUrl vor.

Falsch:

GoogleAuthUtil.getToken(this, account.name, DriveScopes.DRIVE); 

Rechts:

GoogleAuthUtil.getToken(this, account.name, "oauth2:" + DriveScopes.DRIVE); 
+0

Dies funktionierte für mich beim Versuch, auf Google Reader zuzugreifen. – losttime

+2

Danke! Arbeitete auch für mich. Für mehrere Bereiche können Sie "oauth2: scope1 scope2 scope3" mit Leerzeichen definieren, die jeden Bereich begrenzen. – Yuntao

+0

Danke! Es hilft mir, Zugriffstoken zu erhalten – ihrupin