Firebase Authentication – اضافة تسجيل الدخول عن طريق Google
Android Kotlin – تعلم اضافة تسجيل الدخول عن طريق Google Firebase Authentication
الاضافات التي سوف نعمل عليها
- اضافة مكتبة google services
- اضافة button للواجة لتسجيل الدخول عن طريق google
- تفعيل تسجيل الدخول عن طريق google من لوحة تحكم firebase من Sign in method
- اضافة الكود الخاص في تسجيل الدخول الى كلاس LoginActivity
- اولاً اضافة مكتبة google services
1 |
implementation 'com.google.android.gms:play-services-auth:15.0.1' |
- اضافة button للواجهة
1 2 3 4 |
<com.google.android.gms.common.SignInButton android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/btnGoogleSignIn"/> |
- تفعيل تسجيل الدخول من firebase
- اضافة الاكواد الى الكلاس
1 2 3 |
private var mGoogleSignInClient: GoogleSignInClient? = null private val TAG = "GoogleActivity" private val RC_SIGN_IN = 7021 سوف نستخدمه لارسال قيمة الى onActivityResult |
داخل دالة onCreate
1 2 3 4 5 6 7 8 9 10 11 |
//تهيئة GoogleSignInOptions val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build() mGoogleSignInClient = GoogleSignIn.getClient(this, gso) findViewById<View>(R.id.btnGoogleSignIn).setOnClickListener{view-> signIn() } |
دالة onActivityResult
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent) { super.onActivityResult(requestCode, resultCode, data) // فحص requestCode لمعرفة رقم الطلب بحالتنا تم وضع الرقم 7021 // اذا كان رقم الطلب متطابق يبداءتسجيل الدخول عن طريق ارسال البيانات الى firebaseAuthWithGoogle // وبداخلها سوف يكون الخاص بتسجيل الدخول if (requestCode == RC_SIGN_IN) { val task = GoogleSignIn.getSignedInAccountFromIntent(data) try { val account = task.getResult(ApiException::class.java) firebaseAuthWithGoogle(account, btnGoogleSignIn.rootView) } catch (e: ApiException) { Log.w(TAG, "Google sign in failed", e) } } } |
دالة firebaseAuthWithGoogle
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
private fun firebaseAuthWithGoogle(acct: GoogleSignInAccount, view: View) { showMessage(view, "Authentication... ") // اظهار رسالة للمستخدم عند بدء تسجيل الدخول val credential = GoogleAuthProvider.getCredential(acct.idToken, null) auth!!.signInWithCredential(credential) .addOnCompleteListener(this, OnCompleteListener<AuthResult> { task -> // فحس task اذا تم الامر بنجاح يتم تحويل المستخدم الى واجهةmain activity // اما اذا حدث خطأ في تسجيل الدخول يرمي استثناء if (task.isSuccessful) { Log.d(TAG, "signInWithCredential:success") showMessage(view, "Sign In Success") startActivity(Intent(this@LoginActivity, MainActivity::class.java)) } else { Log.w(TAG, "signInWithCredential:failure", task.exception) showMessage(view, "Error ${task.exception?.message}") } }) } |
كود دالة signIn
1 2 3 4 |
private fun signIn() { val signInIntent = mGoogleSignInClient!!.getSignInIntent() startActivityForResult(signInIntent, RC_SIGN_IN) } |
لمعرفة بيانات المستخدم يتم عن طريق
1 |
auth!!.currentUser!!.email |
هنى نقوم بجلب الايميل
وممكن جلب اسم المستخدم
1 |
auth!!.currentUser!!.displayName |
وايضا جلب رقم الهاتف url الخاص بصورة المستخدم والمواليد الخ ….
دالة showMessage
1 2 3 |
private fun showMessage(view: View, message: String) { Snackbar.make(view, message, Snackbar.LENGTH_INDEFINITE).setAction("FIRE", null).show() } |
في الدرس القادم سوف يتم شرح تسجيل الدخول عن طريق رقم الهاتف
اذا كان هنالك ايا شرح تريده اتركه في التعليقات وسوف يتم شرحه لاحقاً
الكود تجده كاملاً على GitHub