Unregistered on api console как исправить

I've been encountering a plethora of issues with this current project, which can be found in the other questions that I have posted on StackOverflow (one of which is unsolved), but after dodging my...

I’ve been encountering a plethora of issues with this current project, which can be found in the other questions that I have posted on StackOverflow (one of which is unsolved), but after dodging my other issue in a way that allows me to test, but not actually release, the app, I’ve encountered another error;
In this code:

public class AsyncSheetUpdater extends AsyncTask<String, Void, String> {

    Master activity;

    @Override
    protected String doInBackground(String... urls) {
        GoogleAccountCredential credential;

        Sheets mService;

        credential = GoogleAccountCredential.usingOAuth2(activity.getApplicationContext(), Collections.singletonList(SheetsScopes.SPREADSHEETS))
                .setBackOff(new ExponentialBackOff())
                .setSelectedAccountName("oscarcookeabbott@gmail.com");

        HttpTransport transport = AndroidHttp.newCompatibleTransport();
        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();

        mService = new Sheets.Builder(transport, jsonFactory, credential)
                .setApplicationName(activity.getString(R.string.app_name))
                .setSheetsRequestInitializer(new SheetsRequestInitializer("AIzaSyBreJks4awhrSbyqGkZhgR4rAA61vg0t-g"))
                .build();

        ValueRange values = new ValueRange();
        values.set("EMAIL", "[INSERT EMAIL]");
        values.set("AUTH", "[INSERT DATE]");
        values.set("SUB", "[INSERT DATE + MONTH]");

        try {
            mService.spreadsheets().values().append("1meAAvjdPmghn6wl_IKc-_NJx_M85I_yqsn4Nwm_j_X0", "Users", values)
                    .setValueInputOption("RAW")
                    .execute();
        } catch (IOException e) {
            Log.e("DEBUG", "SheetUpdate Exception: ", e);
        }

        return null;
    }
}

It is returning this error:

com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException
   at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:301)
   at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:868)
   at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
   at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
   at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
   at com.pybuspr.listeau.AsyncSheetUpdater.doInBackground(AsyncSheetUpdater.java:58)
   at com.pybuspr.listeau.AsyncSheetUpdater.doInBackground(AsyncSheetUpdater.java:20)
   at android.os.AsyncTask$2.call(AsyncTask.java:304)
   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)
Caused by: com.google.android.gms.auth.GoogleAuthException: UNREGISTERED_ON_API_CONSOLE
   at com.google.android.gms.auth.zze$1.zzbt(Unknown Source)
   at com.google.android.gms.auth.zze$1.zzbu(Unknown Source)
   at com.google.android.gms.auth.zze.zza(Unknown Source)
   at com.google.android.gms.auth.zze.zzc(Unknown Source)
   at com.google.android.gms.auth.zze.getToken(Unknown Source)
   at com.google.android.gms.auth.zze.getToken(Unknown Source)
   at com.google.android.gms.auth.zze.getToken(Unknown Source)
   at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
   at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:269)
   at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:294)

This is what my Google APIs Credentials look like:
enter image description here

I was really hoping that sheet editing was going to be simple, such as how you can use a straight JSON feed of a Sheet without using the APIs, but it seems I was mistaken.

I’ve been encountering a plethora of issues with this current project, which can be found in the other questions that I have posted on StackOverflow (one of which is unsolved), but after dodging my other issue in a way that allows me to test, but not actually release, the app, I’ve encountered another error;
In this code:

public class AsyncSheetUpdater extends AsyncTask<String, Void, String> {

    Master activity;

    @Override
    protected String doInBackground(String... urls) {
        GoogleAccountCredential credential;

        Sheets mService;

        credential = GoogleAccountCredential.usingOAuth2(activity.getApplicationContext(), Collections.singletonList(SheetsScopes.SPREADSHEETS))
                .setBackOff(new ExponentialBackOff())
                .setSelectedAccountName("oscarcookeabbott@gmail.com");

        HttpTransport transport = AndroidHttp.newCompatibleTransport();
        JsonFactory jsonFactory = JacksonFactory.getDefaultInstance();

        mService = new Sheets.Builder(transport, jsonFactory, credential)
                .setApplicationName(activity.getString(R.string.app_name))
                .setSheetsRequestInitializer(new SheetsRequestInitializer("AIzaSyBreJks4awhrSbyqGkZhgR4rAA61vg0t-g"))
                .build();

        ValueRange values = new ValueRange();
        values.set("EMAIL", "[INSERT EMAIL]");
        values.set("AUTH", "[INSERT DATE]");
        values.set("SUB", "[INSERT DATE + MONTH]");

        try {
            mService.spreadsheets().values().append("1meAAvjdPmghn6wl_IKc-_NJx_M85I_yqsn4Nwm_j_X0", "Users", values)
                    .setValueInputOption("RAW")
                    .execute();
        } catch (IOException e) {
            Log.e("DEBUG", "SheetUpdate Exception: ", e);
        }

        return null;
    }
}

It is returning this error:

com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException
   at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:301)
   at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:868)
   at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:419)
   at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:352)
   at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:469)
   at com.pybuspr.listeau.AsyncSheetUpdater.doInBackground(AsyncSheetUpdater.java:58)
   at com.pybuspr.listeau.AsyncSheetUpdater.doInBackground(AsyncSheetUpdater.java:20)
   at android.os.AsyncTask$2.call(AsyncTask.java:304)
   at java.util.concurrent.FutureTask.run(FutureTask.java:237)
   at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:243)
   at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
   at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
   at java.lang.Thread.run(Thread.java:761)
Caused by: com.google.android.gms.auth.GoogleAuthException: UNREGISTERED_ON_API_CONSOLE
   at com.google.android.gms.auth.zze$1.zzbt(Unknown Source)
   at com.google.android.gms.auth.zze$1.zzbu(Unknown Source)
   at com.google.android.gms.auth.zze.zza(Unknown Source)
   at com.google.android.gms.auth.zze.zzc(Unknown Source)
   at com.google.android.gms.auth.zze.getToken(Unknown Source)
   at com.google.android.gms.auth.zze.getToken(Unknown Source)
   at com.google.android.gms.auth.zze.getToken(Unknown Source)
   at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source)
   at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:269)
   at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:294)

This is what my Google APIs Credentials look like:
enter image description here

I was really hoping that sheet editing was going to be simple, such as how you can use a straight JSON feed of a Sheet without using the APIs, but it seems I was mistaken.

Im implementing an android app that enables users to stream to a youtube channel straight from the app. I have created an API key and a OAuth 2.0 client ID

But I get a the following exeption: com.google.android.gms.auth.GoogleAuthException: UNREGISTERED_ON_API_CONSOLE either when I try to ceate an event or when i try to fetch the one a created manually on the youtube channel.

I use the following code for create a youtube object

String accountName = mContext.getString(R.string.google_account_name);
        String apiKey = mContext.getString(R.string.google_api_key);
        String clientID = mContext.getString(R.string.google_api_client_id);
        String clientName = mContext.getString(R.string.google_api_client_name);

        GoogleAccountCredential credential =
                GoogleAccountCredential.usingOAuth2(mContext,
                        Arrays.asList(YouTubeScopes.YOUTUBE));
        credential.setSelectedAccountName(accountName);

//        String SCOPE = "audience:server:client_id:" + clientID + ":api_scope:" + YouTubeScopes.YOUTUBE;
//        GoogleAccountCredential credential = GoogleAccountCredential.usingAudience(mContext, SCOPE);
//        credential.setSelectedAccountName(accountName);


        youtube = new YouTube.Builder(transport, jsonFactory, credential)
                .setApplicationName(clientName)
                .setYouTubeRequestInitializer(new YouTubeRequestInitializer(apiKey))
                /*.setGoogleClientRequestInitializer(new YouTubeRequestInitializer(apiKey))*/
                .build();

Then to create an event:

LiveBroadcastSnippet broadcastSnippet = new LiveBroadcastSnippet();
        broadcastSnippet.setTitle(name);
        broadcastSnippet.setScheduledStartTime(new DateTime(futureDate));

        LiveBroadcastContentDetails contentDetails = new LiveBroadcastContentDetails();
        MonitorStreamInfo monitorStream = new MonitorStreamInfo();
        monitorStream.setEnableMonitorStream(false);
        contentDetails.setMonitorStream(monitorStream);

        // Create LiveBroadcastStatus with privacy status.
        LiveBroadcastStatus status = new LiveBroadcastStatus();
        status.setPrivacyStatus("unlisted");

        LiveBroadcast broadcast = new LiveBroadcast();
        broadcast.setKind("youtube#liveBroadcast");
        broadcast.setSnippet(broadcastSnippet);
        broadcast.setStatus(status);
        broadcast.setContentDetails(contentDetails);

        // Create the insert request
        YouTube.LiveBroadcasts.Insert liveBroadcastInsert = youtube
                .liveBroadcasts().insert("snippet,status,contentDetails",
                        broadcast);

        // Request is executed and inserted broadcast is returned
        LiveBroadcast returnedBroadcast = liveBroadcastInsert.execute(); //<= This line generates the exception

I obviously did something wrong, but I can’t figure out what. Any help is appreciated. Thanks in advance

мы находимся под Android (Jellybean и выше), и у нас есть приложение, которое должно использовать OAuth2 с Google для аутентификации.

я упростил активность входа в систему, но это выглядит так:

AccountManager mAccountManager;
// [...]
Account account = new Account("myEmail@gmail.com", "com.google");
// same with professional email managed by Google as myEmail@myDomain.com
// real code recovers accounts with mAccountManager.getAccountsByType("com.google")
mAccountManager = AccountManager.get(getBaseContext());
mAccountManager.getAuthToken(account, "oauth2:https://www.googleapis.com/auth/userinfo.email", null, MyActivity.this, new AccountManagerCallback<Bundle>() {
    @Override
    public void run(AccountManagerFuture<Bundle> accountManagerFuture) {
        try {
            String token = accountManagerFuture.getResult().getString(AccountManager.KEY_AUTHTOKEN);
            // exception occurs here
            // [...]
        } catch (Exception e) {
            Log.e("account", "exception occurs", e);
        }
    }
}, null);

когда мы называем accountManagerFuture.getResult(), он запускает это исключение:

android.accounts.AuthenticatorException: UNREGISTERED_ON_API_CONSOLE
    at android.accounts.AccountManager.convertErrorToException(AccountManager.java:2024)
    at android.accounts.AccountManager.access0(AccountManager.java:144)
    at android.accounts.AccountManager$AmsTask$Response.onError(AccountManager.java:1867)
    at android.accounts.IAccountManagerResponse$Stub.onTransact(IAccountManagerResponse.java:69)
    at android.os.Binder.execTransact(Binder.java:446)

Я не могу найти ни дока об этом, ни других людей с тем же исключением, и я совсем запутался: вызов AccountManager.getAuthToken предоставляет только учетную запись (имя и тип), объем и метод обратного вызова, нет параметра, чтобы указать приложение или что-то, что я мог бы настроить в консоли API dev.

Я уверен, что что-то упускаю, но что?

6 ответов


Ну, я, наконец, понял это. Не уверен, что я неправильно прочитал документацию или если есть недостающие ссылки, но в любом случае.

факт в том, что когда вы подписываете APK, а затем спрашиваете Google о токене OAuth2, вы должны зарегистрировать подписанное приложение через консоль разработчика. Это мера безопасности, основанная на имени пакета приложения и отпечатке пальца sha1.

чтобы сделать это, вам надо :

  1. подпишите свой APK, вручную или через Gradle или что угодно: документация для Android довольно ясно на этом шаге;
  2. получите отпечаток пальца sha1; как упоминается в это так ответ, это своего рода легко на Android Studio: в панели Gradle выберите signingReport задача под вашим корневым проектом и запустите его — отпечаток SHA1 будет отображаться в текстовом выходе;
  3. зарегистрируйте свой APK через консоль Google dev: создайте новые учетные данные / идентификатор клиента OAuth / Android, определенный SHA1 отпечаток пальца вы получили и Ваше имя пакета APK.

и вуаля!

для информации, единственная официальная документация, которую я нашел, объясняющая, почему и как из двух последних шагов здесь:
https://developers.google.com/drive/android/auth

31

автор: Xavier Portebois


для тех, кто все еще борется с этим, вот что сработало для меня:

Если вы зарегистрируете свое приложение в Google Play App Подписание программа, то ваше хранилище ключей не используется де-факто, чтобы подписать приложение, как только оно достигнет play store-вот почему отпечатки пальцев не совпадают.

Google удаляет ваш сертификат и создает новый сертификат подписи, который используется для подписания APK.

в игровой консоли перейдите в релиз Управление — > App signing

Если вы выбрали Google Play App Подписание, вы увидите там 2 сертификата вместе со всеми их отпечатками пальцев. Используйте Сертификат Подписи Приложения отпечаток пальца вместо Загрузить Сертификат это хранилище ключей.


не хватает репутации, чтобы прокомментировать принятый ответ…

Регистрация моего приложения в консоли Google dev не работала для меня. Оказалось,что поскольку я использовал сборку debug gradle, мне пришлось добавить».отладка» к имени пакета в консоли разработчика Google.

Я узнал об этом, отладив код Android AccountManager. Когда я вошел в код, я заметил, что переменная для имени пакета моего приложения имела «.debug » в конце концов. Поэтому вместо использования фактическое имя пакета » com.пакет.имя «в консоли Google dev я изменил его на» com.пакет.имя.debug», который исправил исключение UNREGISTERED_ON_API_CONSOLE для меня.

причина этого в том, что мой отладочный buildType в gradle имел «applicationIdSuffix».отлаживать.'»


для меня решения выше не работают вообще. Я наконец-то сам разбираюсь с этим жуком.
У меня есть несколько папок в моем рабочем пространстве, и каждый из них имеет свои собственные Манифест.в XML file, что означает, что у них разные имена пакетов. В этом случае, когда мы регистрируемся в Google API, мы должны использовать имя пакета в файле построить.Gradle в свойство applicationId.
Тогда вот оно.


спасибо Ксавье Портебуа, ваш ответ действительно помог. Мне пришлось сделать еще два шага.

  • убедитесь, что вы включили API для службы, которую вы используете (в моем случае API календаря) в той же консоли Google dev
  • Если вы используете подпись приложения Google Play, вы не хотите использовать отпечаток пальца debug SHA из Android Studio. Вместо этого перейдите в консоль публикации приложений — > управление выпуском — > подпись приложения. Используйте отпечаток пальца SHA-1 из подписи приложения сертификат. 2-я строка на этом скриншоте

Спасибо за содержательный ответ!


для меня проблема заключалась в подписи-отпечатке сертификата (SHA-1) приложения отладки, и приложение выпуска не совпадает при обновлении приложения и изменении имени пакета. Я потратил дни, проверяя имя пакета, а затем выяснил, что проблема-это имя пакета.

чтобы получить правильный ключ SHA-1, Следуйте этому S. O post, затем используйте этот ключ для создания нового идентификатора клиента OAuth для вашего приложения.


Понравилась статья? Поделить с друзьями:
  • Unreal engine 4 package error
  • Unrecovered read error cdb
  • Update for windows 10 version 1709 for x64 based systems kb4041994 ошибка 0x80070643
  • Unreal engine 4 fatal error windows 10
  • Unrecoverable syntax error 100 scanned