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'yı 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'yı ve GoogleSignInClient nesnesini yapılandırma

  1. Oturum açma etkinliğinizin onCreate yönteminde, uygulamanızın gerektirdiği kullanıcı verilerini istemek için Google ile Oturum Açma'yı yapılandırın. Örneğin, Google ile Oturum Açma özelliğini kullanıcıların kimlik 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ı deneyimini sağlamak için oturum açarken yalnızca uygulamanızın minimum şekilde çalışması için gerekli olan kapsamları isteyin. Kullanıcılarınızın izin ekranını yaptıkları işlemin bağlamında görmesi 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, belirttiğiniz seçeneklerle GoogleSignInClient nesnesi oluşturun.

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

Oturum açmış mevcut bir kullanıcının olup olmadığını kontrol edin

Etkinliğinizin onStart yönteminde, bir kullanıcının Google ile uygulamanızda oturum açmış olup olmadığı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 GoogleSignInAccount nesnesi döndürürse kullanıcı zaten uygulamanızda Google ile oturum açmıştır. Kullanıcı arayüzünüzü uygun şekilde güncelleyin. Yani oturum açma düğmesini gizleyin, ana etkinliğinizi başlatın veya uygulamanız için uygun olan herhangi bir şeyi kullanın.

GoogleSignIn.getLastSignedInAccount, null sonucunu döndürürse kullanıcı henüz uygulamanızda Google ile oturum açmamıştır. Kullanıcı arayüzünü, Google ile Oturum Açma düğmesini görüntüleyecek ş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 kodunu 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 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);
    
  3. Android etkinliğinde (örneğin, onCreate yönteminde) tıklandığında kullanıcının oturum açmasını sağlamak için düğmenizin OnClickListener özelliğini kaydedin:

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

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

  1. Oturum açma hesap seçicisinin resmi Etkinliğin onClick yönteminde, getSignInIntent yöntemiyle oturum açma niyeti oluşturup niyeti startActivityForResult 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);
    }

    Niyet başlatıldığında kullanıcıdan oturum açacağı Google Hesabı'nı seçmesi istenir. profile, email ve openid dışında kapsamlar istediyseniz kullanıcıdan istenen kaynaklara erişim izni de vermesi 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ı adı gibi bilgiler 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 birlikte kullanıcının Google kimliğini (istemci tarafı kullanım için) ve getIdToken ile kullanıcı için bir kimlik jetonu da alabilirsiniz. O anda oturum açmış olan kullanıcıyı bir arka uç sunucusuna aktarmanız gerekiyorsa kimlik jetonunu arka uç sunucunuza gönderin ve sunucuda jetonu doğrulayın.