Приложение Android, ошибка авторизации Google для GMail — ошибка 400: valid_request ⇐ Android
-
Гость
Приложение Android, ошибка авторизации Google для GMail — ошибка 400: valid_request
У меня есть мобильное приложение Android Studio (Java), которое использует OAuth2 для GMail, Outlook и Yahoo.
Последние два работают нормально, однако я не могу решить проблему с GMail, а именно:
Ошибка 400: инвалидный_запрос Пользовательская схема URI не включена для вашего клиента Android.
У меня такое ощущение, что это как-то связано с оператором Redirect и, возможно, с его форматом?
На вкладке «Учетные данные» консоли разработчика я вижу, что перенаправление не рекомендуется для приложения Android. Это нормально, у меня это отключено, однако я пробовал это с этим флажком и без него, а также с выбранным Returnurl на странице учетных данных и без него.
публичный класс EmailProvider { общедоступный статический EmailProvider GMAIL = новый EmailProvider(); общедоступный статический EmailProvider OUTLOOK = новый EmailProvider(); общедоступный статический EmailProvider YAHOO = новый EmailProvider(); статический { GMAIL.name = "GMail"; GMAIL.authUrl = "https://accounts.google.com/o/oauth2/auth"; GMAIL.tokenUrl = "https://oauth2.googleapis.com/token"; GMAIL.refreshTokenUrl = GMAIL.tokenUrl; GMAIL.clientId = "87685765765-jhgjhgjhgjhgjhgjggj.apps.googleusercontent.com"; GMAIL.redirectUrl = "com.company.app:/oauth2redirect"; GMAIL.scopes = "https://www.googleapis.com/auth/userinfo.email" + " https://mail.google.com https://www.googleapis.com/auth/userinfo.profile"; OUTLOOK.name = "Прогноз"; ....; ....; YAHOO.name = "Yahoo"; ....; ....; @SuppressWarnings("WeakerAccess") имя общедоступной строки, tokenUrl,refreTokenUrl, clientId, clientSecret, redirectUrl, области действия; Строка обновить_области; частная строка authUrl; частные статические настройки SharedPreferences; public static void init (контекст контекста) { prefs = context.getSharedPreferences("email_provider_prefs", Context.MODE_PRIVATE); } static void saveEmail(String email, EmailProvider emailProvider) { prefs.edit().putString(email, emailProvider.name).apply(); } public static EmailProvider getByEmail(String email) { if (email.endsWith("@gmail.com")) вернуть GMAIL; if (email.endsWith("@outlook.com")) возвращает OUTLOOK; if (email.endsWith("@yahoo.com")) вернет YAHOO; StringProviderName = prefs.getString(email, null); если (providerName == null) вернуть ноль; if (providerName.equals(GMAIL.name)) вернуть GMAIL; если (имяпоставщика.equals(YAHOO.name)) вернуть YAHOO; if (providerName.equals(OUTLOOK.name)) возвращает OUTLOOK; вернуть ноль; } Строка getAuthorizationUrl() { //без проверки константных условий вернуть HttpUrl.parse(authUrl) .newBuilder() .addQueryParameter("client_id", clientId) .addQueryParameter("область", области) .addQueryParameter("redirect_uri", redirectUrl) .addQueryParameter("тип_ответа", "код") .addQueryParameter("тип_доступа", "офлайн") .addQueryParameter("приглашение", "согласие") .build().toString(); } } К вашему сведению
[*]Экран согласия OAuth — показывает «Проверено». [*]SHA-1 верен. [*]Я много гуглил и пробовал разные подходы. Большинство обнаруженных мной сведений об этой конкретной ошибке относятся к веб-решениям, поэтому, к сожалению, ничто из того, с чем я столкнулся, не помогло мне в отношении приложения для Android.
Вопрос
Правильен ли указанный мной GMAIL.redirectUrl для приложения Android?
Будем благодарны за любую помощь.
У меня есть мобильное приложение Android Studio (Java), которое использует OAuth2 для GMail, Outlook и Yahoo.
Последние два работают нормально, однако я не могу решить проблему с GMail, а именно:
Ошибка 400: инвалидный_запрос Пользовательская схема URI не включена для вашего клиента Android.
У меня такое ощущение, что это как-то связано с оператором Redirect и, возможно, с его форматом?
На вкладке «Учетные данные» консоли разработчика я вижу, что перенаправление не рекомендуется для приложения Android. Это нормально, у меня это отключено, однако я пробовал это с этим флажком и без него, а также с выбранным Returnurl на странице учетных данных и без него.
публичный класс EmailProvider { общедоступный статический EmailProvider GMAIL = новый EmailProvider(); общедоступный статический EmailProvider OUTLOOK = новый EmailProvider(); общедоступный статический EmailProvider YAHOO = новый EmailProvider(); статический { GMAIL.name = "GMail"; GMAIL.authUrl = "https://accounts.google.com/o/oauth2/auth"; GMAIL.tokenUrl = "https://oauth2.googleapis.com/token"; GMAIL.refreshTokenUrl = GMAIL.tokenUrl; GMAIL.clientId = "87685765765-jhgjhgjhgjhgjhgjggj.apps.googleusercontent.com"; GMAIL.redirectUrl = "com.company.app:/oauth2redirect"; GMAIL.scopes = "https://www.googleapis.com/auth/userinfo.email" + " https://mail.google.com https://www.googleapis.com/auth/userinfo.profile"; OUTLOOK.name = "Прогноз"; ....; ....; YAHOO.name = "Yahoo"; ....; ....; @SuppressWarnings("WeakerAccess") имя общедоступной строки, tokenUrl,refreTokenUrl, clientId, clientSecret, redirectUrl, области действия; Строка обновить_области; частная строка authUrl; частные статические настройки SharedPreferences; public static void init (контекст контекста) { prefs = context.getSharedPreferences("email_provider_prefs", Context.MODE_PRIVATE); } static void saveEmail(String email, EmailProvider emailProvider) { prefs.edit().putString(email, emailProvider.name).apply(); } public static EmailProvider getByEmail(String email) { if (email.endsWith("@gmail.com")) вернуть GMAIL; if (email.endsWith("@outlook.com")) возвращает OUTLOOK; if (email.endsWith("@yahoo.com")) вернет YAHOO; StringProviderName = prefs.getString(email, null); если (providerName == null) вернуть ноль; if (providerName.equals(GMAIL.name)) вернуть GMAIL; если (имяпоставщика.equals(YAHOO.name)) вернуть YAHOO; if (providerName.equals(OUTLOOK.name)) возвращает OUTLOOK; вернуть ноль; } Строка getAuthorizationUrl() { //без проверки константных условий вернуть HttpUrl.parse(authUrl) .newBuilder() .addQueryParameter("client_id", clientId) .addQueryParameter("область", области) .addQueryParameter("redirect_uri", redirectUrl) .addQueryParameter("тип_ответа", "код") .addQueryParameter("тип_доступа", "офлайн") .addQueryParameter("приглашение", "согласие") .build().toString(); } } К вашему сведению
[*]Экран согласия OAuth — показывает «Проверено». [*]SHA-1 верен. [*]Я много гуглил и пробовал разные подходы. Большинство обнаруженных мной сведений об этой конкретной ошибке относятся к веб-решениям, поэтому, к сожалению, ничто из того, с чем я столкнулся, не помогло мне в отношении приложения для Android.
Вопрос
Правильен ли указанный мной GMAIL.redirectUrl для приложения Android?
Будем благодарны за любую помощь.
Мобильная версия