Google Sign-In را در برنامه Android خود ادغام کنید

برای ادغام ورود به سیستم با گوگل (Google Sign-In) در برنامه اندروید خود، ورود به سیستم با گوگل (Google Sign-In) را پیکربندی کنید و دکمه‌ای به طرح‌بندی برنامه خود اضافه کنید که جریان ورود به سیستم را آغاز کند.

قبل از اینکه شروع کنی

یک پروژه Google API Console پیکربندی کنید و پروژه اندروید استودیو خود را راه‌اندازی کنید.

پیکربندی ورود به سیستم گوگل و شیء 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();

    اگر برای دسترسی به APIهای گوگل نیاز به درخواست محدوده‌های اضافی دارید، آنها را با requestScopes مشخص کنید. برای بهترین تجربه کاربری، هنگام ورود به سیستم، فقط محدوده‌هایی را درخواست کنید که برای حداقل عملکرد برنامه شما مورد نیاز هستند. هرگونه محدوده اضافی را فقط زمانی که به آنها نیاز دارید درخواست کنید تا کاربران شما صفحه رضایت را در متن عملی که انجام داده‌اند ببینند. به درخواست محدوده‌های اضافی مراجعه کنید.

  2. سپس، همچنین در متد onCreate مربوط به اکتیویتی ورود به سیستم خود، یک شیء GoogleSignInClient با گزینه‌هایی که مشخص کرده‌اید، ایجاد کنید.

    // Build a GoogleSignInClient with the options specified by gso.
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

بررسی وجود کاربر وارد شده فعلی

در متد onStart مربوط به activity خود، بررسی کنید که آیا کاربری قبلاً با حساب گوگل خود وارد برنامه شده است یا خیر.

// 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 ) را برمی‌گرداند، کاربر قبلاً با گوگل به برنامه شما وارد شده است. رابط کاربری خود را بر این اساس به‌روزرسانی کنید - یعنی دکمه ورود را پنهان کنید، فعالیت اصلی خود را اجرا کنید یا هر کار دیگری که برای برنامه شما مناسب است انجام دهید.

اگر GoogleSignIn.getLastSignedInAccount null را برمی‌گرداند، کاربر هنوز با حساب گوگل خود وارد برنامه نشده است. رابط کاربری خود را به‌روزرسانی کنید تا دکمه ورود با گوگل نمایش داده شود.

دکمه ورود به سیستم گوگل را به برنامه خود اضافه کنید

  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 مربوط به activity، با ایجاد یک intent ورود به سیستم با استفاده از متد getSignInIntent و شروع intent با 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);
    }

    شروع اینتنت، کاربر را وادار به انتخاب یک حساب گوگل برای ورود می‌کند. اگر درخواست شما شامل حوزه‌هایی فراتر از profile ، email و openid ، از کاربر خواسته می‌شود که به منابع درخواستی نیز دسترسی بدهد.

  2. پس از ورود کاربر، می‌توانید یک شیء GoogleSignInAccount برای کاربر در متد onActivityResult مربوط به activity دریافت کنید.

    @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 ، شناسه گوگل کاربر (برای استفاده در سمت کلاینت) را با getId و یک توکن شناسه برای کاربر را با getIdToken دریافت کنید. اگر نیاز دارید کاربر فعلی وارد شده را به یک سرور backend ارسال کنید، توکن شناسه را به سرور backend خود ارسال کنید و توکن را در سرور اعتبارسنجی کنید.