Я пытался реализовать вход в Google на выставке expo go, следуя почти всем руководствам на YouTube и правильно настроив его, но каждый раз, когда я нажимаю кнопку, если использую androidClientId, я перенаправляюсь на всплывающее окно, в котором отображается ошибка : «Доступ заблокирован, ошибка 400: redirect_uri_mismatch» что-то в этом роде, но если я использую clientId вместо androidClientId, он перенаправляется во всплывающее окно, где я могу выбрать учетную запись, и после выбора учетной записи я попадаю на страницу, на которой отображается ошибка, например «Что-то произошла ошибка при попытке завершить вход в систему. Пожалуйста, закройте этот экран, чтобы вернуться в приложение», и после нажатия кнопки «Закрыть» и возвращения в приложение в «Expo Go» я получаю тип ответа «Отклонить».
import React, { useState, useEffect } from 'react';
import { View, Text, Pressable } from 'react-native';
import { useNavigation } from 'expo-router';
import { NavigationProp } from '@/lib/types';
import * as Google from 'expo-auth-session/providers/google';
import * as WebBrowser from 'expo-web-browser';
import AsyncStorage from '@react-native-async-storage/async-storage';
WebBrowser.maybeCompleteAuthSession();
const Index = () => {
const [email, setEmail] = useState('');
const [password, setPassword] = useState('');
const [userInfo, setUserInfo] = useState(null);
const navigation = useNavigation();
const webClientId = '';
const androidId = '';
const [request, response, promptAsync] = Google.useAuthRequest({
clientId: webClientId,
// androidClientId: androidId,
scopes: ['profile', 'email'],
redirectUri: 'https://auth.expo.io/@username/Frontend',
});
useEffect(() => {
handleSignInWithGoogle();
}, [response]);
const handleSignInWithGoogle = async () => {
if (response?.type === 'success') {
const { accessToken } = response.authentication || {};
await getUserInfo(accessToken ?? '');
} else if (response?.type === 'error') {
console.error('Error during Google sign-in:', response.error);
} else {
console.warn('User dismissed the sign-in dialog or unknown response type');
}
};
const getUserInfo = async (token: any) => {
if (!token) return;
try {
const res = await fetch('https://www.googleapis.com/userinfo/v2/me', {
headers: { Authorization: `Bearer ${token}` },
});
const user = await res.json();
await AsyncStorage.setItem('@user', JSON.stringify(user));
setUserInfo(user);
} catch (error) {
console.error('Failed to fetch user info:', error);
}
};
return (
{JSON.stringify(userInfo)}
promptAsync()}>
Login with Google
);
};
export default Index;
Любая помощь будет оценена по достоинству!
Примечание. Я установил пустые значения androidClientId и webClientId только при вставке сюда, а не в исходный код.
п>
Я пытался реализовать вход в Google на выставке expo go, следуя почти всем руководствам на YouTube и правильно настроив его, но каждый раз, когда я нажимаю кнопку, если использую androidClientId, я перенаправляюсь на всплывающее окно, в котором отображается ошибка : «Доступ заблокирован, ошибка 400: redirect_uri_mismatch» что-то в этом роде, но если я использую clientId вместо androidClientId, он перенаправляется во всплывающее окно, где я могу выбрать учетную запись, и после выбора учетной записи я попадаю на страницу, на которой отображается ошибка, например «Что-то произошла ошибка при попытке завершить вход в систему. Пожалуйста, закройте этот экран, чтобы вернуться в приложение», и после нажатия кнопки «Закрыть» и возвращения в приложение в «Expo Go» я получаю тип ответа «Отклонить». [code]import React, { useState, useEffect } from 'react'; import { View, Text, Pressable } from 'react-native'; import { useNavigation } from 'expo-router'; import { NavigationProp } from '@/lib/types'; import * as Google from 'expo-auth-session/providers/google'; import * as WebBrowser from 'expo-web-browser'; import AsyncStorage from '@react-native-async-storage/async-storage';
try { const res = await fetch('https://www.googleapis.com/userinfo/v2/me', { headers: { Authorization: `Bearer ${token}` }, }); const user = await res.json(); await AsyncStorage.setItem('@user', JSON.stringify(user)); setUserInfo(user); } catch (error) { console.error('Failed to fetch user info:', error); } };
return (
{JSON.stringify(userInfo)} promptAsync()}> Login with Google
); };
export default Index; [/code] Любая помощь будет оценена по достоинству! Примечание. Я установил пустые значения androidClientId и webClientId только при вставке сюда, а не в исходный код. п>