دمج "تسجيل الدخول بحساب Google" في تطبيق Android

لدمج "تسجيل الدخول باستخدام حساب Google" في تطبيق Android، يجب ضبط إعدادات "تسجيل الدخول بحساب Google" أضِف زرًا إلى تنسيق تطبيقك لبدء عملية تسجيل الدخول.

قبل البدء

ضبط مشروع وحدة تحكّم واجهة برمجة تطبيقات Google وإعداد مشروع "استوديو Android"

ضبط "تسجيل الدخول بحساب Google" والعنصر GoogleSignInClient

  1. في طريقة 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. لتقديم أفضل تجربة للمستخدم، عند تسجيل الدخول، يجب طلب النطاقات المطلوبة لكي يعمل تطبيقك بشكل بسيط طلب أي نطاقات إضافية عند الحاجة إليها فقط، لكي يرى المستخدمون شاشة الموافقة في سياق الإجراء الذي قام به. راجع طلب نطاقات إضافية.

  2. بعد ذلك، وفي طريقة 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" إلى تطبيقك

  1. الزر العادي لتسجيل الدخول باستخدام حساب Google إضافة SignInButton في تخطيط التطبيق:

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. اختياري: إذا كنت تستخدم رسم زر تسجيل الدخول التلقائي بدلاً من من خلال تقديم مواد عرض زر تسجيل الدخول، يمكنك تخصيص الحجم مع setSize .

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
  3. في نشاط Android (على سبيل المثال، باستخدام onCreate)، سجِّل OnClickListener للزر لتسجيل دخول المستخدم عند النقر على:

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

بدء إجراءات تسجيل الدخول

  1. صورة لأداة اختيار حساب تسجيل الدخول في طريقة 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);
    }

    يطلب بدء intent من المستخدم اختيار حساب Google لتسجيل الدخول معهم. في حال طلب نطاقات تتجاوز profile وemail وopenid، سيتم تنفيذ ما يلي: سيُطلب من المستخدم أيضًا منح إذن الوصول إلى الموارد المطلوبة.

  2. بعد أن يسجِّل المستخدم دخوله، يمكنك الحصول على 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. إذا كنت بحاجة إلى نقل المستخدم المُسجّل الدخول حاليًا إلى خادم خلفية، إرسال الرمز المميّز للمعرّف إلى خادم الخلفية والتحقق من صحة الرمز المميز على الخادم.