برای ادغام ورود به سیستم با گوگل (Google Sign-In) در برنامه اندروید خود، ورود به سیستم با گوگل (Google Sign-In) را پیکربندی کنید و دکمهای به طرحبندی برنامه خود اضافه کنید که جریان ورود به سیستم را آغاز کند.
قبل از اینکه شروع کنی
یک پروژه Google API Console پیکربندی کنید و پروژه اندروید استودیو خود را راهاندازی کنید.
پیکربندی ورود به سیستم گوگل و شیء GoogleSignInClient
در متد
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مشخص کنید. برای بهترین تجربه کاربری، هنگام ورود به سیستم، فقط محدودههایی را درخواست کنید که برای حداقل عملکرد برنامه شما مورد نیاز هستند. هرگونه محدوده اضافی را فقط زمانی که به آنها نیاز دارید درخواست کنید تا کاربران شما صفحه رضایت را در متن عملی که انجام دادهاند ببینند. به درخواست محدودههای اضافی مراجعه کنید.سپس، همچنین در متد
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 را برمیگرداند، کاربر هنوز با حساب گوگل خود وارد برنامه نشده است. رابط کاربری خود را بهروزرسانی کنید تا دکمه ورود با گوگل نمایش داده شود.
دکمه ورود به سیستم گوگل را به برنامه خود اضافه کنید
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);
در اکتیویتی اندروید (برای مثال، در متد
onCreate)،OnClickListenerدکمه خود را طوری ثبت کنید که هنگام کلیک، کاربر وارد سیستم شود:findViewById(R.id.sign_in_button).setOnClickListener(this);
شروع جریان ورود به سیستم
در متد 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، از کاربر خواسته میشود که به منابع درخواستی نیز دسترسی بدهد.پس از ورود کاربر، میتوانید یک شیء
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 خود ارسال کنید و توکن را در سرور اعتبارسنجی کنید.