Flutter-এ Firebase Cloud Messaging (FCM) ব্যবহার করে Push Notifications সেটআপ করা বেশ সহজ এবং কার্যকরী। FCM ব্যবহার করে আপনি ব্যবহারকারীর ডিভাইসে রিয়েল-টাইম নোটিফিকেশন পাঠাতে পারেন। এটি সাধারণত চ্যাট অ্যাপ্লিকেশন, ই-কমার্স নোটিফিকেশন, বা অন্যান্য গুরুত্বপূর্ণ ইভেন্টের আপডেট পাঠাতে ব্যবহৃত হয়।
FCM ব্যবহার করে Push Notifications সেটআপ করার ধাপ
ধাপ ১: প্রজেক্ট সেটআপ করা
- Firebase Console-এ যান: Firebase Console
- একটি নতুন প্রজেক্ট তৈরি করুন (যদি প্রজেক্ট না থাকে)।
- Cloud Messaging অপশনটি চালু করুন।
- Android এবং iOS অ্যাপ Firebase-এ যুক্ত করুন এবং google-services.json (Android-এর জন্য) এবং GoogleService-Info.plist (iOS-এর জন্য) সঠিকভাবে আপনার প্রজেক্টে যোগ করুন।
ধাপ ২: Flutter প্রজেক্টে firebase_messaging প্যাকেজ যোগ করা
প্রথমে pubspec.yaml ফাইলে firebase_messaging প্যাকেজ যোগ করুন:
dependencies:
flutter:
sdk: flutter
firebase_core: ^2.13.1
firebase_messaging: ^14.7.3
এরপর flutter pub get কমান্ড চালিয়ে প্যাকেজগুলো ইন্সটল করুন।
ধাপ ৩: Android সেটআপ করা
Flutter-এ Android সেটআপ করার সময় নিশ্চিত করুন যে নিচের ধাপগুলো সঠিকভাবে অনুসরণ করা হয়েছে:
- android/build.gradle ফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
dependencies {
classpath 'com.google.gms:google-services:4.3.15'
}
- android/app/build.gradle ফাইলে নিচের লাইনটি যোগ করুন:
apply plugin: 'com.google.gms.google-services'
- android/app/src/main/AndroidManifest.xml ফাইলে প্রয়োজনীয় পারমিশন এবং পরিষেবা যোগ করুন:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="your.package.name">
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<application
android:name=".YourApplicationName"
android:label="YourAppName"
android:icon="@mipmap/ic_launcher">
<!-- FCM এর জন্য এই পরিষেবা যোগ করা -->
<service
android:name="com.google.firebase.messaging.FirebaseMessagingService"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
<!-- ফায়ারবেস ইনিশিয়ালাইজ করতে -->
<meta-data
android:name="com.google.firebase.messaging.default_notification_channel_id"
android:value="high_importance_channel"/>
</application>
</manifest>
ধাপ ৪: iOS সেটআপ করা
- ios/Runner/Info.plist ফাইলে নিচের কনফিগারেশন যোগ করুন:
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>remote-notification</string>
</array>
- ios/Podfile এ নিচের লাইন যোগ করুন:
platform :ios, '11.0'
এরপর pod install চালান, যাতে সমস্ত ডিপেনডেন্সি ঠিকমতো ইন্সটল হয়।
ধাপ ৫: Firebase Messaging সেটআপ করা
Flutter অ্যাপ্লিকেশনে Firebase Messaging ইন্সট্যান্স ইনিশিয়ালাইজ করতে হবে এবং ব্যাকগ্রাউন্ড বা ফরগ্রাউন্ড নোটিফিকেশন হ্যান্ডল করতে হবে।
import 'package:flutter/material.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
// ব্যাকগ্রাউন্ডে নোটিফিকেশন প্রাপ্ত হলে এই মেথড ট্রিগার হবে
await Firebase.initializeApp();
print("Handling a background message: ${message.messageId}");
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await Firebase.initializeApp();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'FCM Push Notification',
home: NotificationScreen(),
);
}
}
class NotificationScreen extends StatefulWidget {
@override
_NotificationScreenState createState() => _NotificationScreenState();
}
class _NotificationScreenState extends State<NotificationScreen> {
late FirebaseMessaging _messaging;
String _notificationText = 'No Notifications';
@override
void initState() {
super.initState();
_messaging = FirebaseMessaging.instance;
// টোকেন প্রিন্ট করা
_messaging.getToken().then((token) {
print("FCM Token: $token");
});
// ফরগ্রাউন্ডে নোটিফিকেশন হ্যান্ডেল করা
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
print('Received a message while in foreground!');
setState(() {
_notificationText = message.notification?.title ?? 'No title';
});
});
// যখন ব্যবহারকারী নোটিফিকেশন ক্লিক করে অ্যাপ খুলে
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
print('Notification clicked!');
setState(() {
_notificationText = message.notification?.title ?? 'No title';
});
});
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Push Notification Example'),
),
body: Center(
child: Text(
_notificationText,
style: TextStyle(fontSize: 20),
),
),
);
}
}
কোডের ব্যাখ্যা
- _firebaseMessagingBackgroundHandler: ব্যাকগ্রাউন্ডে নোটিফিকেশন এলে এই ফাংশনটি কল হয়। এটি Firebase ইন্সট্যান্স ইনিশিয়ালাইজ করে এবং মেসেজ হ্যান্ডল করে।
- FirebaseMessaging.instance.getToken(): FCM টোকেন প্রাপ্ত করতে ব্যবহার করা হয়, যা সার্ভার থেকে ডিভাইসে নোটিফিকেশন পাঠাতে প্রয়োজন।
- FirebaseMessaging.onMessage.listen(): ফরগ্রাউন্ডে নোটিফিকেশন এলে এটি হ্যান্ডল করে।
- FirebaseMessaging.onMessageOpenedApp.listen(): যখন ব্যবহারকারী নোটিফিকেশন ক্লিক করে অ্যাপ চালু করে, তখন এটি হ্যান্ডল করা হয়।
ধাপ ৬: Firebase Console থেকে Notification পাঠানো
- Firebase Console এ যান এবং আপনার প্রজেক্ট সিলেক্ট করুন।
- Cloud Messaging ট্যাব সিলেক্ট করুন।
- Send your first message ক্লিক করুন।
- একটি টাইটেল এবং মেসেজ দিন, এবং টার্গেট সিলেক্ট করুন (যেমন অ্যাপ টার্গেট বা টোকেন)।
- Send বাটন ক্লিক করুন এবং নোটিফিকেশন পাঠান। ডিভাইসে নোটিফিকেশন এলে অ্যাপ্লিকেশন সেটি রিসিভ করবে।
ধাপ ৭: ব্যাকগ্রাউন্ড এবং টার্মিনেটেড স্টেট হ্যান্ডল করা
FirebaseMessaging.onBackgroundMessage() ব্যবহার করে আপনি অ্যাপটি ব্যাকগ্রাউন্ড বা টার্মিনেটেড স্টেটে থাকলেও নোটিফিকেশন হ্যান্ডল করতে পারেন। ব্যাকগ্রাউন্ডে নোটিফিকেশন প্রাপ্ত হলে _firebaseMessagingBackgroundHandler মেথডটি কল হয়।
টিপস:
- ফরগ্রাউন্ড নোটিফিকেশন: ফরগ্রাউন্ডে নোটিফিকেশন প্রাপ্ত হলে আপনার অ্যাপের UI আপডেট করতে setState() ব্যবহার করুন।
- Permissions: iOS ডিভাইসে পুশ নোটিফিকেশন সঠিকভাবে কাজ করতে Notification Permissions অনুমতি দিতে হবে। requestPermission() মেথড ব্যবহার করে iOS-এ অনুমতি প্রম্পট করতে হবে।
FirebaseMessaging messaging = FirebaseMessaging.instance;
NotificationSettings settings = await messaging.requestPermission(
alert: true,
badge: true,
sound: true,
);
if (settings.authorizationStatus == AuthorizationStatus.authorized) {
print('User granted permission');
} else if (settings.authorizationStatus == AuthorizationStatus.provisional) {
print('User granted provisional permission');
} else {
print('User declined or has not accepted permission');
}
সারাংশ
- Flutter-এ FCM ব্যবহার করে আপনি সহজেই Push Notifications সেটআপ করতে পারেন।
- firebase_messaging প্যাকেজ ব্যবহার করে ফরগ্রাউন্ড, ব্যাকগ্রাউন্ড, এবং টার্মিনেটেড স্টেটে নোটিফিকেশন হ্যান্ডল করা সম্ভব।
- FCM টোকেন ব্যবহার করে নির্দিষ্ট ডিভাইসে নোটিফিকেশন পাঠানো যায়।
- Firebase Console থেকে সহজেই নোটিফিকেশন পাঠানো এবং ট্র্যাক করা সম্ভব।
Firebase Cloud Messaging (FCM) ব্যবহার করে আপনি আপনার অ্যাপে রিয়েল-টাইম নোটিফিকেশন এবং ব্যবহারকারীদের ইন্টারঅ্যাকশনের সুযোগ তৈরি করতে পারবেন।
Read more