لدمج ميزة "تسجيل الدخول بحساب Google" في تطبيق Android، عليك ضبط تسجيل الدخول بحساب Google وإضافة زر إلى تنسيق تطبيقك الذي يبدأ عملية تسجيل الدخول.
قبل البدء
ضبط مشروع على وحدة تحكّم Google API وإعداد مشروع Android Studio
إعداد تسجيل الدخول بحساب Google وكائن GoogleSignInClient
في طريقة
onCreate
لنشاط تسجيل الدخول، يمكنك ضبط تسجيل الدخول بحساب Google لطلب بيانات المستخدم التي يطلبها تطبيقك. على سبيل المثال، لضبط تسجيل الدخول بحساب Google لطلب معرّف المستخدمين ومعلومات الملف الشخصي الأساسية، يمكنك إنشاء عنصرGoogleSignInOptions
باستخدام معلمةDEFAULT_SIGN_IN
. لطلب عناوين البريد الإلكتروني للمستخدمين أيضًا، أنشئ كائنGoogleSignInOptions
باستخدام الخيارrequestEmail
.// Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build();
إذا كنت بحاجة إلى طلب نطاقات إضافية للوصول إلى Google APIs، يمكنك تحديدها باستخدام
requestScopes
. لتقديم أفضل تجربة للمستخدم، يجب عدم طلب سوى النطاقات المطلوبة ليعمل تطبيقك بأدنى حد. يمكنك طلب أي نطاقات إضافية عند الحاجة إليها حتى تظهر للمستخدمين شاشة الموافقة في سياق الإجراء الذي اتخذوه. يُرجى الاطِّلاع على طلب نطاقات إضافية.بعد ذلك أيضًا، في طريقة
onCreate
لنشاط تسجيل الدخول، أنشِئ عنصرًاGoogleSignInClient
باستخدام الخيارات التي حدّدتها.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
البحث عن مستخدم حالي سجّل دخوله
في طريقة نشاطك onStart
، تأكَّد مما إذا كان المستخدم قد سجّل الدخول إلى تطبيقك باستخدام Google أم لا.
// Check for existing Google Sign In account, if the user is already signed in // the GoogleSignInAccount will be non-null. GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this); updateUI(account);
إذا كان GoogleSignIn.getLastSignedInAccount
يعرض عنصر GoogleSignInAccount
(بدلاً من null
)، يعني ذلك أنّ المستخدم قد سجّل الدخول إلى تطبيقك على Google.
وبالتالي، يمكنك تعديل واجهة المستخدم، أي إخفاء زر تسجيل الدخول أو تشغيل
نشاطك الرئيسي أو استخدام أي تطبيق مناسب لتطبيقك.
إذا تم عرض null
من قِبل GoogleSignIn.getLastSignedInAccount
، هذا يعني أنّ المستخدم لم يسجّل الدخول إلى تطبيقك باستخدام Google. حدِّث واجهة المستخدم لعرض زر "تسجيل الدخول بحساب Google".
إضافة زر "تسجيل الدخول بحساب Google" إلى تطبيقك
أضِف
SignInButton
في تنسيق تطبيقك:<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
اختياري: إذا كنت تستخدم رسم زر تسجيل الدخول التلقائي بدلاً من تقديم مواد عرض زر تسجيل الدخول الخاص بك، يمكنك تخصيص حجم الزر باستخدام طريقة
setSize
.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
في نشاط Android (على سبيل المثال، طريقة
onCreate
)، سجِّلOnClickListener
الزر الخاص بك لتسجيل دخول المستخدم عند النقر عليه:findViewById(R.id.sign_in_button).setOnClickListener(this);
بدء عملية تسجيل الدخول
في طريقة
onClick
الخاصة بالنشاط، يمكنك التعامل مع النقرات على زر تسجيل الدخول من خلال إنشاء نية لتسجيل الدخول باستخدام طريقةgetSignInIntent
وبدء البدء باستخدامstartActivityForResult
.@Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: signIn(); break; // ... } }
private void signIn() { Intent signInIntent = mGoogleSignInClient.getSignInIntent(); startActivityForResult(signInIntent, RC_SIGN_IN); }
يطلب بدء المستخدِم من اختيار حساب على Google لتسجيل الدخول باستخدامه. إذا طلبت نطاقات تتجاوز
profile
وemail
وopenid
، سيُطلب من المستخدم أيضًا منح الإذن بالوصول إلى الموارد المطلوبة.بعد أن يسجّل المستخدم الدخول، يمكنك الحصول على عنصر
GoogleSignInAccount
للمستخدم ضمن طريقةonActivityResult
للنشاط.@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { // The Task returned from this call is always completed, no need to attach // a listener. Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data); handleSignInResult(task); } }
يحتوي الكائن
GoogleSignInAccount
على معلومات حول المستخدم الذي سجّل الدخول، مثل اسم المستخدم.private void handleSignInResult(Task<GoogleSignInAccount> completedTask) { try { GoogleSignInAccount account = completedTask.getResult(ApiException.class); // Signed in successfully, show authenticated UI. updateUI(account); } catch (ApiException e) { // The ApiException status code indicates the detailed failure reason. // Please refer to the GoogleSignInStatusCodes class reference for more information. Log.w(TAG, "signInResult:failed code=" + e.getStatusCode()); updateUI(null); } }
يمكنك أيضًا الحصول على عنوان البريد الإلكتروني للمستخدم من خلال
getEmail
ورقم تعريف Google للمستخدم (للاستخدام من جهة العميل) معgetId
ورمز مميّز لرقم التعريف للمستخدم من خلالgetIdToken
. إذا كنت بحاجة إلى تمرير المستخدم الذي سجّل الدخول حاليًا إلى خادم خلفية، أرسِل الرمز المميّز لرقم التعريف إلى خادم الخلفية وتحقّق من الرمز المميّز على الخادم.