شارك المقالة

تسجيل الدخول بحساب Google في Flutter مع Firebase وإدارة الجلسة عبر authStateChanges، مع فصل واجهة الدخول عن إعداد البصمات والمنصات.

افصل الزر عن الجلسة

الغرض من زر Google بدء المصادقة، أما الشاشة التي تعرض للمستخدم فتتبع جلسة Firebase Authentication. لا تجعل وجود GoogleSignInAccount محلي دليلًا كافيًا أن دخول Firebase اكتمل. أنشئ credential بالطريقة المناسبة للمنصة ثم انتظر نجاح تسجيل Firebase. بعد ذلك يمكن لواجهة عليا متابعة authStateChanges لتبديل حالة الزائر والمستخدم دون الاحتفاظ بمعرف قديم يدويًا في كل شاشة.

إصدارات Google Sign In الحديثة

أمثلة GoogleSignIn() وsignInSilently القديمة لا تنقل كما هي إلى واجهة google_sign_in الحديثة التي تستخدم instance وinitialize وتغيرت فيها واجهات المصادقة. راجع إصدار الحزمة المثبت في pubspec.lock، واتبع شرح إعداد Google Sign In والبصمات المرتبط أدناه. على الويب يمكن استخدام GoogleAuthProvider مع signInWithPopup؛ لا تنفذ مسار Android حرفيًا على المتصفح ولا تطلب SHA للويب.

إدارة المستمع والخروج

المثال التالي يعيد stream لحالة Firebase، ويمكن استهلاكه في StreamBuilder أو طبقة إدارة الحالة. عند استخدام listen يدويًا احتفظ بالاشتراك وألغِه مع عمر الخدمة. signOut يخرج من جلسة Firebase، وإذا استخدمت GoogleSignIn على المنصة الأصلية فقد تحتاج مزامنة الخروج هناك وفق تجربتك. لا تجعل disconnect إجراءً افتراضيًا لكل خروج لأنه يرتبط بإلغاء الارتباط بطريقة مختلفة عن إغلاق الجلسة فقط.

تخزين ملف المستخدم دون تكرار

بعد أول دخول قد تنشئ ملفًا في users/{uid}، لكن هذا مختلف عن حساب المصادقة نفسه. اكتب حقول الملف العامة المسموح بها فقط، ولا تخزن access token أو كلمة مرور. عند العودة تحقق من الملف الموجود بدل استبدال الاسم أو الإعدادات المحفوظة كل مرة. اختبر الإلغاء وفشل الشبكة وحسابًا جديدًا وحسابًا قديمًا، ثم حالة تسجيل الخروج ودخول حساب آخر حتى لا تظهر بيانات الحساب السابق أثناء الانتقال.

المثال التطبيقي وحدوده

أضف الحزم المستوردة بإصدارات متوافقة، وهيئ Firebase قبل استخدام خدماته. المقطع يوضح الجزء المذكور في الشرح؛ إعدادات المنصة والقواعد وواجهة الحالات تظل مسؤولية المشروع المستضيف.

import 'package:firebase_auth/firebase_auth.dart';

Stream<User?> sessionChanges() => FirebaseAuth.instance.authStateChanges();

Future<void> signOutOfFirebase() => FirebaseAuth.instance.signOut();

// Web-only entry point; native Google Sign In setup is described separately.
Future<UserCredential> signInOnWeb() =>
    FirebaseAuth.instance.signInWithPopup(GoogleAuthProvider());

الصور والفيديو من الشرح

المواد المرئية الأصلية محفوظة للرجوع إليها. قد تعرض إصدارًا قديمًا؛ عند الاختلاف اتبع النص والأمثلة المصححة أعلاه، خاصة في خدمات الإشعارات والروابط التي تغيرت.

How to SignIn With google UiHow to SignIn With google UiHow to signIn with Google (Bloc)

مراجع التنفيذ

شاهد أيضًا
مقالات ذات صلة
🚫 مانع الإعلانات مفعل

يجب إيقاف مانع الإعلانات لاستكمال تصفح الموقع