Google ile Oturum Açma Özelliğini Android Uygulamanıza Entegre Etme

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 ayarlayın.

Google ile Oturum Açma'yı ve GoogleSignInClient nesnesini yapılandırma

  1. 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ği ve temel profil bilgilerini isteyecek şekilde yapılandırmak için DEFAULT_SIGN_IN parametresiyle bir GoogleSignInOptions nesnesi oluşturun. Kullanıcıların e-posta adreslerini de istemek için requestEmail seçeneğiyle GoogleSignInOptions nesnesini 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 gerekiyorsa 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şlemin bağlamında izin ekranını görmeleri için ek kapsamları yalnızca ihtiyaç duyduğunuzda isteyin. Ek Kapsam İsteme bölümünü inceleyin.

  2. Ardından, oturum açma etkinliğinizin onCreate yönteminde de belirttiğiniz seçeneklerle bir GoogleSignInClient nesnesi oluşturun.

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

Oturum açmış kullanıcı olup olmadığını kontrol etme

Etkinliğinizin onStart yöntemine göre bir kullanıcının uygulamanızda Google ile zaten 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, GoogleSignInAccount nesnesi döndürürse (null yerine) kullanıcı, uygulamanızda Google ile zaten oturum açmıştır. Kullanıcı arayüzünüzü uygun şekilde güncelleyin. Yani oturum açma düğmesini gizleyebilir, ana etkinliğinizi başlatabilir veya uygulamanız için uygun olanı kullanabilirsiniz.

GoogleSignIn.getLastSignedInAccount işlevi null değerini döndürürse kullanıcı henüz Google ile uygulamanızda 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üğmesini ekleyin

  1. Standart Google ile oturum açma düğmesi Uygulamanızın düzenine SignInButton öğesini ekleyin:

    <com.google.android.gms.common.SignInButton
     android:id="@+id/sign_in_button"
     android:layout_width="wrap_content"
     android:layout_height="wrap_content" />
    
  2. İ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 setSize yöntemiyle düğmenin boyutunu özelleştirebilirsiniz.

    // Set the dimensions of the sign-in button.
    SignInButton signInButton = findViewById(R.id.sign_in_button);
    signInButton.setSize(SignInButton.SIZE_STANDARD);
    
  3. Android etkinliğinde (örneğin, onCreate yönteminde), tıklandığında kullanıcı oturum açmak için düğmenizin OnClickListener değerini kaydedin:

    findViewById(R.id.sign_in_button).setOnClickListener(this);
    

Oturum açma akışını başlatma

  1. Oturum açma hesap seçicisinin resmi Etkinliğin onClick yönteminde, getSignInIntent yöntemiyle bir oturum açma amacı oluşturarak ve amacı startActivityForResult ile başlatarak oturum açma düğmesine dokunma işlemlerini işleme alın.

    @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);
    }

    Niyetin başlatılması, kullanıcıdan oturum açmak için bir Google Hesabı seçmesini ister. profile, email ve openid dışındaki kapsamlar için istekte bulunduysanız kullanıcıdan istenen kaynaklara erişim izni vermesi de istenir.

  2. Kullanıcı oturum açtıktan sonra etkinliğin onActivityResult yönteminde kullanıcı için bir GoogleSignInAccount 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 kullanıcının adı gibi bilgileri 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) ve getIdToken ile kullanıcının kimlik jetonunu da alabilirsiniz. Oturum açmış olan kullanıcıyı bir arka uç sunucusuna aktarmanız gerekiyorsa kimlik jetonunu arka uç sunucunuza gönderin ve jetonu sunucuda doğrulayın.