Как исправить ошибку «redirect_uri_mismatch» при использовании Expo.Google.logInAsync в React Native? - PullRequest
0 голосов
/ 23 января 2019

Я получаю код ошибки 400 "redirect_uri_mismatch" после вызова Expo.Google.logInAsync () в моем приложении React Native (на встроенном APK).ОБРАТИТЕ ВНИМАНИЕ, на клиенте Expo я не получаю сообщение об ошибке, страница входа в Google вылетает без ошибок.Я подозреваю, что ошибка регистрируется где-то на родной стороне.
Я использую Экспо версии 32.0.0 с React Native версии 32.0.0.
Я следовал инструкциям, изложенным здесь https://docs.expo.io/versions/v32.0.0/sdk/google/, и создал идентификаторы клиента OAuth для iOS и Android.
Ниже приведена копия моего кода:

const signInWithGoogleAsync = async () =>  {
    try {
        const result = await Expo.Google.logInAsync({
        androidClientId: ANDROID_CLIENT_ID,
        iosClientId: IOS_CLIENT_ID,
        scopes: ['profile', 'email'],
        });

        if (result.type === 'success') {
        return result.accessToken;
        } else {
        return {cancelled: true};
        }
    } catch(e) {
        console.log(e);
    }
    }

Ваша помощь будет принята с благодарностью.
Пожалуйста, дайте мне знать, если вам нужна дополнительная информация.
Спасибо.

1 Ответ

0 голосов
/ 10 марта 2019

Пока что я видел только временное исправление. У меня была такая же проблема в течение нескольких дней, и я смог ее исправить благодаря

Мишель Комин Эскуде кто предоставил решение здесь -> https://github.com/expo/expo/issues/3540

Решение

Продолжайте использовать Expo SDK 32. Перейдите в консоль разработчика Google и создайте идентификатор клиента Android Oauth2 и идентификатор клиента iOS Oauth2, как указано в документации SDK 31 для входа в Google (убедитесь, что имя пакета host.exp.exponent).

Используйте идентификатор клиента Android и идентификатор клиента iOS следующим образом:

import { Platform } from 'react-native';
export const isAndroid = () => Platform.OS === 'android';

const result = await Google.logInAsync({
    clientId: isAndroid() ? '<YOUR_ANDROID_CLIENT_ID>' : '<YOUR_IOS_CLIENT_ID>',
});

Объяснение Основная проблема, с которой я столкнулся, заключается в том, что, хотя в новой документации указано следующее:

const clientId = '<YOUR_WEB_CLIENT_ID>';

Правда заключается в том, что внутренне запрос вызывается из приложения Expo, и вы можете увидеть это, когда развернете детали запроса на странице ошибок: enter image description here

Как видите, он добавляет имя пакета host.exp.exponent.

В любом случае, это будет работать, только когда вы находитесь в разработке или в приложении Expo . Если вы создаете отдельное приложение, вам нужно использовать Google Sign-In, и это совершенно другая битва.

...