ফ্লাটার অ্যাপে ফায়ারবেস ক্লাউড মেসেজিং দিয়ে শুরু করুন

প্ল্যাটফর্ম নির্বাচন করুন: iOS+ অ্যান্ড্রয়েড ওয়েব ফ্লাটার ইউনিটি C++


এই নির্দেশিকায় বর্ণনা করা হয়েছে কীভাবে আপনার ফ্লাটার ক্লায়েন্ট অ্যাপে Firebase Cloud Messaging ব্যবহার শুরু করবেন, যাতে আপনি নির্ভরযোগ্যভাবে বার্তা পাঠাতে পারেন।

আপনি যে প্ল্যাটফর্মটি লক্ষ্য করছেন, তার উপর নির্ভর করে আপনাকে কিছু অতিরিক্ত প্রয়োজনীয় সেটআপ ধাপ অনুসরণ করতে হবে।

iOS+

পদ্ধতি নাড়ানো

অ্যাপল ডিভাইসে FCM ফ্লাটার প্লাগইন ব্যবহার করার জন্য মেথড সুইজলিং প্রয়োজন। এটি ছাড়া, FCM টোকেন হ্যান্ডলিং-এর মতো ফায়ারবেসের গুরুত্বপূর্ণ ফিচারগুলো সঠিকভাবে কাজ করবে না।

অ্যান্ড্রয়েড

গুগল প্লে পরিষেবা

FCM ক্লায়েন্টদের জন্য অ্যান্ড্রয়েড ৪.৪ বা তার উচ্চতর সংস্করণে চালিত এমন ডিভাইস প্রয়োজন, যেগুলোতে গুগল প্লে সার্ভিসেস ইনস্টল করা আছে, অথবা গুগল এপিআই সহ অ্যান্ড্রয়েড ৪.৪ চালিত একটি এমুলেটর প্রয়োজন। উল্লেখ্য যে, আপনার অ্যান্ড্রয়েড অ্যাপগুলো শুধুমাত্র গুগল প্লে স্টোরের মাধ্যমেই ডেপ্লয় করতে হবে এমন কোনো বাধ্যবাধকতা নেই।

যেসব অ্যাপ প্লে সার্ভিসেস এসডিকে (Play Services SDK)-এর উপর নির্ভর করে, তাদের গুগল প্লে সার্ভিসেস ফিচারগুলো ব্যবহার করার আগে ডিভাইসে একটি সামঞ্জস্যপূর্ণ গুগল প্লে সার্ভিসেস এপিকে (APK) আছে কিনা তা সবসময় যাচাই করে নেওয়া উচিত। দুটি জায়গায় এটি করার পরামর্শ দেওয়া হয়: মেইন অ্যাক্টিভিটির onCreate() মেথডে এবং এর onResume() মেথডে। onCreate() মেথডের যাচাইটি নিশ্চিত করে যে, সফলভাবে যাচাই সম্পন্ন না হলে অ্যাপটি ব্যবহার করা যাবে না। onResume() মেথডের যাচাইটি নিশ্চিত করে যে, যদি ব্যবহারকারী ব্যাক বাটনের মতো অন্য কোনো উপায়ে চলমান অ্যাপে ফিরেও আসেন, তাহলেও যেন যাচাই প্রক্রিয়াটি সম্পন্ন হয়।

যদি ডিভাইসটিতে গুগল প্লে সার্ভিসের কোনো সামঞ্জস্যপূর্ণ সংস্করণ না থাকে, তাহলে আপনার অ্যাপ GoogleApiAvailability.makeGooglePlayServicesAvailable() কল করে ব্যবহারকারীদের প্লে স্টোর থেকে গুগল প্লে সার্ভিস ডাউনলোড করার সুযোগ দিতে পারে।

ওয়েব

FCM দিয়ে ওয়েব ক্রেডেনশিয়াল কনফিগার করুন

FCM ওয়েব ইন্টারফেস সমর্থিত ওয়েব পুশ পরিষেবাগুলিতে অনুরোধ পাঠানোর অনুমোদন দেওয়ার জন্য ভলান্টারি অ্যাপ্লিকেশন সার্ভার আইডেন্টিফিকেশন বা "VAPID" কী নামক ওয়েব ক্রেডেনশিয়াল ব্যবহার করে। আপনার অ্যাপকে পুশ নোটিফিকেশনের জন্য সাবস্ক্রাইব করতে, আপনাকে আপনার ফায়ারবেস প্রজেক্টের সাথে একজোড়া কী যুক্ত করতে হবে। আপনি Firebase কনসোলের মাধ্যমে একটি নতুন কী পেয়ার তৈরি করতে পারেন অথবা আপনার বিদ্যমান কী পেয়ারটি ইম্পোর্ট করতে পারেন।

FCM প্লাগইন ইনস্টল করুন

  1. যদি আগে থেকে না করে থাকেন , তাহলে ফ্লাটারের জন্য ফায়ারবেস প্লাগইনগুলো ইনস্টল ও চালু করুন

  2. আপনার ফ্লাটার প্রজেক্টের রুট থেকে প্লাগইনটি ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:

    flutter pub add firebase_messaging
    
  3. একবার সম্পন্ন হলে, আপনার ফ্লাটার অ্যাপ্লিকেশনটি পুনর্নির্মাণ করুন:

    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);

একবার সেট করা হলে, এই মানটি অ্যাপ পুনরায় চালু করার পরেও অপরিবর্তিত থাকে।

একটি পরীক্ষার বিজ্ঞপ্তি বার্তা পাঠান

  1. টার্গেট ডিভাইসে অ্যাপটি ইনস্টল করে চালান। অ্যাপল ডিভাইসের ক্ষেত্রে, রিমোট নোটিফিকেশন পাওয়ার জন্য আপনাকে অনুমতির অনুরোধটি গ্রহণ করতে হবে।
  2. নিশ্চিত করুন যে অ্যাপটি ডিভাইসে ব্যাকগ্রাউন্ডে চালু আছে।
  3. Firebase কনসোলে, মেসেজিং পেজটি খুলুন।
  4. এটি আপনার প্রথম বার্তা হলে, ‘আপনার প্রথম প্রচারাভিযান তৈরি করুন’ নির্বাচন করুন।
    1. Firebase নোটিফিকেশন বার্তাগুলি নির্বাচন করুন এবং তৈরি করুন নির্বাচন করুন।
  5. অন্যথায়, Campaigns ট্যাবে, New campaign নির্বাচন করুন এবং তারপর Notifications নির্বাচন করুন।
  6. বার্তার লেখাটি লিখুন।
  7. ডান দিকের প্যানেল থেকে ‘Send test message’ নির্বাচন করুন।
  8. ‘Add an FCM registration token’ লেবেলযুক্ত ফিল্ডে আপনার রেজিস্ট্রেশন টোকেনটি প্রবেশ করান।
  9. পরীক্ষা নির্বাচন করুন।

আপনি ‘টেস্ট’ নির্বাচন করার পর, ব্যাকগ্রাউন্ডে অ্যাপটি চালু থাকা অবস্থায় নির্দিষ্ট ক্লায়েন্ট ডিভাইসটিতে নোটিফিকেশনটি চলে আসবে।

আপনার অ্যাপে মেসেজ ডেলিভারি সম্পর্কে বিস্তারিত জানতে FCM রিপোর্টিং ড্যাশবোর্ডটি দেখুন, যেখানে অ্যাপল এবং অ্যান্ড্রয়েড ডিভাইসে পাঠানো ও খোলা মেসেজের সংখ্যার পাশাপাশি অ্যান্ড্রয়েড অ্যাপের ইম্প্রেশন ডেটাও রেকর্ড করা থাকে।

মিথস্ক্রিয়া পরিচালনা

ব্যবহারকারীরা যখন কোনো নোটিফিকেশনে ট্যাপ করেন, তখন অ্যান্ড্রয়েড এবং আইওএস উভয় ক্ষেত্রেই ডিফল্ট আচরণ হলো অ্যাপ্লিকেশনটি খুলে দেওয়া। যদি অ্যাপ্লিকেশনটি বন্ধ করা থাকে, তবে এটি চালু হবে, এবং যদি এটি ব্যাকগ্রাউন্ডে থাকে, তবে এটিকে ফোরগ্রাউন্ডে নিয়ে আসা হবে।

নোটিফিকেশনের বিষয়বস্তুর ওপর নির্ভর করে, অ্যাপ্লিকেশনটি খোলার সময় আপনি ব্যবহারকারীর কার্যকলাপ নিয়ন্ত্রণ করতে চাইতে পারেন। উদাহরণস্বরূপ, যদি একটি নোটিফিকেশনের মাধ্যমে নতুন কোনো চ্যাট বার্তা পাঠানো হয় এবং ব্যবহারকারী সেটি নির্বাচন করেন, তাহলে অ্যাপ্লিকেশনটি খোলার সাথে সাথে আপনি নির্দিষ্ট কথোপকথনটি খুলতে চাইতে পারেন।

firebase-messaging প্যাকেজটি এই ইন্টারঅ্যাকশনটি পরিচালনা করার জন্য দুটি উপায় প্রদান করে:

  1. getInitialMessage(): অ্যাপ্লিকেশনটি বন্ধ অবস্থা থেকে খোলা হলে, এই মেথডটি একটি RemoteMessage সম্বলিত Future রিটার্ন করে। একবার ব্যবহার করা হলে, RemoteMessage টি মুছে ফেলা হবে।
  2. onMessageOpenedApp : একটি Stream যা অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ড অবস্থা থেকে খোলার সময় একটি RemoteMessage পোস্ট করে।

আপনার ব্যবহারকারীদের একটি মসৃণ অভিজ্ঞতা নিশ্চিত করতে, আপনার উভয় পরিস্থিতিই সামাল দেওয়া উচিত। নিম্নলিখিত কোড উদাহরণে দেখানো হয়েছে কীভাবে এটি করা যেতে পারে:

class Application extends StatefulWidget {
  @override
  State createState() => _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 নিয়ে এগিয়ে যাওয়ার জন্য এখানে কয়েকটি বিকল্প দেওয়া হলো: