Skip to content

Kotlin Codes

  • Home
  • Flutter
  • Kotlin
  • SwiftUI
  • About Me
  • Home
    • Blog
    • Privacy Policy
  • Flutter
    • Widgets In Flutter
      • Cupertino Widgets
      • iOS Styling Flutter
    • Database & Storage
    • State Management in Flutter
    • Performance Optimization
    • Networking & APIs
    • Testing & Debugging
  • Kotlin
    • Kotlin XML Development(Traditional View-based UI)
      • Introduction to XML UI Development
      • State Management and Architecture
      • Advanced Topics
      • Firebase and Cloud Integration
      • UI Components and Customization
      • Media and Visual Enhancements
      • Navigation and Data Handling
      • UI Performance Optimization
      • Networking and Data Management
    • Jetpack Compose
      • UI Elements
      • Kotlin Multiplatform
      • Accessibility
      • Animation
      • Core Concepts
      • Custom Drawing
      • Interoperability
      • Layouts
      • State Management
      • Modifiers
      • Navigation
      • Testing
      • Theming
      • Performance
    • Kotin-CodeChallenge
  • SwiftUI
  • About Me

Integrating Social Media Authentication in Flutter

March 4, 2025May 15, 2025 Sayandh

Integrating social media authentication into your Flutter application can significantly enhance the user experience by providing a quick and convenient way for users to sign up and log in. By leveraging existing social media accounts like Google, Facebook, and Twitter, you reduce friction for new users and streamline the authentication process.

Why Integrate Social Media Authentication?

  • User Convenience: Simplifies the sign-up/login process.
  • Increased User Engagement: Reduces barriers to entry, encouraging more users to register.
  • Trust and Credibility: Leverages the trust users already have in established social media platforms.

Implementing Social Media Authentication in Flutter

We’ll cover the integration of Google, Facebook, and Twitter authentication in this comprehensive guide.

1. Setting Up the Development Environment

Before diving into the code, make sure you have the Flutter SDK installed and properly configured. Also, ensure that you have accounts on the respective social media platforms for developer access.

2. Google Authentication

Step 1: Configure Google Sign-In on Firebase

a. Create a new project on the Firebase console (console.firebase.google.com).

b. Enable Google Sign-In as an authentication provider: in the Firebase console, go to Authentication > Sign-in method and enable Google.

c. Download the google-services.json file and add it to your android/app directory.

d. Ensure you’ve added Firebase to your Flutter project. Modify the `android/build.gradle` like this:

dependencies {
    classpath 'com.android.tools.build:gradle:7.0.0'
    classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.10'
    classpath 'com.google.gms:google-services:4.3.10' // Add this line
}

and `android/app/build.gradle` :

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply plugin: 'com.google.gms.google-services' // Add this line

android {
    // Your Android configurations
}

dependencies {
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
    // Other dependencies
}
Step 2: Add the google_sign_in Package

Add the google_sign_in package to your pubspec.yaml file:

dependencies:
  flutter:
    sdk: flutter
  google_sign_in: ^6.1.6

Then, run flutter pub get to install the package.

Step 3: Implement Google Sign-In

Create a function to handle Google Sign-In:

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

Future signInWithGoogle() async {
  final GoogleSignIn googleSignIn = GoogleSignIn();
  
  try {
    final GoogleSignInAccount? googleSignInAccount = await googleSignIn.signIn();

    if (googleSignInAccount != null) {
      final GoogleSignInAuthentication googleSignInAuthentication = await googleSignInAccount.authentication;
      
      final OAuthCredential credential = GoogleAuthProvider.credential(
        accessToken: googleSignInAuthentication.accessToken,
        idToken: googleSignInAuthentication.idToken,
      );

      return await FirebaseAuth.instance.signInWithCredential(credential);
    }
    return null;
  } catch (e) {
    print('Error signing in with Google: $e');
    return null;
  }
}

Usage:

ElevatedButton(
  onPressed: () async {
    UserCredential? userCredential = await signInWithGoogle();
    if (userCredential != null && userCredential.user != null) {
      print('Signed in with Google: ${userCredential.user!.displayName}');
    } else {
      print('Google sign-in failed.');
    }
  },
  child: Text('Sign in with Google'),
)

Include firebase dependencies

dependencies:
  firebase_core: ^2.27.0
  firebase_auth: ^4.17.3
  cloud_firestore: ^4.15.5

3. Facebook Authentication

Step 1: Configure Facebook Login

a. Create an app on the Facebook Developers site (developers.facebook.com) and configure Facebook Login.

b. Add the platform “Android” or “iOS” and set up the necessary configurations.

c. Make sure to configure your Facebook App ID in your app manifest for both Android and iOS, also define Callback URL .

Step 2: Add the flutter_facebook_auth Package

Add the flutter_facebook_auth package to your pubspec.yaml file:

dependencies:
  flutter_facebook_auth: ^5.0.7

Then, run flutter pub get to install the package.

Step 3: Implement Facebook Login

Create a function to handle Facebook Login:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';

Future signInWithFacebook() async {
  try {
    final LoginResult result = await FacebookAuth.instance.login();

    if (result.status == LoginStatus.success) {
      final OAuthCredential credential = FacebookAuthProvider.credential(result.accessToken!.token);
      return await FirebaseAuth.instance.signInWithCredential(credential);
    }
    return null;
  } catch (e) {
    print('Error signing in with Facebook: $e');
    return null;
  }
}

Usage:

ElevatedButton(
  onPressed: () async {
    UserCredential? userCredential = await signInWithFacebook();
    if (userCredential != null && userCredential.user != null) {
      print('Signed in with Facebook: ${userCredential.user!.displayName}');
    } else {
      print('Facebook sign-in failed.');
    }
  },
  child: Text('Sign in with Facebook'),
)

4. Twitter Authentication

Twitter authentication involves using the twitter_login package, which allows users to sign in using their Twitter accounts. The process includes setting up a Twitter developer account and creating an application to obtain API keys.

Step 1: Configure Twitter API Keys

To integrate Twitter authentication, you need to create a developer account and configure your app. Here’s how to set up the Twitter API:

  1. Apply for a Twitter Developer Account:
    • Go to the Twitter Developer Portal and apply for a developer account.
    • Provide detailed information on how you plan to use the Twitter API, including how you will ensure the security and privacy of user data.
  2. Create a New Twitter App:
    • After your developer account is approved, create a new app.
    • Provide the required details, such as your app’s name, description, and website URL.
  3. Retrieve API Keys:
    • Navigate to your app’s settings in the Twitter Developer Portal.
    • Retrieve your API key, API secret key, Bearer token (if required), and configure the authentication settings to match your application requirements.
  4. Configure Callback URLs:
    • Set the callback URLs for your app to handle the authentication redirects. This ensures a secure and seamless authentication flow.
Step 2: Add the twitter_login Package

Add the twitter_login package to your pubspec.yaml file:

dependencies:
  twitter_login: ^4.0.2

Then, run flutter pub get to install the package.

Step 3: Implement Twitter Login

First add you’re API Keys:

import 'package:twitter_login/twitter_login.dart';

final twitterLogin = TwitterLogin(
  apiKey: 'YOUR_API_KEY',
  apiSecretKey: 'YOUR_API_SECRET_KEY',
  redirectURI: 'YOUR_CALLBACK_URL', //optional
);

Create a function to handle Twitter Login:

import 'package:firebase_auth/firebase_auth.dart';
import 'package:twitter_login/twitter_login.dart';

Future signInWithTwitter() async {
  try {
    final TwitterLoginResult result = await twitterLogin.loginV2();

    switch (result.status) {
      case TwitterLoginStatus.loggedIn:
        final OAuthCredential credential = TwitterAuthProvider.credential(
          accessToken: result.authToken,
          secret: result.authTokenSecret,
        );
        return await FirebaseAuth.instance.signInWithCredential(credential);
      case TwitterLoginStatus.cancelledByUser:
        print('Twitter sign-in cancelled by user.');
        return null;
      case TwitterLoginStatus.error:
        print('Error signing in with Twitter: ${result.errorMessage}');
        return null;
      default:
        return null;
    }
  } catch (e) {
    print('Error signing in with Twitter: $e');
    return null;
  }
}

Usage:

ElevatedButton(
  onPressed: () async {
    UserCredential? userCredential = await signInWithTwitter();
    if (userCredential != null && userCredential.user != null) {
      print('Signed in with Twitter: ${userCredential.user!.displayName}');
    } else {
      print('Twitter sign-in failed.');
    }
  },
  child: Text('Sign in with Twitter'),
)

Handling Social Media Sign-Out

In addition to signing in, you should provide users with a way to sign out of their accounts. Each social media platform requires a slightly different approach to signing out.

Signing Out of Google

import 'package:google_sign_in/google_sign_in.dart';

Future signOutGoogle() async {
  final GoogleSignIn googleSignIn = GoogleSignIn();
  try {
    await googleSignIn.signOut();
    await FirebaseAuth.instance.signOut();
  } catch (e) {
    print('Error signing out of Google: $e');
  }
}

Signing Out of Facebook

import 'package:flutter_facebook_auth/flutter_facebook_auth.dart';

Future signOutFacebook() async {
  try {
    await FacebookAuth.instance.logOut();
    await FirebaseAuth.instance.signOut();
  } catch (e) {
    print('Error signing out of Facebook: $e');
  }
}

Signing Out of Twitter

import 'package:twitter_login/twitter_login.dart';

Future signOutTwitter() async {
  try {
     // There's no explicit Twitter sign-out through this plugin; just sign out of Firebase
    await FirebaseAuth.instance.signOut();
  } catch (e) {
    print('Error signing out of Twitter: $e');
  }
}

Error Handling

Error handling is an essential part of any authentication flow. You should handle potential exceptions and display appropriate error messages to the user.

try {
  final UserCredential userCredential = await FirebaseAuth.instance.signInWithCredential(credential);
  // Successful login
} on FirebaseAuthException catch (e) {
  if (e.code == 'user-disabled') {
    print('This account has been disabled.');
  } else if (e.code == 'invalid-credential') {
    print('Invalid credentials.');
  }
  // Handle other Firebase authentication errors
} catch (e) {
  // Handle generic errors
  print('An error occurred: $e');
}

Conclusion

Integrating social media authentication into your Flutter applications is a streamlined process that significantly enhances the user experience. By following the steps outlined above, you can integrate Google, Facebook, and Twitter authentication smoothly. Remember to handle potential errors and always prioritize user security.

Beyond This Article: Your Next Discovery Awaits

Handling Social Media Authentication Flows and Access Tokens in Flutter
Integrating with Other Backend-as-a-Service (BaaS) Platforms in Flutter
Implementing Programmatic Navigation and Redirects in Flutter
Integrating with Microsoft Azure Mobile Services in Flutter
Building Real-Time Chat Applications with Flutter and Firebase
Using Packages for Social Login (e.g., flutter_facebook_auth, google_sign_in, sign_in_with_apple) to Authenticate Users in Flutter
Tagged with Facebook Login Flutter, Firebase Authentication Flutter, Flutter Authentication, Flutter Firebase Integration, Flutter Social Authentication, Google Sign-In Flutter, OAuth Flutter, Secure Login Flutter, Social Media Login, Twitter Login Flutter
  • Flutter

Post navigation

Previous Post

Adding Sound and Haptics in SwiftUI Apps

Next Post

Creating a Stepper UI for Input in SwiftUI

Recents

  • Writing Effective Unit Tests for Individual Widgets and UI Components to Ensure They Function Correctly in Isolation in Flutter
  • Understanding the Architecture and Platform Differences When Developing Flutter Desktop Applications
  • Using Firebase Analytics to Track User Behavior, Screen Views, Custom Events, and User Properties in Flutter
  • Using the web_socket_channel Package to Establish and Manage WebSocket Connections in Flutter
  • Working with WebSockets to Enable Real-Time, Bidirectional Communication Between Your Flutter App and a Backend Server
  • Dart
  • Flutter
    • Advanced Concepts
    • Animations & UI Enhancements
    • Data Handling (JSON, REST APIs, Databases)
    • Database & Storage
    • Input Widgets
    • iOS Styling Flutter
    • Layout Widgets
    • Navigation and Routing
    • Networking & APIs
    • Performance Optimization
    • Platform Integration (Native Features)
    • State Management (Provider, BLoC, Riverpod)
    • State Management in Flutter
    • Testing (Unit, Widget, Integration)
    • Testing & Debugging
    • UI Basics
    • Widgets In Flutter
      • Cupertino Widgets
  • Kotlin
    • Jetpack Compose
      • Accessibility
      • Animation
      • Core Concepts
      • Custom Drawing
      • Interoperability
      • Kotlin Multiplatform
      • Layouts
      • Modifiers
      • Navigation
      • Performance
      • State Management
      • Testing
      • Theming
      • UI Elements
    • Kotin-CodeChallenge
    • Kotlin XML Development(Traditional View-based UI)
      • Accessibility
      • Advanced Topics
      • Advanced Topics & Custom Views
      • Animation
      • Data Binding
      • Drawables
      • Firebase and Cloud Integration
      • Introduction to XML UI Development
      • Kotlin Integration & Patterns
      • Layouts
      • Media and Visual Enhancements
      • Navigation and Data Handling
      • Networking and Data Management
      • RecyclerView
      • State Management and Architecture
      • Styles & Themes
      • UI Components and Customization
      • UI Performance Optimization
      • View Binding
      • Views
      • XML Techniques
  • SwiftUI

© KotlinCodes. Explore the latest Kotlin tutorials, Flutter guides, and Dart programming tips. | Learn Kotlin | Flutter Development | Dart Programming | Flutter Widgets