Firebase Authentication | تسجيل الدخول باستخدام حساب Google

AbdulAlim Rajjoubمنذ سنتين

  نبدأ أولاً بإنشاء مشروع جديد على 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

FBAG-0.thumb.png.18dbb845afcbc77b02a0b94d6d87708e.png

أما الآن فإننا نحتاج لشيئ يُسمى SHA1 Fingerprint لربطه في Firebase مع تطبيقنا,ويمكنك الحصول عليه عبر تطبيق الخطوات في هذا الشرح أو   اذا كنت تستخدم الويندوز يمكنك تحميل هذه الأداة الصغيرة التي صنعتها والتي تسهل عليك الأمر

 بعد تحميل الأداة وفك الضغط عنها سنجد هذه الملفات

extra1.PNG.b31c68e39982333a5d629ba6ed61ef61.PNG

مايهمنا هو الملفات Genreate Debug Key Google و Genreate Release Key Google

الDebug يقوم بتوليد SHA1 اذا كنت ضمن مرحلة التطوير

نقوم بفتح الملف ونرى ان الأداة تطلب keystore password والتي عادةً تكون "android"

وسنرى أنه تم توليد SHA1 

extra2.png.5988811e76bb973e64dd5768d3f1bb6d.png

 

الRelease عندما تقوم بعمل Release للتطبيق(عندما تقوم بتوليد ملف وشهادة بصيغة jks)

نقوم بفتح الملف وسنجد انه سيطلب alias الذي قد قمت بوضعه عندما قمت بعمل Generate Signed APK 

بعد ذلك سيطلب منك مسار ملف key الذي ينتهي بصيغة jks

ثم الباسوورد

بعد ذلك سيتم توليد الSHA1

extra3.png.fdeb16cfe4c67e8987c086cb2f7aeffe.png

 

قم بنسخه ثم توجه الى Firebase Console ثم اختر Project Settings

FBAG-3.png.de63468eb01b1c39a4734ee564169ab0.png

وانزل للأسفل واختر Add Fingerprint ثم الصق SHA1 الذي نسخته واختر Save

 

FBAG-4.png.04fe8c7a08aa078f47cb8193deea2cf6.png

 

بعد ذلك عليك الذهاب لموقع Google Developers Console للحصول على ClientID سنضعه لاحقاً في مشروع الأندرويد (تأكد من أنه نفس اسم المشروع الذي تعمل عليه في Firebase) ستجد في الأسفل Web Client قم بنسخ Client ID بنوع Web Application (سنحتاجه لاحقاً)

FBAG-5.thumb.png.b130f9e103a5ff79d82356f05217cbc7.png

 

أما الآن نعود الى Android Studio الى activity_main.xml ونضيف زر من نوع SignInButton وهو زر عادي ولكن بشكل جميل وعليه شعار Google

 

FBAG-6.png.53fb973efb22e0fe041c95a97b70b96b.png

 

بعد ذلك في MainActivity.java سنقوم بتعريف بعض المتغيرات

 

FBAG-7.png.f392293d17857964715bc39a518de423.png

 

  • 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)

FBAG-8.png.50049e723eeb24b8af075dfc8b11ddc9.png

بعد ذلك علينا تعريف GoogleApiClient ونعطيه gso الذي قمنا بتعريفه

 

FBAG-9.png.cf6c022b282a94fc9eb783619ea2e08c.png

أخيراً نربط SignInButton وعند الضغط عليه نستدعي ميثود signIn التي سننشأها الآن


FBAG-10.png.9d541ea4ad151140d88d251885c83ec2.png

 

داخل ميثود SignIn نقوم بتعريف Intent خاص من Auth ونعطيه mGoogleApiClient ,هذا الأكتفتي هو الذي يظهر حسابات Google الموجودة في الجهاز

 

FBAG-11.png.c7079be14e6f21703cbf2a4ad4f4616c.png

ثم نشغل الأكتفتي ولكن بدلاً من 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

FBAG-12.png.d36bf004f5bfa4d446ae6d29b70a5665.png

 

أما الآن سنقوم بإنشاء ميثود firebaseAuthWithGoogle وهي تأخذ GoogleSignInAccount ك بارامتر ثم عرفنا AuthCredential وقمنا بإعطاءه الtoken الخاص بالحساب عبر ميثود acct.getIdToekn أخيراً استعملنا mAuth.signInWithCredential وأضفنا CompleteListener لمعرفة نتيجة العملية

FBAG-13.png.c6cb873f9164f0545389224c271e022c.png

 

أما الآن حان وقت التجربة نشغل التطبيق ونضغط على زر SignIn سيتم إظهار نافذة تطلب إختيار حساب كما في الصورة

FBAG-14.png.9c7c31dc5ae45f7990d4b021fbe9a500.png

وإذا تمت العملية بنجاح سنجد النتيجة في Logcat

FBAG-15.png.3d7783f83648e78a94b3b4004c5464c4.png

 

سنذهب ل Firebase Console لنرى هل تم التسجيل بنجاح

FBAG-16.png.5b1ec9a057ad0e701bd7a2dd703cbf36.png

بالطبع يمكنك معرفة هل تم تسجيل الدخول من قبل المستخدم أم لا عبر AuthStateListener كما فعلنا في الدرس السابق

 

المشروع على Github

ملاحظة:المشروع على Github للمعاينة فقط ولايمكنك تجربته على Android Studio لعدم وجود google-services.json الخاص بك  

كلمات دليلية: auth firebase google
3
إعجاب
1925
مشاهدات
1
مشاركة
0
متابع
متميز
محتوى رهيب

التعليقات (0)

لايوجد لديك حساب في عالم البرمجة؟

تحب تنضم لعالم البرمجة؟ وتنشئ عالمك الخاص، تنشر المقالات، الدورات، تشارك المبرمجين وتساعد الآخرين، اشترك الآن بخطوات يسيرة !