Flutter Web Google Войти
Я пытаюсь реализовать вход через Google во Flutter Web. Я использую GoogleSignn 4.1.1 и Firebase Auth 0.15.4. Я не получаю сообщения об ошибке. Просто не всплывает.
- Я зарегистрировал веб-приложение в Firebase (добавленные зависимости) и даже добавил
<meta>
Отметьтеgoogle-signin-client_id
- Firebase Auth с Google работает, когда я запускаю его на Android
- Я также запустил приложение Example из GoogleSignIn в Интернете. Тоже не всплывает.
Это мой код входа (работает на Android)
final FirebaseAuth _auth = FirebaseAuth.instance;
FirebaseUser user = await _auth.currentUser();
if (user != null) {
log.d('alreadyLoggedIn');
} else {
final GoogleSignIn _googleSignIn = GoogleSignIn(clientId: Constants.GOOGLE_SIGN_IN_CLIENT_ID);
final GoogleSignInAccount googleUser = await _googleSignIn.signIn();
final GoogleSignInAuthentication googleAuth =
await googleUser.authentication;
final AuthCredential credential = GoogleAuthProvider.getCredential(
accessToken: googleAuth.accessToken,
idToken: googleAuth.idToken,
);
await _auth.signInWithCredential(credential);
user = await _auth.currentUser();
assert(user.email != null);
assert(user.displayName != null);
assert(!user.isAnonymous);
assert(await user.getIdToken() != null);
}
return user;
}
Надеюсь, кто-то знает, как это можно исправить.
2 ответа
Вы выполнили все инструкции (включая добавление идентификатора OAuth в index.html) с этой страницы?https://pub.dev/packages/google_sign_in_web
Вы получите свой ИДЕНТИФИКАТОР КЛИЕНТА на https://console.developers.google.com/apis/credentials.
Вы также должны запускать из терминала, как это, чтобы он работал на localhost при отладке:
flutter run -d chrome --web-hostname localhost --web-port 5000
Авторизованный порт по умолчанию - 5000, вы можете добавить другие URI на той же странице, где у вас есть ИД КЛИЕНТА (например, 8764367243864-987523.apps.googleusercontent.com), он находится в разделе "Авторизованные источники JavaScript" https://console.developers.google.com/apis/credentials)
import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Google Sign-In Example'),
),
body: Center(
child: ElevatedButton(
onPressed: signInWithGoogle,
child: Text('Sign in with Google'),
),
),
),
);
}
}
Future<void> signInWithGoogle() async {
final String googleClientId = "your_client_id_here";
try {
final GoogleSignInAccount? googleUser = await GoogleSignIn(
clientId: googleClientId,
).signIn();
if (googleUser != null) {
// You've successfully signed in with Google.
// Now you can use the googleUser object to access user information.
// For example: googleUser.displayName, googleUser.email, etc.
print('Signed in with Google: ${googleUser.displayName}');
} else {
// The user cancelled the sign-in process.
print('Google Sign-In cancelled.');
}
} catch (error) {
// Handle any errors that might occur during the sign-in process.
print("Error during Google Sign-In: $error");
}
}
Не забудьте заменить «your_client_id_here» своим фактическим идентификатором клиента Google API.