Flutter Authentication with Google, Facebook, and Apple Sign-In

Flutter Authentication with Google, Facebook, and Apple Sign-In

Quick Summary: Unlock seamless authentication in Flutter by integrating Google, Facebook, and Apple Sign-In methods. This article serves as your comprehensive guide to implementing these authentication mechanisms, enabling users to access your app with their preferred social media accounts securely.

Introduction

In modern mobile app development, user authentication is a crucial part of creating a personalized and secure user experience. Flutter, Google's UI toolkit for building natively compiled applications for mobile, web, and desktop from a single codebase, makes it easy to implement various authentication methods. In this article, we'll explore how to integrate Google Sign-In, Facebook Sign-In, and Apple Sign-In into a Flutter app.

Hire Flutter Developers

Google Sign-In

Google Sign-In is a popular authentication method that allows users to sign in to your app with their Google accounts. To integrate Google Sign-In in your Flutter app, follow these steps:

1. Add dependencies: In your `pubspec.yaml` file, add the following dependencies:

dependencies:

  flutter/material.dart:

  firebase_auth:

  google_sign_in:

 

2. Set up Firebase: Create a new project in the Firebase Console (https://console.firebase.google.com/) and follow the instructions to add your app. Download the configuration file (`google-services.json`) and place it in the `android/app` directory.

3. Implement Google Sign-In: Now, you can use the following code snippet to implement Google Sign-In:

import 'package:flutter/material.dart';

import 'package:firebase_auth/firebase_auth.dart';

import 'package:google_sign_in/google_sign_in.dart';


void main() => runApp(MyApp());


class MyApp extends StatelessWidget {

  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      home: SignInDemo(),

    );

  }

}


class SignInDemo extends StatefulWidget {

  @override

  State createState() => SignInDemoState();

}


class SignInDemoState extends State<SignInDemo> {

  final FirebaseAuth _auth = FirebaseAuth.instance;

  final GoogleSignIn googleSignIn = GoogleSignIn();


  Future<UserCredential?> _handleSignIn() async {

    try {

      final GoogleSignInAccount googleSignInAccount = await googleSignIn.signIn();

      final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication;


      final AuthCredential credential = GoogleAuthProvider.credential(

        accessToken: googleSignInAuthentication.accessToken,

        idToken: googleSignInAuthentication.idToken,

      );


      return await _auth.signInWithCredential(credential);

    } catch (error) {

      print(error);

      return null;

    }

  }


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(

        title: Text('Google Sign-In Demo'),

      ),

      body: Center(

        child: ElevatedButton(

          child: Text('Sign in with Google'),

          onPressed: () async {

            UserCredential? userCredential = await _handleSignIn();

            if (userCredential != null) {

              print('User signed in: ${userCredential.user?.displayName}');

            }

          },

        ),

      ),

    );

  }

}

Facebook Sign-In

Facebook Sign-In allows users to log in to your app using their Facebook credentials. To integrate Facebook Sign-In in your Flutter app, follow these steps:

1. Add dependencies: In your `pubspec.yaml` file, add the following dependencies:

dependencies:

  flutter/material.dart:

  firebase_auth:

  flutter_facebook_auth:

 

2. Implement Facebook Sign-In: Use the code snippet below to implement Facebook Sign-In:

import 'package:flutter/material.dart';

import 'package:firebase_auth/firebase_auth.dart';

import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';


void main() => runApp(MyApp());


class MyApp extends StatelessWidget {

  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      home: SignInDemo(),

    );

  }

}


class SignInDemo extends StatefulWidget {

  @override

  State createState() => SignInDemoState();

}


class SignInDemoState extends State<SignInDemo> {

  final FirebaseAuth _auth = FirebaseAuth.instance;


  Future<UserCredential?> _handleSignIn() async {

    try {

      final AccessToken result = await FacebookAuth.instance.login();


      final AuthCredential credential = FacebookAuthProvider.credential(result.token);


      return await _auth.signInWithCredential(credential);

    } catch (error) {

      print(error);

      return null;

    }

  }


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(

        title: Text('Facebook Sign-In Demo'),

      ),

      body: Center(

        child: ElevatedButton(

          child: Text('Sign in with Facebook'),

          onPressed: () async {

            UserCredential? userCredential = await _handleSignIn();

            if (userCredential != null) {

              print('User signed in: ${userCredential.user?.displayName}');

            }

          },

        ),

      ),

    );

  }

}

Apple Sign-In

Apple Sign-In allows users to log in to your app using their Apple ID. To integrate Apple Sign-In in your Flutter app, follow these steps:

1. Add dependencies: In your `pubspec.yaml` file, add the following dependencies:

dependencies:

  flutter/material.dart:

  firebase_auth:

  sign_in_with_apple:

 

2. Implement Apple Sign-In: Use the code snippet below to implement Apple Sign-In:

import 'package:flutter/material.dart';

import 'package:firebase_auth/firebase_auth.dart';

import 'package:sign_in_with_apple/sign_in_with_apple.dart';


void main() => runApp(MyApp());


class MyApp extends StatelessWidget {

  @override

  Widget build(BuildContext context) {

    return MaterialApp(

      home: SignInDemo(),

    );

  }

}


class SignInDemo extends StatefulWidget {

  @override

  State createState() => SignInDemoState();

}


class SignInDemoState extends State<SignInDemo> {

  final FirebaseAuth _auth = FirebaseAuth.instance;


  Future<UserCredential?> _handleSignIn() async {

    try {

      final result = await SignInWithApple.getAppleIDCredential(

        scopes: [

          AppleIDAuthorizationScopes.email,

          AppleIDAuthorizationScopes.fullName,

        ],

      );


      final AuthCredential credential = OAuthProvider('apple.com').credential(

        idToken: result.identityToken,

        accessToken: result.authorizationCode,

      );


      return await _auth.signInWithCredential(credential);

    } catch (error) {

      print(error);

      return null;

    }

  }


  @override

  Widget build(BuildContext context) {

    return Scaffold(

      appBar: AppBar(

        title: Text('Apple Sign-In Demo'),

      ),

      body: Center(

        child: ElevatedButton(

          child: Text('Sign in with Apple'),

          onPressed: () async {

            UserCredential? userCredential = await _handleSignIn();

            if (userCredential != null) {

              print('User signed in: ${userCredential.user?.displayName}');

            }

          },

        ),

      ),

    );

  }

}

 

These code snippets provide a foundation for implementing Google Sign-In, Facebook Sign-In, and Apple Sign-In in a Flutter app. Make sure to follow the platform-specific setup instructions for each authentication method and adapt the code to fit your app's requirements.

Remember to handle errors and provide a smooth user experience by incorporating loading indicators and error messages as needed. Additionally, consult the documentation for each authentication provider for any updates or changes to the implementation process.

Ready to elevate your Flutter app design? Unlock the full potential of Flutter layouts with our professional Flutter developers. 

Remote Team

Kshitiz Sharma

Kshitiz Sharma

A mobile app developer on a relentless quest for excellence, fueled by a passion for innovation. I am a dedicated explorer in the world of code, always pushing the limits, and love creating apps that work wonders.