image

30 Nov 2025

9K

35K

Integrasi Google Sign-In di Flutter: Panduan Lengkap

Integrasi Google Sign-In dalam aplikasi Flutter adalah salah satu cara paling efisien untuk menyediakan autentikasi pengguna yang mudah dan aman. Metode ini memanfaatkan kredensial Google yang sudah ada pada pengguna, menghilangkan kebutuhan untuk membuat akun baru atau mengingat sandi tambahan. Artikel ini akan memandu Anda langkah demi langkah melalui proses integrasi Google Sign-In ke dalam aplikasi Flutter Anda.

Mengapa Menggunakan Google Sign-In?

Google Sign-In menawarkan beberapa keuntungan signifikan:

  • Kemudahan Penggunaan: Pengguna dapat masuk hanya dengan beberapa ketukan, seringkali tanpa perlu mengetik kredensial.
  • Keamanan: Mengandalkan infrastruktur keamanan Google yang kuat untuk melindungi data pengguna.
  • Pengalaman Pengguna yang Lebih Baik: Meminimalkan gesekan dalam proses pendaftaran dan masuk, meningkatkan retensi pengguna.
  • Cepat dan Efisien: Proses integrasi yang relatif mudah dan cepat untuk developer.

Prasyarat

Sebelum memulai, pastikan Anda memiliki:

  • SDK Flutter yang terinstal.
  • Editor kode seperti VS Code atau Android Studio.
  • Akun Google.
  • Proyek Firebase yang sudah disiapkan.

Langkah 1: Konfigurasi Proyek Firebase

1.1 Buat Proyek Firebase

Jika Anda belum memiliki proyek Firebase, kunjungi Firebase Console dan buat proyek baru.

1.2 Tambahkan Aplikasi ke Proyek Firebase

Di dalam proyek Firebase Anda:

  • Untuk Android:
    • Klik ikon Android untuk menambahkan aplikasi Android.
    • Masukkan nama paket (Package name) aplikasi Anda (contoh: com.example.your_app_name).
    • Dapatkan SHA-1 fingerprint dari aplikasi Anda. Anda bisa mendapatkannya dengan menjalankan perintah berikut di terminal:
      
      keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android
                      
      Atau untuk Windows:
      
      keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
                      
    • Unduh file google-services.json dan letakkan di direktori android/app/ proyek Flutter Anda.
  • Untuk iOS:
    • Klik ikon iOS untuk menambahkan aplikasi iOS.
    • Masukkan ID Bundel (Bundle ID) aplikasi Anda (contoh: com.example.yourAppName).
    • Unduh file GoogleService-Info.plist dan letakkan di direktori ios/Runner/ proyek Flutter Anda. Pastikan file ini ditambahkan ke target Runner di Xcode.

1.3 Aktifkan Google Sign-In di Firebase Authentication

Di Firebase Console Anda:

  • Pergi ke bagian Authentication > Sign-in method.
  • Pilih Google dan aktifkan.
  • Pilih alamat email dukungan proyek dan klik Save.

Langkah 2: Konfigurasi Proyek Flutter

2.1 Tambahkan Dependencies

Buka file pubspec.yaml proyek Flutter Anda dan tambahkan dependensi berikut:


dependencies:
  flutter:
    sdk: flutter
  firebase_core: ^2.24.2 # Gunakan versi terbaru
  firebase_auth: ^4.15.2 # Gunakan versi terbaru
  google_sign_in: ^6.1.0 # Gunakan versi terbaru

Jalankan flutter pub get setelah menyimpan file.

2.2 Inisialisasi Firebase

Tambahkan kode inisialisasi Firebase ke file main.dart Anda. Pastikan ini dilakukan sebelum menjalankan aplikasi Anda.


import 'package:firebase_core/firebase_core.dart';
import 'package:flutter/material.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await Firebase.initializeApp(); // Inisialisasi Firebase
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Google Sign-In',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const AuthScreen(),
    );
  }
}

Langkah 3: Konfigurasi Spesifik Platform

3.1 Konfigurasi Android

Pastikan google-services.json ada di android/app/. Kemudian, modifikasi file android/app/build.gradle:

Di bagian atas file, tambahkan:


apply plugin: 'com.android.application'
apply plugin: 'com.google.gms.google-services' // Tambahkan baris ini

Di bagian dependencies:


dependencies {
    // ...
    implementation platform('com.google.firebase:firebase-bom:32.7.0') // Gunakan versi terbaru
    implementation 'com.google.firebase:firebase-auth'
    implementation 'com.google.android.gms:play-services-auth:20.7.0' // Gunakan versi terbaru
}

Di file android/build.gradle (project level), pastikan ada:


buildscript {
    repositories {
        google()
        mavenCentral()
    }
    dependencies {
        // ...
        classpath 'com.google.gms:google-services:4.4.0' // Gunakan versi terbaru
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
    }
}

3.2 Konfigurasi iOS

Pastikan GoogleService-Info.plist ada di ios/Runner/ dan ditambahkan ke target Runner di Xcode.

Untuk mendukung Google Sign-In, Anda perlu menambahkan URL scheme ke file ios/Runner/Info.plist Anda. Buka file GoogleService-Info.plist, cari nilai REVERSED_CLIENT_ID. Salin nilainya.

Buka ios/Runner/Info.plist dan tambahkan entri berikut (ganti YOUR_REVERSED_CLIENT_ID dengan nilai yang Anda salin):


<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>YOUR_REVERSED_CLIENT_ID</string>
        </array>
    </dict>
</array>

Setelah melakukan perubahan pada Info.plist atau menambahkan GoogleService-Info.plist, disarankan untuk melakukan flutter clean dan kemudian membangun ulang aplikasi Anda.

Langkah 4: Menulis Kode Flutter untuk Autentikasi

Buat widget atau kelas service untuk menangani logika autentikasi. Berikut adalah contoh sederhana:


import 'package:flutter/material.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:google_sign_in/google_sign_in.dart';

class AuthScreen extends StatefulWidget {
  const AuthScreen({super.key});

  @override
  State createState() => _AuthScreenState();
}

class _AuthScreenState extends State {
  User? _user;
  final GoogleSignIn _googleSignIn = GoogleSignIn();
  final FirebaseAuth _auth = FirebaseAuth.instance;

  @override
  void initState() {
    super.initState();
    _auth.authStateChanges().listen((User? user) {
      setState(() {
        _user = user;
      });
    });
  }

  Future<User?> _signInWithGoogle() async {
    try {
      // 1. Trigger the Google Sign-In flow
      final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();
      if (googleUser == null) {
        // The user canceled the sign-in
        return null;
      }

      // 2. Obtain the auth details from the request
      final GoogleSignInAuthentication googleAuth = await googleUser.authentication;

      // 3. Create a new credential
      final AuthCredential credential = GoogleAuthProvider.credential(
        accessToken: googleAuth.accessToken,
        idToken: googleAuth.idToken,
      );

      // 4. Sign in to Firebase with the credential
      final UserCredential userCredential = await _auth.signInWithCredential(credential);
      return userCredential.user;
    } catch (e) {
      print("Error signing in with Google: $e");
      return null;
    }
  }

  Future<void> _signOut() async {
    await _googleSignIn.signOut();
    await _auth.signOut();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text('Google Sign-In Demo'),
      ),
      body: Center(
        child: _user == null
            ? Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  const Text('Anda belum masuk.'),
                  const SizedBox(height: 20),
                  ElevatedButton(
                    onPressed: _signInWithGoogle,
                    child: const Text('Masuk dengan Google'),
                  ),
                ],
              )
            : Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  Text('Halo, ${_user!.displayName ?? _user!.email}!'),
                  const SizedBox(height: 20),
                  ElevatedButton(
                    onPressed: _signOut,
                    child: const Text('Keluar'),
                  ),
                ],
              ),
      ),
    );
  }
}

Penjelasan kode:

  • _googleSignIn: Sebuah instance dari GoogleSignIn untuk memulai alur masuk Google.
  • _auth: Sebuah instance dari FirebaseAuth untuk berinteraksi dengan layanan autentikasi Firebase.
  • _signInWithGoogle():
    • Memanggil _googleSignIn.signIn() untuk memicu pop-up masuk Google.
    • Jika pengguna berhasil memilih akun, kita mendapatkan GoogleSignInAuthentication yang berisi accessToken dan idToken.
    • Ini digunakan untuk membuat AuthCredential spesifik untuk Google.
    • Kredensial tersebut kemudian digunakan dengan _auth.signInWithCredential() untuk mengautentikasi pengguna di Firebase.
  • _signOut(): Melakukan logout baik dari sesi Google maupun Firebase.
  • Widget AuthScreen menampilkan tombol "Masuk dengan Google" jika pengguna belum masuk, atau menampilkan nama pengguna dan tombol "Keluar" jika sudah masuk.
  • _auth.authStateChanges().listen((User? user) { ... }); mendengarkan perubahan status autentikasi Firebase dan memperbarui UI secara reaktif.

Langkah 5: Uji Aplikasi Anda

Jalankan aplikasi Anda di emulator atau perangkat fisik (Android atau iOS). Klik tombol "Masuk dengan Google". Anda akan melihat pop-up yang meminta Anda untuk memilih akun Google Anda. Setelah berhasil masuk, UI akan memperbarui untuk menunjukkan informasi pengguna dan tombol "Keluar".

Penanganan Error

Penting untuk menangani potensi error yang mungkin terjadi selama proses masuk, seperti:

  • Pengguna membatalkan proses masuk.
  • Masalah jaringan.
  • Konfigurasi Firebase atau Google Cloud yang salah.

Dalam contoh di atas, blok try-catch dasar telah disertakan untuk mencetak error ke konsol. Dalam aplikasi produksi, Anda harus memberikan umpan balik yang lebih informatif kepada pengguna (misalnya, melalui SnackBar).

Kesimpulan

Dengan mengikuti langkah-langkah di atas, Anda telah berhasil mengintegrasikan Google Sign-In ke dalam aplikasi Flutter Anda, menyediakan metode autentikasi yang cepat, aman, dan ramah pengguna. Firebase Authentication menyederhanakan proses secara signifikan, memungkinkan Anda untuk fokus pada fitur inti aplikasi Anda.

Ingatlah untuk selalu menjaga dependensi Anda tetap mutakhir dan merujuk dokumentasi resmi Firebase dan Google Sign-In untuk informasi terbaru.

Related Articles

Dec 19, 2025

Flutter & Firebase Auth: Seamless Social Media Login

Flutter & Firebase Auth: Seamless Social Media Login In today's digital landscape, user authentication is a critical component of almost every application. Pro

Dec 19, 2025

Building a Widget List with Sticky

Building a Widget List with Sticky Header in Flutter Creating dynamic and engaging user interfaces is crucial for modern applications. One common UI pattern th

Dec 19, 2025

Mastering Transform Scale & Rotate Animations in Flutter

Mastering Transform Scale & Rotate Animations in Flutter Flutter's powerful animation framework allows developers to create visually stunning and highly intera