Firebase ক্লাউড মেসেজিং দিয়ে শুরু করুন


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

Flutter-এ একটি Firebase Cloud Messaging ক্লায়েন্ট অ্যাপ সেট আপ করুন

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

আইওএস+

পদ্ধতি সুইজলিং

অ্যাপল ডিভাইসে 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 কনসোলের মাধ্যমে আপনার বিদ্যমান কী জোড়া আমদানি করতে পারেন।

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

  1. Flutter-এর জন্য Firebase প্লাগইনগুলি ইনস্টল এবং আরম্ভ করুন, যদি আপনি ইতিমধ্যেই তা না করে থাকেন।

  2. আপনার Flutter প্রকল্পের মূল থেকে, প্লাগইনটি ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান:

    flutter pub add firebase_messaging
    
  3. একবার সম্পূর্ণ হয়ে গেলে, আপনার 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);

একবার সেট করা হলে অ্যাপ রিস্টার্ট জুড়ে এই মানটি বজায় থাকে।

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

  1. টার্গেট ডিভাইসে অ্যাপটি ইনস্টল করুন এবং চালান। অ্যাপল ডিভাইসে, আপনাকে রিমোট নোটিফিকেশন পাওয়ার জন্য অনুমতির অনুরোধ গ্রহণ করতে হবে।
  2. নিশ্চিত করুন যে অ্যাপটি ডিভাইসের ব্যাকগ্রাউন্ডে চলছে।
  3. ফায়ারবেস কনসোলে, মেসেজিং পৃষ্ঠাটি খুলুন।
  4. যদি এটি আপনার প্রথম বার্তা হয়, তাহলে আপনার প্রথম প্রচারণা তৈরি করুন নির্বাচন করুন।
    1. Firebase Notification messages নির্বাচন করুন এবং Create নির্বাচন করুন।
  5. অন্যথায়, প্রচারণা ট্যাবে, নতুন প্রচারণা এবং তারপর বিজ্ঞপ্তি নির্বাচন করুন।
  6. বার্তার টেক্সট লিখুন।
  7. ডান ফলক থেকে পরীক্ষামূলক বার্তা পাঠান নির্বাচন করুন।
  8. "একটি FCM নিবন্ধন টোকেন যোগ করুন" লেবেলযুক্ত ক্ষেত্রে, আপনার নিবন্ধন টোকেনটি লিখুন।
  9. পরীক্ষা নির্বাচন করুন।

আপনি Test নির্বাচন করার পরে, লক্ষ্যযুক্ত ক্লায়েন্ট ডিভাইস, যার অ্যাপটি ব্যাকগ্রাউন্ডে থাকবে, বিজ্ঞপ্তিটি পাবে।

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

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

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

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

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

  1. getInitialMessage(): যদি অ্যাপ্লিকেশনটি একটি সমাপ্ত অবস্থা থেকে খোলা হয়, তাহলে এই পদ্ধতিটি একটি Future প্রদান করে যার মধ্যে একটি RemoteMessage থাকে। একবার ব্যবহার করা হলে, 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 সাথে এগিয়ে যাওয়ার জন্য এখানে কয়েকটি বিকল্প রয়েছে: