لدمج ميزة "تسجيل الدخول باستخدام حساب Google" في تطبيق Android، عليك ضبط إعدادات هذه الميزة وإضافة زر إلى تنسيق تطبيقك لبدء عملية تسجيل الدخول.
قبل البدء
إعداد مشروع على Google API Console وإعداد مشروعك على 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، حدِّدها باستخدام
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.
عدِّل واجهة المستخدم وفقًا لذلك، أي إخفاء زر تسجيل الدخول أو إطلاق
نشاطك الرئيسي أو أي إجراء آخر مناسب لتطبيقك.
إذا كانت القيمة التي يعرضها GoogleSignIn.getLastSignedInAccount
هي null
، يعني ذلك أنّ المستخدم لم يسجِّل الدخول إلى تطبيقك باستخدام حساب 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
. إذا كنت بحاجة إلى تمرير المستخدم الذي سجّل الدخول حاليًا إلى خادم خلفية، أرسِل الرمز المميّز لتعريف المستخدم إلى خادم الخلفية وأثبِت صحة الرمز المميّز على الخادم.