Google ile oturum açma özelliğini Android uygulamanıza entegre etmek için Google ile oturum açma özelliğini yapılandırın ve uygulamanızın düzenine oturum açma akışını başlatan bir düğme ekleyin.
Başlamadan önce
Bir Google API Konsolu projesi yapılandırın ve Android Studio projenizi oluşturun.
Google ile oturum açma ve GoogleSignInClient nesnesini yapılandırma
Oturum açma etkinliğinizin
onCreate
yönteminde, Google ile oturum açma özelliğini, uygulamanızın gerektirdiği kullanıcı verilerini isteyecek şekilde yapılandırın. Örneğin, Google ile oturum açma özelliğini kullanıcıların kimliğini ve temel profil bilgilerini isteyecek şekilde yapılandırmak içinDEFAULT_SIGN_IN
parametresini içeren birGoogleSignInOptions
nesnesi oluşturun. Kullanıcıların e-posta adreslerini de istemek içinGoogleSignInOptions
nesnesinirequestEmail
seçeneğiyle oluşturun.// 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'lerine erişmek için ek kapsamlar istemeniz gerekirse bunları
requestScopes
ile belirtin. En iyi kullanıcı deneyimi için oturum açarken yalnızca uygulamanızın minimum düzeyde çalışması için gereken kapsamları isteyin. Kullanıcılarınızın, gerçekleştirdikleri bir işlem bağlamında izin ekranını görmesi için ek kapsamları yalnızca ihtiyaç duyduğunuzda isteyin. Ek Kapsam İsteme başlıklı makaleyi inceleyin.Ardından, oturum açma etkinliğinizin
onCreate
yönteminde de belirttiğiniz seçenekleri içeren birGoogleSignInClient
nesnesi oluşturun.// Build a GoogleSignInClient with the options specified by gso. mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
Oturum açmış mevcut bir kullanıcı olup olmadığını kontrol etme
Etkinliğinizin onStart
yönteminde, kullanıcının uygulamanızda Google ile oturum açıp açmadığını kontrol edin.
// 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
, null
yerine bir GoogleSignInAccount
nesnesi döndürüyorsa kullanıcı uygulamanızda Google ile zaten oturum açmıştır.
Kullanıcı arayüzünüzü buna göre güncelleyin. Yani oturum açma düğmesini gizleyin, ana etkinliğinizi başlatın veya uygulamanız için uygun olan başka bir işlem yapın.
GoogleSignIn.getLastSignedInAccount
, null
döndürürse kullanıcı henüz uygulamanızda Google ile oturum açmamıştır. Kullanıcı arayüzünüzü Google ile oturum açma düğmesini gösterecek şekilde güncelleyin.
Uygulamanıza Google ile oturum açma düğmesi ekleme
Uygulamanızın düzenine
SignInButton
ekleyin:<com.google.android.gms.common.SignInButton android:id="@+id/sign_in_button" android:layout_width="wrap_content" android:layout_height="wrap_content" />
İsteğe bağlı: Kendi oturum açma düğmesi öğelerinizi sağlamak yerine varsayılan oturum açma düğmesi grafiğini kullanıyorsanız düğmenin boyutunu
setSize
yöntemiyle özelleştirebilirsiniz.// Set the dimensions of the sign-in button. SignInButton signInButton = findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD);
Android etkinliğinde (örneğin,
onCreate
yönteminde), düğmenizinOnClickListener
değerini kaydederek kullanıcının tıklandığında oturum açmasını sağlayın:findViewById(R.id.sign_in_button).setOnClickListener(this);
Oturum açma akışını başlatma
Etkinliğin
onClick
yönteminde,getSignInIntent
yöntemiyle oturum açma isteği oluşturarak ve isteğistartActivityForResult
ile başlatarak oturum açma düğmesine dokunma işlemlerini yönetin.@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'i başlattığınızda kullanıcıdan oturum açmak için bir Google Hesabı seçmesi istenir.
profile
,email
veopenid
dışındaki kapsamlar için istek gönderdiyseniz kullanıcıdan istenen kaynaklara erişim izni vermesi de istenir.Kullanıcı oturum açtıktan sonra, etkinliğin
onActivityResult
yönteminde kullanıcı için birGoogleSignInAccount
nesnesi alabilirsiniz.@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
nesnesi, oturum açmış kullanıcıyla ilgili bilgileri (ör. kullanıcının adı) içerir.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); } }
Ayrıca
getEmail
ile kullanıcının e-posta adresini,getId
ile kullanıcının Google kimliğini (istemci tarafında kullanım için) vegetIdToken
ile kullanıcının kimlik jetonunu da alabilirsiniz. Oturumu açık olan kullanıcıyı bir arka uç sunucusuna iletmeniz gerekiyorsa kimlik jetonunu arka uç sunucunuza gönderin ve jetonu sunucuda doğrulayın.