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