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, Google ile Oturum Açma özelliğini şunun için yapılandırın: uygulamanızın gerektirdiği kullanıcı verilerini isteyin. Örneğin, Google ile Oturum Açma özelliğiyle ilgili kullanıcı isteği Kimlik ve temel profil bilgileri için, GoogleSignInOptions nesnesini ifade eder.DEFAULT_SIGN_IN Kullanıcılardan e-posta için ayrıca GoogleSignInOptions nesnesini requestEmail seçeneği.

    // 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ı belirtin. requestScopes ile. En iyi kullanıcı deneyimi için oturum açılırken yalnızca şuna uygun kapsamları isteyin: asgari düzeyde çalışması için gereklidir. Ek kapsamlar iste ihtiyaç duyduğunuzda kullanıcılarınıza izin ekranını göstermek için gerçekleştirdikleri eylemin bağlamını düşünün. Ek Kapsam İsteme bölümünü inceleyin.

  2. Ardından, oturum açma etkinliğinizin onCreate yönteminde de Belirttiğiniz seçeneklere sahip GoogleSignInClient nesnesi.

    // 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, kullanıcının daha önce oturum açmış olup olmadığını kontrol edin yardımcı olur.

// 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 zaten Google ile oturum açmıştır. Kullanıcı arayüzünüzü uygun şekilde güncelleyin. Yani oturum açma düğmesini gizleyin, veya uygulamanız için uygun olan herhangi bir şey varsa bunu yapabilirsiniz.

GoogleSignIn.getLastSignedInAccount, null sonucu döndürürse kullanıcı henüz Google ile uygulamanızda oturum açtınız. Google ile Oturum Açma'yı görüntüleyecek şekilde kullanıcı arayüzünü güncelleme düğmesini tıklayın.

Uygulamanıza Google ile Oturum Açma düğmesini ekleyin

  1. Standart Google ile oturum açma düğmesi. SignInButton ekleyin kullanabilirsiniz:

    <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ı: Google Görüntülü Reklam Ağı yerine varsayılan oturum açma düğmesi grafiğini kullanıyorsanız oturum açma düğmesi öğelerinizi sağlayarak düğmenin setSize ile birlikte boyut yöntemidir.

    // 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) kullanıcının oturum açmasını sağlayan düğmenizin OnClickListener özelliği:

    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, oturum açma düğmesine dokunduktan sonra otomatik olarak getSignInIntent ile oturum açma amacı yöntemini kullanın ve niyeti startActivityForResult ile başlatı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);
    }

    Amaç başlatıldığında kullanıcıdan oturum açmak için bir Google Hesabı seçmesi istenir somut olarak ortaya koyar. profile, email ve openid dışında kapsamlar istediyseniz kullanıcıdan, istenen kaynaklara erişim izni vermesi de istenir.

  2. Kullanıcı oturum açtıktan sonra bir GoogleSignInAccount alabilirsiniz. nesnesini ifade eder.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 nesnesi, oturum açmış kullanıcıyla ilgili bilgiler içerir kullanıcı adı (ör. kullanıcı adı)

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

    Kullanıcının e-posta adresini getEmail ile de alabilirsiniz. getId ile kullanıcının Google kimliği (istemci tarafında kullanım için), ve getIdToken ile kullanıcı için bir kimlik jetonu. Oturumu açık olan kullanıcıyı arka uç sunucuya iletmeniz gerekiyorsa kimlik jetonunu arka uç sunucunuza gönderin sunucu üzerinde jetonu kontrol edin.