Ошибка GLS: INVALID_AUDIENCE в конечных точках Google

Я пытаюсь получить конечные точки google для работы. Я создал службу конечных точек и смог проверить, что она отлично работает с помощью Google API. Затем я сгенерировал клиент android и попытался вызвать службу конечной точки. Я вижу эту ошибку в журнале,

04-05 08:48:20.547: I/GLSUser(13505): GLS error: INVALID_AUDIENCE myemail@gmail.com audience:server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com 

Вот мой код java для Android, чтобы создать учетные данные, используемые для доступа к моему сервису,

 AUDIENCE = "server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com"; credential = GoogleAccountCredential.usingAudience(this, AUDIENCE); setAccountName(settings.getString(PREF_ACCOUNT_NAME, null)); 

Похоже, что в client_id существует некоторая несоответствие. Вот что я сделал,

1) Создал 2 client_ids в консоли API Google в одном проекте API, a) WEB_CLIENT_ID = Я создал client_id для веб-приложений с URI Redirect = Нет и исходное имя JavaScript = Нет. B) ANDROID_CLIENT_ID = Создал client_id для приложения android с именем пакета и оттиском сертификата sha1.

2) Затем они использовались в моей службе конечных точек в python,

 @endpoints.api(name='devices', version='v1', description='Service to register devices', allowed_client_ids=[ANDROID_CLIENT_ID,WEB_CLIENT_ID,endpoints.API_EXPLORER_CLIENT_ID], audiences = [WEB_CLIENT_ID]) 

Полный журнал

 04-05 08:48:20.397: D/overlay(159): Set pipe=RGB1 dpy=0; Set pipe=VG0 dpy=0; 04-05 08:48:20.547: W/GLSUser(13505): Status from wire: INVALID_AUDIENCE status: null 04-05 08:48:20.547: W/GLSUser(13505): Status from wire: INVALID_AUDIENCE status: null 04-05 08:48:20.547: I/GLSUser(13505): GLS error: INVALID_AUDIENCE myemail@gmail.com audience:server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com 04-05 08:48:20.547: W/GLSUser(13505): Status from wire: Unknown status: UNKNOWN 04-05 08:48:20.547: W/System.err(31908): com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException 04-05 08:48:20.547: W/System.err(31908): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:224) 04-05 08:48:20.547: W/System.err(31908): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:836) 04-05 08:48:20.547: W/System.err(31908): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:412) 04-05 08:48:20.557: W/System.err(31908): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:345) 04-05 08:48:20.557: W/System.err(31908): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:463) 04-05 08:48:20.557: W/System.err(31908): at com.package.appname.SetupActivity$SendResultToServerTask.doInBackground(SetupActivity.java:174) 04-05 08:48:20.557: W/System.err(31908): at com.package.appname.SetupActivity$SendResultToServerTask.doInBackground(SetupActivity.java:1) 04-05 08:48:20.557: W/System.err(31908): at android.os.AsyncTask$2.call(AsyncTask.java:287) 04-05 08:48:20.557: W/System.err(31908): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 04-05 08:48:20.557: W/System.err(31908): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 04-05 08:48:20.557: W/System.err(31908): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 04-05 08:48:20.557: W/System.err(31908): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 04-05 08:48:20.557: W/System.err(31908): at java.lang.Thread.run(Thread.java:856) 04-05 08:48:20.557: W/System.err(31908): Caused by: com.google.android.gms.auth.GoogleAuthException: Unknown 04-05 08:48:20.557: W/System.err(31908): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 04-05 08:48:20.557: W/System.err(31908): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 

Уже видели похожие темы, и они не помогли, ошибка Google Api и android Oauth INVALID_AUDIENCE

Я решаю эту проблему, задавая имя для проекта в консоли google api.

В новой консоли API интерфейса в [APIs & auth] -> [Согласие экрана]

Уф! Наконец, он заработал. Не уверен, что случилось. Пробовал эти вещи, удалил файл отладки keystore и восстановил его. Скопировал отпечаток sha1 на консоль api. Затем следуйте инструкциям отсюда: http://android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android.html , чтобы я мог хотя бы получить токен на устройстве Android. Затем я перешел на использование клиентских классов, созданных конечной точкой. Теперь мое приложение может поговорить с бэкэндом приложения через сервис конечной точки.

Вы получите эту ошибку, если в ANDROID_CLIENT_ID, который вы комментируете @ Api # clientIds, имеет другое имя пакета Android, чем имя Android-клиента.

Например

 @Api( name = "yourFirstService", version = "v1", namespace = @ApiNamespace(ownerDomain = "myorg.org", ownerName = "My Org", packagePath = "firstservice" ), scopes = {Constant.API_EMAIL_SCOPE}, clientIds = {Constants.ANDROID_CLIENT_ID, Constant.API_EXPLORER_CLIENT_ID}, audiences = {Constants.ANDROID_AUDIENCE} ) public class YourFirstAPI { ... } 

Представляет интерес атрибут clientId. ANDROID_CLIENT_ID необходимо, чтобы

  1. Сопоставьте clientId в своей Cloud Console->APIS & Auth->Credentials->Client ID for Android приложения.
  2. Имя пакета этого клиента должно быть таким же, как и приложение Android, которое вы используете в качестве клиента.

Эта проблема возникла для меня, когда я создал новую среду разработки в другой системе. Я установил Android Studio в новую систему и скопировал код. Тот же код, который работал на моей старой системе, не работал над новым, с INVALID_AUDIENCE. Попробовав несколько вещей, что в конечном итоге работало, было копирование файла debug.keystore из моей старой системы в новую. В Windows файл находится в% USERPROFILE% .android. Это имеет смысл, так как debug.keystore генерируется Android Studio при установке специально для этого компьютера. Срок действия debug.keystore истекает (365 дней, когда я слышал), поэтому это также может быть причиной. Таким образом, реальным решением для меня было восстановление файла debug.keystore в новой системе. Удаление файла debug.keystore и перезапуск Android Studio приведет к восстановлению файла. Затем запустите keytool, чтобы получить отпечаток сертификата SHA1. Затем перейдите на http://console.developers.google.com, чтобы создать новый идентификатор клиента с отпечатком пальца.

Случилось одно в моей команде, хотя он работал нормально на моем устройстве. Это оказалось из-за другого debug.keystore на наших установках eclipse.

Чтобы решить эту проблему, мы скопировали файл debug.keystore в ~/.android/ (это файл на mac, он отличается от linux и windows)

Intereting Posts
Открыть файл файла pdf в приложении Совместное использование и сохранение данных между несколькими приложениями Android Уведомление о новой электронной почте с Android SDK.DIR отсутствует? Проект андроидного обновления? Извлечение первого и последнего имени из контактов android приводит к '1' и 'null' Eclipse не автоматически переключает конфигурации запуска Как подключиться ко всем приложениям издателя на Android Amazon Appstore Android: BaseAdapter не показывает элементы Выход из Google Maps, предназначенный для Android Как рассчитать текст, который может поместиться в WebView без прокрутки Отправьте файл PDF в виде приложения «Почта» или «Приложение», чтобы напрямую просмотреть файл Проблемы с подключением к сети NDK для Android: соединение TCP не работает Масштабировать элемент в RecyclerView для перекрытия 2 смежных элементов Android Google Calendar Api для Android Android: DigitalClock удаляет секунды