Próbuję uzyskać kod autoryzacji Google+ na podstawie tego artykułu: Server-side access for your app. Jednak, gdy uruchamiam moją aplikację i spróbować uzyskać kod pojawia się następujący w LogCat:Android Google+ nie może uzyskać kodu autoryzacji
07-23 23:42:31.760: E/getAccessToken()(11114): [ERROR] GoogleAuthException: com.google.android.gms.auth.GoogleAuthException: Unknown
przeglądałem wiele rzeczy iz tego co mogę powiedzieć, mam setup wszystko poprawnie w poniższym kodzie. Jakieś pomysły, dlaczego nie otrzymuje tokena uwierzytelnienia?
FYI, mam jedną konfigurację projektu w konsoli API, która ma zarówno aplikację, jak i aplikacje internetowe skonfigurowane dla oautha i używam identyfikatora serwera (nie aplikacji) dla łańcucha zakresów. Podążałem również za przykładem (-ami) z powyższego linku, a aplikacja działa dobrze i pozwala na zalogowanie się/wylogowanie, ale po prostu nie mogę uzyskać kodu auth.
private String getAccessToken() {
String scopesString = Scopes.PLUS_LOGIN + " " + Scopes.PLUS_PROFILE;
String scope = "oauth2:server:client_id:" + SERVER_CLIENT_ID + ":api_scope:" + scopesString;
Bundle appActivities = new Bundle();
appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES,
"http://schemas.google.com/AddActivity");
String code = null;
try {
code = GoogleAuthUtil.getToken(
this, // Context context
mPlusClient.getAccountName(), // String accountName
scopes, // String scope
appActivities // Bundle bundle
);
} catch (IOException transientEx) {
// network or server error, the call is expected to succeed if you try again later.
// Don't attempt to call again immediately - the request is likely to
// fail, you'll hit quotas or back-off.
Log.e("getAccessToken()", "[ERROR] IOException: " + transientEx);
return null;
} catch (UserRecoverableAuthException e) {
// Recover
Log.e("getAccessToken()", "[ERROR] UserRecoverableAuthException: " + e);
code = null;
} catch (GoogleAuthException authEx) {
// Failure. The call is not expected to ever succeed so it should not be
// retried.
Log.e("getAccessToken()", "[ERROR] GoogleAuthException: " + authEx);
return null;
} catch (Exception e) {
Log.e("getAccessToken()", "[ERROR] Exception: " + e);
throw new RuntimeException(e);
}
return code;
}
Przepraszam, moje złe. Wygląda na to, że usunąłem tę część, kiedy ją opublikowałem, mam ": api_scope:" w moim kodzie. Zaktualizowałem wpis, aby to pokazać. – Jason
Ahhh ... Tęskniłem za oddzielaniem zakresuString na końcu. Wprowadziłem tę zmianę i teraz pojawia się błąd "UserRecoverableAuthException: NeedPermission". Próbowałem to obsługiwać, ale teraz mam po prostu [ten problem] (http://stackoverflow.com/questions/17713435/android-google-integration-repeated-userrecoverable wyjątek). Zaznaczę to jako poprawne, ponieważ rozwiązało początkowy problem, który miałem ... głupią nocną pomyłkę ;-) – Jason
Od tego czasu metoda GoogleAuthUtil.getToken() zaczęła wyrzucać wyjątek GoogleAuthException z komunikatem "BadUsername" dla wiadomości e-mail który nie jest zarejestrowany na urządzeniu, zamiast poprzedniego wyjątku IllegalArgumentException z komunikatem "Nieistniejące konto" email_address ""? http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html#getToken(android.content.Context, java.lang.String, java.lang.String) – toobsco42