.GoogleAuthException: Неизвестно при выполнении единого входа в систему Google.

Исключение:

07-28 14:36:13.140: W/System.err(11382): com.google.android.gms.auth.GoogleAuthException: Unknown 07-28 14:36:13.140: W/System.err(11382): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 07-28 14:36:13.140: W/System.err(11382): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 07-28 14:36:13.148: E/AndroidRuntime(11382): FATAL EXCEPTION: main 

Мой код регистрации:

 public class Signup extends Activity { final private String CLIENT_ID = <android-client-id>; final private List<String> SCOPES = Arrays.asList(new String[]{ "https://www.googleapis.com/auth/plus.login" }); private String webId = <web-client-id>; private GoogleAccountCredential mCredential; private EditText mExchangeCodeEditText; private EditText mIdTokenEditText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_google); //mExchangeCodeEditText = (EditText) findViewById(R.id.editTextExchangeCode); // mIdTokenEditText = (EditText) findViewById(R.id.editTextIdToken); // initiate a credential object with drive and plus.login scopes // cross identity is only available for tokens retrieved with plus.login mCredential = GoogleAccountCredential.usingOAuth2(this, Arrays.asList(SCOPES.get(0))); // user needs to select an account, start account picker startActivityForResult( mCredential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); } /** * Handles the callbacks from result returning * account picker and permission requester activities. */ @Override protected void onActivityResult( final int requestCode, final int resultCode, final Intent data) { switch (requestCode) { // user has returned back from the account picker, // initiate the rest of the flow with the account he/she has chosen. case REQUEST_ACCOUNT_PICKER: String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME); if (accountName != null) { mCredential.setSelectedAccountName(accountName); new RetrieveExchangeCodeAsyncTask().execute(); new RetrieveJwtAsyncTask().execute(); } break; // user has returned back from the permissions screen, // if he/she has given enough permissions, retry the the request. case REQUEST_AUTHORIZATION: if (resultCode == Activity.RESULT_OK) { // replay the same operations new RetrieveExchangeCodeAsyncTask().execute(); new RetrieveJwtAsyncTask().execute(); } break; } } /** * Retrieves the exchange code to be sent to the * server-side component of the app. */ public class RetrieveExchangeCodeAsyncTask extends AsyncTask<Void, Boolean, String> { @Override protected String doInBackground(Void... params) { String scope = String.format("oauth2:server:client_id:%s:api_scope:%s", CLIENT_ID, TextUtils.join(" ", SCOPES)); try { GoogleAccountCredential.usingAudience(Signup.this, "server:client_id:" + webId); return GoogleAuthUtil.getToken( Signup.this, mCredential.getSelectedAccountName(), scope); } catch (UserRecoverableAuthException e) { startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); } catch (Exception e) { e.printStackTrace(); // TODO: handle the exception } return null; } @Override protected void onPostExecute(String code) { // exchange code with server-side to retrieve an additional // access token on the server-side. // mExchangeCodeEditText.setText(code); Log.d("code",code); } } /** * Retrieves a JWT to identify the user without the * regular client-side authorization flow. The jwt payload needs to be * sent to the server-side component. */ public class RetrieveJwtAsyncTask extends AsyncTask<Void, Boolean, String> { @Override protected String doInBackground(Void... params) { String scope = "audience:server:client_id:" + CLIENT_ID; try { return GoogleAuthUtil.getToken( Signup.this, mCredential.getSelectedAccountName(), scope); } catch(UserRecoverableAuthIOException e) { startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION); } catch (Exception e) { e.printStackTrace(); // TODO: handle the exception } return null; } @Override protected void onPostExecute(String idToken) { // exchange encrypted idToken with server-side to identify the user // mIdTokenEditText.setText(idToken); Log.d("idtoken",idToken); } } private static final int REQUEST_ACCOUNT_PICKER = 100; private static final int REQUEST_AUTHORIZATION = 200; } 

Я совершенно не знаю, что здесь происходит. Помогите?

У меня была схожая проблема. В моем случае проблема заключалась в пропущенном имени приложения в консоли Google.

Откройте консоль, перейдите к своему проекту и выберите «Экран согласия». Заполните поле «ИМЯ ПРОДУКТА» и сохраните.

Как и CheatEx, мне пришлось выбрать свой адрес электронной почты на странице «Согласие экрана» и сохранить.

Intereting Posts
Размытые изображения на Android-браузере Собственный адаптер синхронизации для Android? Ошибка в remoteMessage.getNotification (). GetBody () Почему агент пользователя отправляется как «Apache-HttpClient / UNAVAILABLE (java 1.4)» Восстановить представление в исходное состояние xml Обмен фрагментами с помощью hide и show со сдвигом слайдов приводит к исчезновению Библиотека Android Volley, не работающая с 204 и пустой ответ тела Разработка с помощью LibVLC для Android в Windows Как указать имя папки макетов для поддержки множественного размера экрана в android Добавление дополнительных изображений / значков в CardFragment (Android Wear) Синтаксическая ошибка: insert} для завершения ClassBody Видеоролик для захвата андроидов Как написать «во власть» и какой-нибудь текст, как показано на Java или Android? Прием данных с использованием устройства USB Host и FTDI Android-приложение, использующее android.permission.READ_LOGS – это невежливо?