| প্ল্যাটফর্ম নির্বাচন করুন: | iOS+ অ্যান্ড্রয়েড ওয়েব ফ্লাটার ইউনিটি C++ |
এই নির্দেশিকায় বর্ণনা করা হয়েছে কীভাবে আপনার ফ্লাটার ক্লায়েন্ট অ্যাপে Firebase Cloud Messaging ব্যবহার শুরু করবেন, যাতে আপনি নির্ভরযোগ্যভাবে বার্তা পাঠাতে পারেন।
আপনি যে প্ল্যাটফর্মটি লক্ষ্য করছেন, তার উপর নির্ভর করে আপনাকে কিছু অতিরিক্ত প্রয়োজনীয় সেটআপ ধাপ অনুসরণ করতে হবে।
iOS+
আপনার অ্যাপ্লিকেশন বার্তা গ্রহণ করা শুরু করার আগে, আপনাকে অবশ্যই আপনার Xcode প্রজেক্টে পুশ নোটিফিকেশন এবং ব্যাকগ্রাউন্ড মোড চালু করতে হবে।
- আপনার Xcode প্রোজেক্ট ওয়ার্কস্পেসটি (`ios/Runner.xcworkspace`) খুলুন।
- পুশ নোটিফিকেশন চালু করুন ।
- ব্যাকগ্রাউন্ড ফেচ এবং রিমোট নোটিফিকেশন ব্যাকগ্রাউন্ড এক্সিকিউশন মোড সক্রিয় করুন।
FCM ব্যবহার করার আগে, আপনার APNs অথেন্টিকেশন কী Firebase কনসোলে আপলোড করুন। যদি আপনার আগে থেকে কোনো APNs অথেন্টিকেশন কী না থাকে, তাহলে Apple Developer Member Center থেকে একটি তৈরি করে নিন।
- আপনার প্রোজেক্টের ভিতরে Firebase কনসোলে, গিয়ার আইকনটি নির্বাচন করুন, প্রোজেক্ট সেটিংস নির্বাচন করুন এবং তারপরে ক্লাউড মেসেজিং ট্যাবটি নির্বাচন করুন।
- আপনার ডেভেলপমেন্ট অথেন্টিকেশন কী, অথবা প্রোডাকশন অথেন্টিকেশন কী, অথবা উভয়ই আপলোড করতে আপলোড বাটনটি নির্বাচন করুন। এগুলোর মধ্যে অন্তত একটি আবশ্যক।
- প্রতিটি অথেনটিকেশন কী-এর জন্য, .p8 ফাইলটি নির্বাচন করুন এবং কী আইডি ও আপনার অ্যাপল টিম আইডি প্রদান করুন। সেভ নির্বাচন করুন।
পদ্ধতি নাড়ানো
অ্যাপল ডিভাইসে FCM ফ্লাটার প্লাগইন ব্যবহার করার জন্য মেথড সুইজলিং প্রয়োজন। এটি ছাড়া, FCM টোকেন হ্যান্ডলিং-এর মতো ফায়ারবেসের গুরুত্বপূর্ণ ফিচারগুলো সঠিকভাবে কাজ করবে না।
অ্যান্ড্রয়েড
গুগল প্লে পরিষেবা
FCM ক্লায়েন্টদের জন্য অ্যান্ড্রয়েড ৪.৪ বা তার উচ্চতর সংস্করণে চালিত এমন ডিভাইস প্রয়োজন, যেগুলোতে গুগল প্লে সার্ভিসেস ইনস্টল করা আছে, অথবা গুগল এপিআই সহ অ্যান্ড্রয়েড ৪.৪ চালিত একটি এমুলেটর প্রয়োজন। উল্লেখ্য যে, আপনার অ্যান্ড্রয়েড অ্যাপগুলো শুধুমাত্র গুগল প্লে স্টোরের মাধ্যমেই ডেপ্লয় করতে হবে এমন কোনো বাধ্যবাধকতা নেই।
যেসব অ্যাপ প্লে সার্ভিসেস এসডিকে (Play Services SDK)-এর উপর নির্ভর করে, তাদের গুগল প্লে সার্ভিসেস ফিচারগুলো ব্যবহার করার আগে ডিভাইসে একটি সামঞ্জস্যপূর্ণ গুগল প্লে সার্ভিসেস এপিকে (APK) আছে কিনা তা সবসময় যাচাই করে নেওয়া উচিত। দুটি জায়গায় এটি করার পরামর্শ দেওয়া হয়: মেইন অ্যাক্টিভিটির onCreate() মেথডে এবং এর onResume() মেথডে। onCreate() মেথডের যাচাইটি নিশ্চিত করে যে, সফলভাবে যাচাই সম্পন্ন না হলে অ্যাপটি ব্যবহার করা যাবে না। onResume() মেথডের যাচাইটি নিশ্চিত করে যে, যদি ব্যবহারকারী ব্যাক বাটনের মতো অন্য কোনো উপায়ে চলমান অ্যাপে ফিরেও আসেন, তাহলেও যেন যাচাই প্রক্রিয়াটি সম্পন্ন হয়।
যদি ডিভাইসটিতে গুগল প্লে সার্ভিসের কোনো সামঞ্জস্যপূর্ণ সংস্করণ না থাকে, তাহলে আপনার অ্যাপ GoogleApiAvailability.makeGooglePlayServicesAvailable() কল করে ব্যবহারকারীদের প্লে স্টোর থেকে গুগল প্লে সার্ভিস ডাউনলোড করার সুযোগ দিতে পারে।
ওয়েব
FCM দিয়ে ওয়েব ক্রেডেনশিয়াল কনফিগার করুন
FCM ওয়েব ইন্টারফেস সমর্থিত ওয়েব পুশ পরিষেবাগুলিতে অনুরোধ পাঠানোর অনুমোদন দেওয়ার জন্য ভলান্টারি অ্যাপ্লিকেশন সার্ভার আইডেন্টিফিকেশন বা "VAPID" কী নামক ওয়েব ক্রেডেনশিয়াল ব্যবহার করে। আপনার অ্যাপকে পুশ নোটিফিকেশনের জন্য সাবস্ক্রাইব করতে, আপনাকে আপনার ফায়ারবেস প্রজেক্টের সাথে একজোড়া কী যুক্ত করতে হবে। আপনি Firebase কনসোলের মাধ্যমে একটি নতুন কী পেয়ার তৈরি করতে পারেন অথবা আপনার বিদ্যমান কী পেয়ারটি ইম্পোর্ট করতে পারেন।
- Firebase কনসোলের সেটিংস প্যানেলের ক্লাউড মেসেজিং ট্যাবটি খুলুন এবং ওয়েব কনফিগারেশন বিভাগে যান।
- ওয়েব পুশ সার্টিফিকেট ট্যাবে, 'Generate Key Pair'- এ ক্লিক করুন। কনসোলে একটি বিজ্ঞপ্তি প্রদর্শিত হবে যে কী পেয়ারটি তৈরি হয়েছে এবং পাবলিক কী স্ট্রিং ও যোগ করার তারিখ দেখানো হবে।
আপনার ওয়েব অ্যাপে যদি আগে থেকেই ব্যবহৃত কোনো কী পেয়ার থাকে, তবে আপনি সেটি FCM এ ইম্পোর্ট করতে পারেন, যাতে আপনি FCM API-এর মাধ্যমে আপনার বিদ্যমান ওয়েব অ্যাপ ইনস্ট্যান্সগুলো অ্যাক্সেস করতে পারেন। কী ইম্পোর্ট করার জন্য, আপনার ফায়ারবেস প্রজেক্টে মালিক-স্তরের অ্যাক্সেস থাকতে হবে। আপনার বিদ্যমান পাবলিক এবং প্রাইভেট কী base64 URL সেফ এনকোডেড ফর্মে ইম্পোর্ট করুন:
- Firebase কনসোলের সেটিংস প্যানেলের ক্লাউড মেসেজিং ট্যাবটি খুলুন এবং ওয়েব কনফিগারেশন বিভাগে যান।
- ওয়েব পুশ সার্টিফিকেট ট্যাবে, একটি বিদ্যমান কী পেয়ার ইম্পোর্ট করুন বিকল্পটি নির্বাচন করুন।
- 'Import a key pair' ডায়ালগ বক্সে, আপনার পাবলিক এবং প্রাইভেট কী সংশ্লিষ্ট ফিল্ডগুলিতে প্রদান করুন এবং 'Import' বোতামে ক্লিক করুন। কনসোলে পাবলিক কী স্ট্রিং এবং যুক্ত করার তারিখ প্রদর্শিত হবে।
কী-গুলোর ফরম্যাট এবং সেগুলো কীভাবে তৈরি করতে হয় সে সম্পর্কে আরও তথ্যের জন্য, অ্যাপ্লিকেশন সার্ভার কী (Application server keys) দেখুন।
FCM প্লাগইন ইনস্টল করুন
যদি আগে থেকে না করে থাকেন , তাহলে ফ্লাটারের জন্য ফায়ারবেস প্লাগইনগুলো ইনস্টল ও চালু করুন ।
আপনার ফ্লাটার প্রজেক্টের রুট থেকে প্লাগইনটি ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:
flutter pub add firebase_messagingএকবার সম্পন্ন হলে, আপনার ফ্লাটার অ্যাপ্লিকেশনটি পুনর্নির্মাণ করুন:
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...
}
ওয়েব প্ল্যাটফর্মে, getToken() ফাংশনে আপনার VAPID পাবলিক কী পাস করুন:
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 এ এই মেটাডেটা মানগুলি যোগ করে অ্যানালিটিক্স সংগ্রহ এবং 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 অটো-ইনিট পুনরায় সক্রিয় করুন
কোনো নির্দিষ্ট অ্যাপ ইনস্ট্যান্সের জন্য অটো-ইনিট সক্রিয় করতে, setAutoInitEnabled() কল করুন:
await FirebaseMessaging.instance.setAutoInitEnabled(true);
একবার সেট করা হলে, এই মানটি অ্যাপ পুনরায় চালু করার পরেও অপরিবর্তিত থাকে।
একটি পরীক্ষার বিজ্ঞপ্তি বার্তা পাঠান
- টার্গেট ডিভাইসে অ্যাপটি ইনস্টল করে চালান। অ্যাপল ডিভাইসের ক্ষেত্রে, রিমোট নোটিফিকেশন পাওয়ার জন্য আপনাকে অনুমতির অনুরোধটি গ্রহণ করতে হবে।
- নিশ্চিত করুন যে অ্যাপটি ডিভাইসে ব্যাকগ্রাউন্ডে চালু আছে।
- Firebase কনসোলে, মেসেজিং পেজটি খুলুন।
- এটি আপনার প্রথম বার্তা হলে, ‘আপনার প্রথম প্রচারাভিযান তৈরি করুন’ নির্বাচন করুন।
- Firebase নোটিফিকেশন বার্তাগুলি নির্বাচন করুন এবং তৈরি করুন নির্বাচন করুন।
- অন্যথায়, Campaigns ট্যাবে, New campaign নির্বাচন করুন এবং তারপর Notifications নির্বাচন করুন।
- বার্তার লেখাটি লিখুন।
- ডান দিকের প্যানেল থেকে ‘Send test message’ নির্বাচন করুন।
- ‘Add an FCM registration token’ লেবেলযুক্ত ফিল্ডে আপনার রেজিস্ট্রেশন টোকেনটি প্রবেশ করান।
- পরীক্ষা নির্বাচন করুন।
আপনি ‘টেস্ট’ নির্বাচন করার পর, ব্যাকগ্রাউন্ডে অ্যাপটি চালু থাকা অবস্থায় নির্দিষ্ট ক্লায়েন্ট ডিভাইসটিতে নোটিফিকেশনটি চলে আসবে।
আপনার অ্যাপে মেসেজ ডেলিভারি সম্পর্কে বিস্তারিত জানতে FCM রিপোর্টিং ড্যাশবোর্ডটি দেখুন, যেখানে অ্যাপল এবং অ্যান্ড্রয়েড ডিভাইসে পাঠানো ও খোলা মেসেজের সংখ্যার পাশাপাশি অ্যান্ড্রয়েড অ্যাপের ইম্প্রেশন ডেটাও রেকর্ড করা থাকে।
মিথস্ক্রিয়া পরিচালনা
ব্যবহারকারীরা যখন কোনো নোটিফিকেশনে ট্যাপ করেন, তখন অ্যান্ড্রয়েড এবং আইওএস উভয় ক্ষেত্রেই ডিফল্ট আচরণ হলো অ্যাপ্লিকেশনটি খুলে দেওয়া। যদি অ্যাপ্লিকেশনটি বন্ধ করা থাকে, তবে এটি চালু হবে, এবং যদি এটি ব্যাকগ্রাউন্ডে থাকে, তবে এটিকে ফোরগ্রাউন্ডে নিয়ে আসা হবে।
নোটিফিকেশনের বিষয়বস্তুর ওপর নির্ভর করে, অ্যাপ্লিকেশনটি খোলার সময় আপনি ব্যবহারকারীর কার্যকলাপ নিয়ন্ত্রণ করতে চাইতে পারেন। উদাহরণস্বরূপ, যদি একটি নোটিফিকেশনের মাধ্যমে নতুন কোনো চ্যাট বার্তা পাঠানো হয় এবং ব্যবহারকারী সেটি নির্বাচন করেন, তাহলে অ্যাপ্লিকেশনটি খোলার সাথে সাথে আপনি নির্দিষ্ট কথোপকথনটি খুলতে চাইতে পারেন।
firebase-messaging প্যাকেজটি এই ইন্টারঅ্যাকশনটি পরিচালনা করার জন্য দুটি উপায় প্রদান করে:
-
getInitialMessage():অ্যাপ্লিকেশনটি বন্ধ অবস্থা থেকে খোলা হলে, এই মেথডটি একটিRemoteMessageসম্বলিতFutureরিটার্ন করে। একবার ব্যবহার করা হলে,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 নিয়ে এগিয়ে যাওয়ার জন্য এখানে কয়েকটি বিকল্প দেওয়া হলো: