Melakukan Autentikasi Menggunakan Login dengan Google di Android

Anda dapat mengizinkan pengguna untuk melakukan autentikasi dengan Firebase menggunakan Akun Google mereka dengan mengintegrasikan Login dengan Google ke dalam aplikasi Anda.

Sebelum memulai

  1. Tambahkan Firebase ke project Android.
  2. Tambahkan dependensi untuk Firebase Authentication dan Login dengan Google ke file build.gradle tingkat aplikasi Anda:
    implementation 'com.google.firebase:firebase-auth:16.0.3'
    implementation 'com.google.android.gms:play-services-auth:16.0.0'
    
  3. Jika Anda belum menghubungkan aplikasi dengan project Firebase, lakukanlah dari Firebase console.
  4. Jika Anda belum menentukan sidik jari SHA-1 aplikasi, lakukanlah dari halaman Setelan di Firebase console. Baca bagian Mengautentikasi Klien Anda untuk mengetahui informasi selengkapnya mengenai cara mendapatkan sidik jari SHA-1 aplikasi Anda.
  5. Aktifkan Login dengan Google di Firebase console:
    1. Di Firebase console, buka bagian Auth.
    2. Di tab Metode login, aktifkan metode login dengan Google lalu klik Simpan.

Melakukan autentikasi dengan Firebase

  1. Integrasikan Login dengan Google ke aplikasi Anda dengan mengikuti langkah-langkah di halaman Mengintegrasikan Login dengan Google ke Aplikasi Android Anda. Ketika Anda mengonfigurasi objek GoogleSignInOptions, panggil requestIdToken:
            // Configure Google Sign In
            GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestIdToken(getString(R.string.default_web_client_id))
                    .requestEmail()
                    .build();
    
    Anda harus meneruskan ID klien server ke metode requestIdToken. Untuk mencari ID klien OAuth 2.0:
    1. Buka Halaman kredensial di Konsol API.
    2. ID klien jenis Aplikasi web adalah ID klien OAuth 2.0 server backend Anda.
    Setelah Anda mengintegrasikan Login dengan Google, aktivitas login Anda akan memiliki kode yang serupa dengan yang berikut ini:
        private void signIn() {
            Intent signInIntent = mGoogleSignInClient.getSignInIntent();
            startActivityForResult(signInIntent, RC_SIGN_IN);
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            super.onActivityResult(requestCode, resultCode, data);
    
            // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
            if (requestCode == RC_SIGN_IN) {
                Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
                try {
                    // Google Sign In was successful, authenticate with Firebase
                    GoogleSignInAccount account = task.getResult(ApiException.class);
                    firebaseAuthWithGoogle(account);
                } catch (ApiException e) {
                    // Google Sign In failed, update UI appropriately
                    Log.w(TAG, "Google sign in failed", e);
                    // ...
                }
            }
        }
    
  2. Pada metode onCreate aktivitas login, dapatkan instance bersama dari objek FirebaseAuth:
    private FirebaseAuth mAuth;
    // ...
    mAuth = FirebaseAuth.getInstance();
    
  3. Saat menginisialisasi Aktivitas Anda, periksa apakah pengguna saat ini sedang login:
    @Override
    public void onStart() {
        super.onStart();
        // Check if user is signed in (non-null) and update UI accordingly.
        FirebaseUser currentUser = mAuth.getCurrentUser();
        updateUI(currentUser);
    }
    
  4. Setelah pengguna berhasil login, dapatkan token ID dari objek GoogleSignInAccount, tukarkan dengan kredensial Firebase, dan lakukan autentikasi dengan Firebase menggunakan kredensial Firebase:
        private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
            Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
    
            AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
            mAuth.signInWithCredential(credential)
                    .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                        @Override
                        public void onComplete(@NonNull Task<AuthResult> task) {
                            if (task.isSuccessful()) {
                                // Sign in success, update UI with the signed-in user's information
                                Log.d(TAG, "signInWithCredential:success");
                                FirebaseUser user = mAuth.getCurrentUser();
                                updateUI(user);
                            } else {
                                // If sign in fails, display a message to the user.
                                Log.w(TAG, "signInWithCredential:failure", task.getException());
                                Snackbar.make(findViewById(R.id.main_layout), "Authentication Failed.", Snackbar.LENGTH_SHORT).show();
                                updateUI(null);
                            }
    
                            // ...
                        }
                    });
        }
    
    Jika pemanggilan signInWithCredential berhasil, Anda dapat menggunakan metode getCurrentUser untuk mendapatkan data akun pengguna.

Langkah berikutnya

Setelah pengguna login untuk pertama kalinya, akun pengguna baru akan dibuat dan dihubungkan ke kredensial—yaitu, nama pengguna dan sandi, nomor telepon, atau informasi penyedia autentikasi—yang digunakan pengguna tersebut untuk login. Akun baru ini disimpan sebagai bagian dari project Firebase Anda dan dapat digunakan untuk mengidentifikasi pengguna di setiap aplikasi dalam project Anda, terlepas dari cara pengguna login.

  • Pada aplikasi, Anda bisa memperoleh informasi profil dasar pengguna dari objek FirebaseUser . Lihat Mengelola Pengguna.

  • Pada Aturan Keamanan Firebase Realtime Database dan Cloud Storage, Anda dapat memperoleh ID unik milik pengguna yang login dari variabel auth dan menggunakannya untuk mengontrol data yang dapat diakses pengguna.

Anda dapat mengizinkan pengguna untuk login ke aplikasi Anda menggunakan beberapa penyedia autentikasi dengan menautkan kredensial penyedia autentikasi ke akun pengguna yang ada.

Agar pengguna logout, panggil signOut:

FirebaseAuth.getInstance().signOut();

Kirim masukan tentang...

Butuh bantuan? Kunjungi halaman dukungan kami.