Firebase Authentication | تسجيل الدخول باستخدام حساب Google
نبدأ أولاً بإنشاء مشروع جديد على Firebase Console ومشروع جديد على Android Studio ونقوم بربطهم (كما فعلنا في درس Firebase Real-time Database) ثم نضيف مكتبة Firebase Auth في مشروع الأندرويد
compile 'com.google.firebase:firebase-auth:10.2.1'
ونضيف مكتبة Google
compile 'com.google.android.gms:play-services-auth:10.2.1'
ونعمل Sync لGradle وبالطبع نُفعل خيار Google من Firebase Console
أما الآن فإننا نحتاج لشيئ يُسمى SHA1 Fingerprint لربطه في Firebase مع تطبيقنا,ويمكنك الحصول عليه عبر تطبيق الخطوات في هذا الشرح أو اذا كنت تستخدم الويندوز يمكنك تحميل هذه الأداة الصغيرة التي صنعتها والتي تسهل عليك الأمر
بعد تحميل الأداة وفك الضغط عنها سنجد هذه الملفات
مايهمنا هو الملفات Genreate Debug Key Google و Genreate Release Key Google
الDebug يقوم بتوليد SHA1 اذا كنت ضمن مرحلة التطوير
نقوم بفتح الملف ونرى ان الأداة تطلب keystore password والتي عادةً تكون "android"
وسنرى أنه تم توليد SHA1
الRelease عندما تقوم بعمل Release للتطبيق(عندما تقوم بتوليد ملف وشهادة بصيغة jks)
نقوم بفتح الملف وسنجد انه سيطلب alias الذي قد قمت بوضعه عندما قمت بعمل Generate Signed APK
بعد ذلك سيطلب منك مسار ملف key الذي ينتهي بصيغة jks
ثم الباسوورد
بعد ذلك سيتم توليد الSHA1
قم بنسخه ثم توجه الى Firebase Console ثم اختر Project Settings
وانزل للأسفل واختر Add Fingerprint ثم الصق SHA1 الذي نسخته واختر Save
بعد ذلك عليك الذهاب لموقع Google Developers Console للحصول على ClientID سنضعه لاحقاً في مشروع الأندرويد (تأكد من أنه نفس اسم المشروع الذي تعمل عليه في Firebase) ستجد في الأسفل Web Client قم بنسخ Client ID بنوع Web Application (سنحتاجه لاحقاً)
أما الآن نعود الى Android Studio الى activity_main.xml ونضيف زر من نوع SignInButton وهو زر عادي ولكن بشكل جميل وعليه شعار Google
بعد ذلك في MainActivity.java سنقوم بتعريف بعض المتغيرات
- mAuth شرحناها سابقاً
- GoogleApiClient مهمته إظهار حسابات Google الموجودة في جهاز الأندرويد
- SigninButton زر تسجيل الدخول في activity_main.xml
- RC_SIGN_IN وهو متغير من نوع int عادي سنستخدمه لاحقاً قيمته 0 (يمكنك وضع أي قيمة تريدها)
ثم داخل onCreate أعطينا قيمة ل mAuth وعرفنا اوبجكت من GoogleSignInOptions,هذه الميثود مهمتها وضع الإعدادات ليعرف GoogleApiClient ماذا نريد منه, حيث أن Google API Client يحتوي على الكثير من APIs منها Drive API و Google Play Games API الخ..
ثم أعطيناه IDToken (الذي نسخناه سابقاً من Google Developers Console)
وطلبنا إظهار Email (RequestEmail)
بعد ذلك علينا تعريف GoogleApiClient ونعطيه gso الذي قمنا بتعريفه
أخيراً نربط SignInButton وعند الضغط عليه نستدعي ميثود signIn التي سننشأها الآن
داخل ميثود SignIn نقوم بتعريف Intent خاص من Auth ونعطيه mGoogleApiClient ,هذا الأكتفتي هو الذي يظهر حسابات Google الموجودة في الجهاز
ثم نشغل الأكتفتي ولكن بدلاً من startActivity سنستدعي startActivityForResult ونضع signInIntent و RC_SIGN_IN
لماذا وضعنا startActivityForResult؟
ببساطة لأننا نريد أن نعرف نتيجة تشغيل هذا الأكتفتي ,على سبيل المثال هل تم اختيار حساب Google أم أن المستخدم قد رفض هذا الأمر
ولمعرفة النتيجة نقوم بعمل Override ل onActivityResult ,هذه الميثود تقوم بإعادة النتيجة وليست فقط ل Google Auth
,فعلى سبيل المثال يمكنك عمل startActivityForResult اذا كنت تريد مثلاً من المستخدم اختيار صورة من الجهاز وبالتالي تريد معرفة هل تم اختيار هذه الصورة أم لا
وللتميز بين results نستخدم رقم int ونقوم بعمل if اذا كان request code == RC_SIGN_IN عندها سنقوم بإنشاء GoogleSignInResult ونعطيه data
وإذا كانت result.isSuccess ناجحة أي أنه تم اختيار حساب من قبل المتسخدم عندها سنقوم بإنشاء GoogleSignInAccount ونأخذه من result.
الى هذه اللحظة لم يتم تسجيل الحساب في Firebase ولذلك سنستدعي ميثود firebaseAuthWithGoogle ونعطيه account
أما الآن سنقوم بإنشاء ميثود firebaseAuthWithGoogle وهي تأخذ GoogleSignInAccount ك بارامتر ثم عرفنا AuthCredential وقمنا بإعطاءه الtoken الخاص بالحساب عبر ميثود acct.getIdToekn أخيراً استعملنا mAuth.signInWithCredential وأضفنا CompleteListener لمعرفة نتيجة العملية
أما الآن حان وقت التجربة نشغل التطبيق ونضغط على زر SignIn سيتم إظهار نافذة تطلب إختيار حساب كما في الصورة
وإذا تمت العملية بنجاح سنجد النتيجة في Logcat
سنذهب ل Firebase Console لنرى هل تم التسجيل بنجاح
بالطبع يمكنك معرفة هل تم تسجيل الدخول من قبل المستخدم أم لا عبر AuthStateListener كما فعلنا في الدرس السابق
ملاحظة:المشروع على Github للمعاينة فقط ولايمكنك تجربته على Android Studio لعدم وجود google-services.json الخاص بك
التعليقات (0)
لايوجد لديك حساب في عالم البرمجة؟
تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !