এই কুইকস্টার্টটি বর্ণনা করে কিভাবে আপনার মোবাইল এবং ওয়েব ক্লায়েন্ট অ্যাপগুলিতে Firebase Cloud Messaging সেট আপ করবেন যাতে আপনি নির্ভরযোগ্যভাবে বার্তা পাঠাতে পারেন। সার্ভার পরিবেশের জন্য, আপনার সার্ভার পরিবেশ এবং FCM দেখুন।
Flutter-এ একটি Firebase Cloud Messaging ক্লায়েন্ট অ্যাপ সেট আপ করুন
আপনি যে প্ল্যাটফর্মটি লক্ষ্য করছেন তার উপর নির্ভর করে, আপনাকে কিছু অতিরিক্ত প্রয়োজনীয় সেটআপ পদক্ষেপ নিতে হবে।
আইওএস+
আপনার অ্যাপ্লিকেশনটি বার্তা গ্রহণ শুরু করার আগে, আপনার Xcode প্রকল্পে পুশ বিজ্ঞপ্তি এবং ব্যাকগ্রাউন্ড মোড সক্ষম করতে হবে।
- আপনার Xcode প্রজেক্ট ওয়ার্কস্পেস (`ios/Runner.xcworkspace`) খুলুন।
- পুশ বিজ্ঞপ্তি সক্রিয় করুন ।
- ব্যাকগ্রাউন্ড ফেচ এবং রিমোট নোটিফিকেশন ব্যাকগ্রাউন্ড এক্সিকিউশন মোড সক্ষম করুন।
FCM ব্যবহার করার আগে, আপনার APN প্রমাণীকরণ কীটি Firebase কনসোলে আপলোড করুন। যদি আপনার কাছে ইতিমধ্যেই একটি APN প্রমাণীকরণ কী না থাকে, তাহলে Apple Developer Member Center এ একটি তৈরি করুন।
- Firebase কনসোলে আপনার প্রোজেক্টের ভিতরে, গিয়ার আইকনটি নির্বাচন করুন, প্রোজেক্ট সেটিংস নির্বাচন করুন এবং তারপর ক্লাউড মেসেজিং ট্যাবটি নির্বাচন করুন।
- আপনার ডেভেলপমেন্ট অথেনটিকেশন কী, অথবা প্রোডাকশন অথেনটিকেশন কী, অথবা উভয়ই আপলোড করতে আপলোড বোতামটি নির্বাচন করুন। কমপক্ষে একটি প্রয়োজন।
- প্রতিটি প্রমাণীকরণ কী-এর জন্য, .p8 ফাইলটি নির্বাচন করুন এবং কী আইডি এবং আপনার অ্যাপল টিম আইডি প্রদান করুন। সংরক্ষণ করুন নির্বাচন করুন।
পদ্ধতি সুইজলিং
অ্যাপল ডিভাইসে FCM Flutter প্লাগইন ব্যবহার করার জন্য, পদ্ধতি সুইজলিং প্রয়োজন। এটি ছাড়া, FCM টোকেন হ্যান্ডলিং এর মতো গুরুত্বপূর্ণ Firebase বৈশিষ্ট্যগুলি সঠিকভাবে কাজ করবে না।
অ্যান্ড্রয়েড
গুগল প্লে পরিষেবা
FCM ক্লায়েন্টদের জন্য Android 4.4 বা তার পরবর্তী ভার্সন চালিত ডিভাইস প্রয়োজন যার মধ্যে Google Play পরিষেবা ইনস্টল করা আছে, অথবা Google API সহ Android 4.4 চালিত এমুলেটর প্রয়োজন। মনে রাখবেন যে আপনি Google Play Store এর মাধ্যমে আপনার Android অ্যাপগুলি স্থাপন করতে সীমাবদ্ধ নন।
যেসব অ্যাপ Play Services SDK-এর উপর নির্ভর করে, তাদের Google Play পরিষেবার বৈশিষ্ট্যগুলি অ্যাক্সেস করার আগে সর্বদা ডিভাইসটিতে একটি সামঞ্জস্যপূর্ণ Google Play পরিষেবার APK আছে কিনা তা পরীক্ষা করা উচিত। এটি দুটি জায়গায় করার পরামর্শ দেওয়া হয়: প্রধান কার্যকলাপের onCreate()
পদ্ধতিতে এবং এর onResume()
পদ্ধতিতে। onCreate()
চেক ইন করার মাধ্যমে নিশ্চিত করা হয় যে অ্যাপটি সফলভাবে পরীক্ষা না করে ব্যবহার করা যাবে না। onResume()
চেক ইন করার মাধ্যমে নিশ্চিত করা হয় যে ব্যবহারকারী যদি অন্য কোনও উপায়ে, যেমন ব্যাক বোতামের মাধ্যমে, চলমান অ্যাপে ফিরে আসে, তবুও চেকটি সম্পন্ন হয়।
যদি ডিভাইসটিতে Google Play পরিষেবার কোনও সামঞ্জস্যপূর্ণ সংস্করণ না থাকে, তাহলে আপনার অ্যাপটি GoogleApiAvailability.makeGooglePlayServicesAvailable()
কল করে ব্যবহারকারীদের Play Store থেকে Google Play পরিষেবা ডাউনলোড করার অনুমতি দিতে পারে।
ওয়েব
FCM দিয়ে ওয়েব শংসাপত্র কনফিগার করুন
FCM ওয়েব ইন্টারফেসটি ভলান্টারি অ্যাপ্লিকেশন সার্ভার আইডেন্টিফিকেশন বা "VAPID" কী নামক ওয়েব শংসাপত্র ব্যবহার করে, যা সমর্থিত ওয়েব পুশ পরিষেবাগুলিতে অনুরোধ প্রেরণের অনুমোদন দেয়। পুশ বিজ্ঞপ্তিগুলিতে আপনার অ্যাপটি সাবস্ক্রাইব করতে, আপনাকে আপনার Firebase প্রকল্পের সাথে একজোড়া কী সংযুক্ত করতে হবে। আপনি হয় একটি নতুন কী জোড়া তৈরি করতে পারেন অথবা Firebase কনসোলের মাধ্যমে আপনার বিদ্যমান কী জোড়া আমদানি করতে পারেন।
- Firebase কনসোল সেটিংস প্যানের ক্লাউড মেসেজিং ট্যাবটি খুলুন এবং ওয়েব কনফিগারেশন বিভাগে যান।
- ওয়েব পুশ সার্টিফিকেট ট্যাবে, জেনারেট কী পেয়ার ক্লিক করুন। কনসোলটি একটি নোটিশ প্রদর্শন করে যে কী পেয়ারটি তৈরি করা হয়েছে, এবং পাবলিক কী স্ট্রিং এবং যোগ করা তারিখ প্রদর্শন করে।
যদি আপনার ওয়েব অ্যাপের সাথে ইতিমধ্যেই ব্যবহার করা কোনও কী পেয়ার থাকে, তাহলে আপনি এটি FCM এ আমদানি করতে পারেন যাতে আপনি FCM API-এর মাধ্যমে আপনার বিদ্যমান ওয়েব অ্যাপের উদাহরণগুলিতে পৌঁছাতে পারেন। কী আমদানি করতে, আপনার Firebase প্রকল্পে মালিক-স্তরের অ্যাক্সেস থাকতে হবে। base64 URL নিরাপদ এনকোডেড আকারে আপনার বিদ্যমান পাবলিক এবং প্রাইভেট কী আমদানি করুন:
- Firebase কনসোল সেটিংস প্যানের ক্লাউড মেসেজিং ট্যাবটি খুলুন এবং ওয়েব কনফিগারেশন বিভাগে যান।
- ওয়েব পুশ সার্টিফিকেট ট্যাবে, import an existing key pair নির্বাচন করুন।
- Import a key pair ডায়ালগে, সংশ্লিষ্ট ক্ষেত্রগুলিতে আপনার পাবলিক এবং প্রাইভেট কীগুলি প্রদান করুন এবং Import এ ক্লিক করুন। কনসোলটি পাবলিক কী স্ট্রিং এবং যোগ করা তারিখ প্রদর্শন করে।
কীগুলির ফর্ম্যাট এবং কীভাবে সেগুলি তৈরি করবেন সে সম্পর্কে আরও তথ্যের জন্য, অ্যাপ্লিকেশন সার্ভার কীগুলি দেখুন।
FCM প্লাগইনটি ইনস্টল করুন
Flutter-এর জন্য Firebase প্লাগইনগুলি ইনস্টল এবং আরম্ভ করুন, যদি আপনি ইতিমধ্যেই তা না করে থাকেন।
আপনার Flutter প্রকল্পের মূল থেকে, প্লাগইনটি ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:
flutter pub add firebase_messaging
একবার সম্পূর্ণ হয়ে গেলে, আপনার Flutter অ্যাপ্লিকেশনটি পুনর্নির্মাণ করুন:
flutter run
নিবন্ধন টোকেন অ্যাক্সেস করুন
একটি নির্দিষ্ট ডিভাইসে বার্তা পাঠাতে, আপনাকে ডিভাইস নিবন্ধন টোকেনটি জানতে হবে। একটি অ্যাপ ইনস্ট্যান্সের জন্য নিবন্ধন টোকেন পুনরুদ্ধার করতে, getToken()
এ কল করুন। যদি বিজ্ঞপ্তির অনুমতি না দেওয়া হয়, তাহলে এই পদ্ধতিটি ব্যবহারকারীর কাছে বিজ্ঞপ্তির অনুমতি চাইবে। অন্যথায়, এটি একটি টোকেন ফেরত দেয় অথবা একটি ত্রুটির কারণে ভবিষ্যতের প্রত্যাখ্যান করে।
// You may set the permission requests to "provisional" which allows the user to choose what type
// of notifications they would like to receive once the user receives a notification.
final notificationSettings = await FirebaseMessaging.instance.requestPermission(provisional: true);
// For apple platforms, make sure the APNS token is available before making any FCM plugin API calls
final apnsToken = await FirebaseMessaging.instance.getAPNSToken();
if (apnsToken != null) {
// APNS token is available, make FCM plugin API requests...
}
ওয়েব প্ল্যাটফর্মগুলিতে, আপনার VAPID পাবলিক কীটি getToken()
এ পাস করুন:
final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");
টোকেন আপডেট হলেই বিজ্ঞপ্তি পেতে, onTokenRefresh
স্ট্রিমটিতে সাবস্ক্রাইব করুন:
FirebaseMessaging.instance.onTokenRefresh
.listen((fcmToken) {
// TODO: If necessary send token to application server.
// Note: This callback is fired at each app startup and whenever a new
// token is generated.
})
.onError((err) {
// Error getting token.
});
স্বয়ংক্রিয় আরম্ভ রোধ করুন
যখন একটি FCM নিবন্ধন টোকেন তৈরি করা হয়, তখন লাইব্রেরিটি Firebase-এ শনাক্তকারী এবং কনফিগারেশন ডেটা আপলোড করে। আপনি যদি টোকেন স্বয়ংক্রিয়ভাবে তৈরি হওয়া রোধ করতে চান, তাহলে বিল্ডের সময় স্বয়ংক্রিয়ভাবে শুরু করা বন্ধ করুন।
আইওএস
iOS-এ, আপনার Info.plist
এ একটি মেটাডেটা মান যোগ করুন:
FirebaseMessagingAutoInitEnabled = NO
অ্যান্ড্রয়েড
অ্যান্ড্রয়েডে, আপনার AndroidManifest.xml
এ এই মেটাডেটা মানগুলি যোগ করে Analytics সংগ্রহ এবং FCM স্বয়ংক্রিয় প্রাথমিককরণ (উভয়টিই আপনাকে অক্ষম করতে হবে) অক্ষম করুন:
<meta-data
android:name="firebase_messaging_auto_init_enabled"
android:value="false" />
<meta-data
android:name="firebase_analytics_collection_enabled"
android:value="false" />
রানটাইমে FCM অটো-ইনিট পুনরায় সক্ষম করুন
একটি নির্দিষ্ট অ্যাপ ইনস্ট্যান্সের জন্য auto-init সক্ষম করতে, setAutoInitEnabled()
কল করুন:
await FirebaseMessaging.instance.setAutoInitEnabled(true);
একবার সেট করা হলে অ্যাপ রিস্টার্ট জুড়ে এই মানটি বজায় থাকে।
একটি পরীক্ষামূলক বিজ্ঞপ্তি বার্তা পাঠান
- টার্গেট ডিভাইসে অ্যাপটি ইনস্টল করুন এবং চালান। অ্যাপল ডিভাইসে, আপনাকে রিমোট নোটিফিকেশন পাওয়ার জন্য অনুমতির অনুরোধ গ্রহণ করতে হবে।
- নিশ্চিত করুন যে অ্যাপটি ডিভাইসের ব্যাকগ্রাউন্ডে চলছে।
- ফায়ারবেস কনসোলে, মেসেজিং পৃষ্ঠাটি খুলুন।
- যদি এটি আপনার প্রথম বার্তা হয়, তাহলে আপনার প্রথম প্রচারণা তৈরি করুন নির্বাচন করুন।
- Firebase Notification messages নির্বাচন করুন এবং Create নির্বাচন করুন।
- অন্যথায়, প্রচারণা ট্যাবে, নতুন প্রচারণা এবং তারপর বিজ্ঞপ্তি নির্বাচন করুন।
- বার্তার টেক্সট লিখুন।
- ডান ফলক থেকে পরীক্ষামূলক বার্তা পাঠান নির্বাচন করুন।
- "একটি FCM নিবন্ধন টোকেন যোগ করুন" লেবেলযুক্ত ক্ষেত্রে, আপনার নিবন্ধন টোকেনটি লিখুন।
- পরীক্ষা নির্বাচন করুন।
আপনি Test নির্বাচন করার পরে, লক্ষ্যযুক্ত ক্লায়েন্ট ডিভাইস, যার অ্যাপটি ব্যাকগ্রাউন্ডে থাকবে, বিজ্ঞপ্তিটি পাবে।
আপনার অ্যাপে বার্তা সরবরাহের অন্তর্দৃষ্টির জন্য, FCM রিপোর্টিং ড্যাশবোর্ডটি দেখুন, যা অ্যাপল এবং অ্যান্ড্রয়েড ডিভাইসে প্রেরিত এবং খোলা বার্তার সংখ্যা রেকর্ড করে, সাথে অ্যান্ড্রয়েড অ্যাপের জন্য ইম্প্রেশন ডেটাও।
মিথস্ক্রিয়া পরিচালনা করা
যখন ব্যবহারকারীরা কোনও বিজ্ঞপ্তিতে ট্যাপ করেন, তখন অ্যান্ড্রয়েড এবং আইওএস উভয় ক্ষেত্রেই ডিফল্ট আচরণ হল অ্যাপ্লিকেশনটি খোলা। যদি অ্যাপ্লিকেশনটি বন্ধ করা হয়, তবে এটি চালু হবে এবং যদি এটি ব্যাকগ্রাউন্ডে থাকে, তবে এটি অগ্রভাগে আনা হবে।
কোনও বিজ্ঞপ্তির বিষয়বস্তুর উপর নির্ভর করে, অ্যাপ্লিকেশনটি খোলার সময় আপনি ব্যবহারকারীর মিথস্ক্রিয়া পরিচালনা করতে চাইতে পারেন। উদাহরণস্বরূপ, যদি কোনও বিজ্ঞপ্তি ব্যবহার করে একটি নতুন চ্যাট বার্তা পাঠানো হয় এবং ব্যবহারকারী এটি নির্বাচন করেন, তাহলে অ্যাপ্লিকেশনটি খোলার সময় আপনি নির্দিষ্ট কথোপকথনটি খুলতে চাইতে পারেন।
firebase-messaging
প্যাকেজটি এই মিথস্ক্রিয়া পরিচালনা করার দুটি উপায় প্রদান করে:
-
getInitialMessage():
যদি অ্যাপ্লিকেশনটি একটি সমাপ্ত অবস্থা থেকে খোলা হয়, তাহলে এই পদ্ধতিটি একটিFuture
প্রদান করে যার মধ্যে একটিRemoteMessage
থাকে। একবার ব্যবহার করা হলে,RemoteMessage
টি সরানো হবে। -
onMessageOpenedApp
: একটিStream
যা ব্যাকগ্রাউন্ড অবস্থা থেকে অ্যাপ্লিকেশনটি খোলার সময় একটিRemoteMessage
পোস্ট করে।
আপনার ব্যবহারকারীদের অভিজ্ঞতা মসৃণ করতে, আপনার উভয় পরিস্থিতি পরিচালনা করা উচিত। নিম্নলিখিত কোড উদাহরণটি কীভাবে এটি অর্জন করা যেতে পারে তা রূপরেখা দেয়:
class Application extends StatefulWidget { @override StatecreateState() => _Application(); } class _Application extends State { // In this example, suppose that all messages contain a data field with the key 'type'. Future setupInteractedMessage() async { // Get any messages which caused the application to open from // a terminated state. RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage(); // If the message also contains a data property with a "type" of "chat", // navigate to a chat screen if (initialMessage != null) { _handleMessage(initialMessage); } // Also handle any interaction when the app is in the background using a // Stream listener FirebaseMessaging.onMessageOpenedApp.listen(_handleMessage); } void _handleMessage(RemoteMessage message) { if (message.data['type'] == 'chat') { Navigator.pushNamed(context, '/chat', arguments: ChatArguments(message), ); } } @override void initState() { super.initState(); // Run code required to handle interacted messages in an async function // as initState() must not be async setupInteractedMessage(); } @override Widget build(BuildContext context) { return Text("..."); } }
আপনি কীভাবে ইন্টারঅ্যাকশন পরিচালনা করবেন তা আপনার সেটআপের উপর নির্ভর করে। পূর্বে দেখানো উদাহরণটি StatefulWidget
ব্যবহারের একটি মৌলিক উদাহরণ।
পরবর্তী পদক্ষেপ
সেটআপ ধাপগুলি সম্পন্ন করার পরে, Flutter-এর জন্য FCM সাথে এগিয়ে যাওয়ার জন্য এখানে কয়েকটি বিকল্প রয়েছে: