smart_firebase_fcm 1.0.4 copy "smart_firebase_fcm: ^1.0.4" to clipboard
smart_firebase_fcm: ^1.0.4 copied to clipboard

A plug-and-play modular Firebase FCM package with local notifications, redirection, and manual feature toggles (analytics, crashlytics, etc.).

πŸ”” smart_firebase_fcm #

A lightweight, plug-and-play Firebase FCM (Push Notification) package for Flutter, offering seamless support for foreground, background, and terminated notifications, deep link redirection, local notifications, and customizable Firebase Analytics and Crashlytics integration.


✨ Features #

  • One-line Setup: Initialize Firebase and FCM with a single call.
  • Notification Handling: Supports foreground, background, and terminated state notifications.
  • Local Notifications: Integrates flutter_local_notifications for foreground notifications.
  • Android Notification Channels: Pre-configured for consistent Android notification delivery.
  • Feature Toggles: Enable or disable Firebase Analytics, Crashlytics, and FCM via flags.
  • Deep Link Redirection: Easily handle notification taps with customizable navigation logic.
  • Clean & Modular: Well-structured, extensible code for easy customization.

πŸš€ Quick Start #

1. Configure Firebase Features #

Set up Firebase and FCM in your app with customizable feature flags.

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // Configure Firebase feature flags
  FirebaseFeatureFlags.enableAnalytics = false;
  FirebaseFeatureFlags.enableCrashlytics = true;
  FirebaseFeatureFlags.enableFCM = true;

  // Initialize FCM with a callback for notification taps
  await FCMInitializer.initialize(
    onTap: FCMHandler.handleMessage,
  );

  runApp(const MyApp());
}

2. Handle Notification Taps #

Implement custom navigation logic for notification taps using the handleMessage callback.

void handleMessage(RemoteMessage message) {
  final type = message.data['type'];

  switch (type) {
    case 'order':
      navigatorKey.currentState?.pushNamed('/order', arguments: message.data['order_id']);
      break;
    case 'chat':
      navigatorKey.currentState?.pushNamed('/chat');
      break;
    default:
      print('Unknown notification type: $type');
      break;
  }
}

3. Retrieve FCM Device Token #

final token = await FCMInitializer.getDeviceToken();
print('FCM Token: $token');

πŸ“± Android Configuration #

  1. Add the google-services.json file to your Android project at:

    android/app/google-services.json
    
  2. Update your android/build.gradle:

buildscript {
  dependencies {
    classpath 'com.google.gms:google-services:4.3.15'
  }
}
  1. Update android/app/build.gradle:
apply plugin: 'com.google.gms.google-services'

dependencies {
  implementation 'com.google.firebase:firebase-messaging:23.0.8'
}
  1. Ensure these permissions in AndroidManifest.xml:
<uses-permission android:name="android.permission.INTERNET"/>
  1. Add FCM service inside <application> tag:
<service
        android:name="com.google.firebase.messaging.FirebaseMessagingService"
        android:exported="true">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
  </intent-filter>
</service>

🍎 iOS Configuration #

  1. Add the GoogleService-Info.plist file to your Xcode project in Runner/.

  2. In ios/Podfile, ensure platform is at least iOS 12:

platform :ios, '12.0'
  1. Add required capabilities:
  • Enable Push Notifications
  • Enable Background Modes β†’ Check Remote notifications
  1. Add notification permission request in Info.plist:
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>

πŸ“¦ Installation #

Add the package to your pubspec.yaml:

dependencies:
  smart_firebase_fcm: ^1.0.3

Install with:

flutter pub get

Note: Ensure Firebase is set up for your Flutter project. Follow the official Firebase setup guide.


πŸ”§ Notification Payload Structure #

{
  "notification": {
    "title": "New Order!",
    "body": "You have a new order."
  },
  "data": {
    "type": "order",
    "order_id": "12345"
  }
}

🧱 Under the Hood #

  • Firebase Initialization: Handles Firebase.initializeApp() and permissions.

  • FCM Listeners:

    • onMessage (Foreground)
    • onMessageOpenedApp (Background)
    • getInitialMessage (Terminated)
  • Local Notifications: Uses flutter_local_notifications.

  • Notification Channels: Preconfigured for Android.

  • Feature Flags: Control Analytics, Crashlytics, and FCM independently.


πŸ§ͺ Example App #

To test the full flow:

cd example/
flutter run

❓ FAQ #

Q: Can I use this package without Firebase Analytics or Crashlytics? βœ… Yes β€” just toggle the flags in FirebaseFeatureFlags.

Q: How do I customize notification navigation? πŸ› οΈ Implement your redirection logic inside FCMHandler.handleMessage.

Q: iOS not receiving notifications? πŸ“² Ensure permissions and capabilities are properly set in Xcode.


πŸ“„ License #

MIT License Β© 2025 Divyaraj Jadeja


πŸ’¬ Support #

Please report bugs or contribute at GitHub Repository

1
likes
0
points
332
downloads

Publisher

verified publisherquantumeye.in

Weekly Downloads

A plug-and-play modular Firebase FCM package with local notifications, redirection, and manual feature toggles (analytics, crashlytics, etc.).

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

firebase_analytics, firebase_core, firebase_crashlytics, firebase_messaging, flutter, flutter_local_notifications

More

Packages that depend on smart_firebase_fcm