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


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

Flutter-এ একটি Firebase ক্লাউড মেসেজিং ক্লায়েন্ট অ্যাপ সেট আপ করুন

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

iOS+

পদ্ধতি swizzling

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

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

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

FCM ক্লায়েন্টদের জন্য Android 4.4 বা উচ্চতর চলমান ডিভাইসগুলির প্রয়োজন যাতে Google Play পরিষেবাগুলি ইনস্টল করা থাকে, বা Google API-এর সাথে Android 4.4 চালিত একটি এমুলেটর। মনে রাখবেন যে আপনি Google Play Store-এর মাধ্যমে আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশানগুলি স্থাপনে সীমাবদ্ধ নন৷

যে অ্যাপগুলি প্লে পরিষেবা 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. আপনি যদি ইতিমধ্যে এটি না করে থাকেন তবে ফ্লটারের জন্য ফায়ারবেস প্লাগইনগুলি ইনস্টল করুন এবং শুরু করুন

  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

iOS-এ, আপনার Info.plist এ একটি মেটাডেটা মান যোগ করুন:

FirebaseMessagingAutoInitEnabled = NO

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

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

আপনি পরীক্ষা নির্বাচন করার পরে, পটভূমিতে অ্যাপ সহ লক্ষ্যযুক্ত ক্লায়েন্ট ডিভাইসটি বিজ্ঞপ্তিটি পাবে।

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

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

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

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

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 ব্যবহার করার একটি মৌলিক উদাহরণ।

পরবর্তী পদক্ষেপ

আপনি সেটআপ পদক্ষেপগুলি সম্পন্ন করার পরে, FCM-এর জন্য FCM সাথে এগিয়ে যাওয়ার জন্য এখানে কয়েকটি বিকল্প রয়েছে: