ادغام Google Sign-In در برنامه Android شما

برای ادغام Google Sign-In در برنامه Android خود، Google Sign-In را پیکربندی کنید و دکمه‌ای را به طرح‌بندی برنامه خود اضافه کنید که جریان ورود به سیستم را شروع می‌کند.

قبل از شروع

یک پروژه Google API Console را پیکربندی کنید و پروژه Android Studio خود را راه اندازی کنید .

Google Sign-in و شیء GoogleSignInClient را پیکربندی کنید

  1. در روش onCreate فعالیت ورود به سیستم خود، Google Sign-In را پیکربندی کنید تا اطلاعات کاربر مورد نیاز برنامه شما را درخواست کند. به عنوان مثال، برای پیکربندی Google Sign-In برای درخواست شناسه و اطلاعات اولیه نمایه کاربران، یک شیء 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 API نیاز به درخواست دامنه های اضافی دارید، آنها را با 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. دکمه استاندارد ورود به سیستم گوگل 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. در اکتیویتی اندروید (مثلاً در روش onCreateOnClickListener دکمه خود را ثبت کنید تا با کلیک روی کاربر وارد سیستم شوید:

    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 دریافت کنید. اگر نیاز دارید کاربر وارد شده فعلی را به یک سرور باطن ارسال کنید، رمز ID را به سرور باطن خود ارسال کنید و رمز را در سرور تأیید کنید.