برای ادغام Google Sign-In در برنامه Android خود، Google Sign-In را پیکربندی کنید و دکمهای را به طرحبندی برنامه خود اضافه کنید که جریان ورود به سیستم را شروع میکند.
قبل از شروع
یک پروژه Google API Console را پیکربندی کنید و پروژه Android Studio خود را راه اندازی کنید .
Google Sign-in و شیء 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();
اگر برای دسترسی به Google API نیاز به درخواست دامنه های اضافی دارید، آنها را با
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);
در اکتیویتی اندروید (مثلاً در روش
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); }
شروع intent از کاربر می خواهد که یک حساب 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
دریافت کنید. اگر نیاز دارید کاربر وارد شده فعلی را به یک سرور باطن ارسال کنید، رمز ID را به سرور باطن خود ارسال کنید و رمز را در سرور تأیید کنید.