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


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

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

আপনার ক্রস-প্ল্যাটফর্ম Firebase Cloud Messaging ক্লায়েন্ট অ্যাপ্লিকেশনটি সি ++ সহ লিখতে, Firebase Cloud Messaging এপিআই ব্যবহার করুন। সি ++ এসডিকে প্রতিটি প্ল্যাটফর্মের জন্য কিছু অতিরিক্ত সেটআপের প্রয়োজনীয়তা সহ অ্যান্ড্রয়েড এবং অ্যাপল উভয় প্ল্যাটফর্মের জন্য কাজ করে।

ফায়ারবেস এবং FCM এসডিকে সেট আপ করুন

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

  1. আপনি যদি ইতিমধ্যে না থাকেন তবে আপনার সি ++ প্রকল্পে ফায়ারবেস যুক্ত করুন

    • লিঙ্কযুক্ত সেটআপ নির্দেশাবলীতে, আপনার অ্যাপ্লিকেশনটি তৈরি করতে সিএমকে ব্যবহার করার সুপারিশ সহ Firebase C++ এসডিকে ব্যবহারের জন্য ডিভাইস এবং অ্যাপের প্রয়োজনীয়তাগুলি পর্যালোচনা করুন।

    • আপনার প্রকল্প-স্তরের build.gradle ফাইলে, আপনার buildscript এবং allprojects উভয় বিভাগেই Google-এর Maven সংগ্রহস্থল অন্তর্ভুক্ত করা নিশ্চিত করুন৷

  2. জেএনআই পরিবেশ এবং ক্রিয়াকলাপে পাস করে একটি ফায়ারবেস অ্যাপ অবজেক্ট তৈরি করুন:

    app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);

  3. এমন একটি শ্রেণি সংজ্ঞায়িত করুন যা firebase::messaging::Listener ইন্টারফেস প্রয়োগ করে।

  4. FCM আরম্ভ করুন, অ্যাপ্লিকেশনটিতে পাস করা এবং একটি নির্মিত শ্রোতা:

    ::firebase::messaging::Initialize(app, listener);

  5. গুগল প্লে সার্ভিসেস এসডিকে নির্ভর করে এমন অ্যাপ্লিকেশনগুলিতে বৈশিষ্ট্যগুলি অ্যাক্সেস করার আগে একটি সামঞ্জস্যপূর্ণ গুগল প্লে পরিষেবাদি এপিকির জন্য ডিভাইসটি পরীক্ষা করা উচিত। আরও জানতে, গুগল প্লে পরিষেবাদি APK এর জন্য চেক দেখুন।

iOS+

  1. আপনি যদি ইতিমধ্যে না থাকেন তবে আপনার সি ++ প্রকল্পে ফায়ারবেস যুক্ত করুন । তারপরে, FCM জন্য আপনার প্রকল্পটি সেট আপ করতে:
    1. আপনার প্রকল্পের পডফাইলে, এফসিএম নির্ভরতা যুক্ত করুন:
      pod 'FirebaseMessaging'
    2. firebase.framework এবং firebase_messaging.framework ফ্রেমওয়ার্কগুলি আপনার এক্সকোড প্রকল্পে Firebase C++ এসডিকে থেকে টেনে আনুন।
  2. ফায়ারবেসে আপনার এপিএনএস প্রমাণীকরণ কী আপলোড করুন। আপনার যদি ইতিমধ্যে কোনও এপিএনএস প্রমাণীকরণ কী না থাকে তবে অ্যাপল বিকাশকারী সদস্য কেন্দ্রে একটি তৈরি করার বিষয়টি নিশ্চিত করুন।

    1. Firebase কনসোলে আপনার প্রকল্পের অভ্যন্তরে গিয়ার আইকনটি নির্বাচন করুন, প্রকল্প সেটিংস নির্বাচন করুন এবং তারপরে ক্লাউড মেসেজিং ট্যাবটি নির্বাচন করুন।

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

    3. আপনি যেখানে আপনার কীটি সংরক্ষণ করেছেন সেখানে ব্রাউজ করুন, এটি নির্বাচন করুন এবং খুলুন ক্লিক করুন। কীটির জন্য কী আইডি যুক্ত করুন ( অ্যাপল বিকাশকারী সদস্য কেন্দ্রে উপলব্ধ) এবং আপলোড ক্লিক করুন।

  3. পুশ বিজ্ঞপ্তিগুলি সক্ষম করতে আপনার এক্সকোড প্রকল্পটি কনফিগার করুন:

    1. নেভিগেটর অঞ্চল থেকে প্রকল্পটি নির্বাচন করুন।
    2. সম্পাদক অঞ্চল থেকে প্রকল্পের লক্ষ্য নির্বাচন করুন।
    3. সম্পাদক অঞ্চল থেকে সাধারণ ট্যাব নির্বাচন করুন।

      1. লিঙ্কযুক্ত ফ্রেমওয়ার্ক এবং লাইব্রেরিতে স্ক্রোল করুন, তারপরে ফ্রেমওয়ার্ক যুক্ত করতে + বোতামটি ক্লিক করুন।
      2. যে উইন্ডোতে প্রদর্শিত হবে, ইউজারনোটাইফিকেশনগুলিতে স্ক্রোল করুন Fr ফ্রেমওয়ার্ক, এন্ট্রিটি ক্লিক করুন, তারপরে অ্যাড ক্লিক করুন।

        এই কাঠামোটি কেবল এক্সকোড ভি 8 এবং পরে প্রদর্শিত হবে এবং এই লাইব্রেরির দ্বারা প্রয়োজনীয়।

    4. সম্পাদক অঞ্চল থেকে ক্ষমতা ট্যাব নির্বাচন করুন।

      1. পুশ বিজ্ঞপ্তিগুলি চালু করুন।
      2. ব্যাকগ্রাউন্ড মোডগুলিতে স্ক্রোল করুন, তারপরে এটি চালু করুন।
      3. ব্যাকগ্রাউন্ড মোডগুলির অধীনে দূরবর্তী বিজ্ঞপ্তিগুলি নির্বাচন করুন।
  4. একটি ফায়ারবেস অ্যাপ অবজেক্ট তৈরি করুন:

    app = ::firebase::App::Create(::firebase::AppOptions());

  5. এমন একটি শ্রেণি সংজ্ঞায়িত করুন যা firebase::messaging::Listener ইন্টারফেস প্রয়োগ করে।

  6. ফায়ারবেস ক্লাউড মেসেজিং আরম্ভ করুন, অ্যাপটিতে পাস করা এবং একটি নির্মিত শ্রোতা:

    ::firebase::messaging::Initialize(app, listener);

ডিভাইস নিবন্ধকরণ টোকেন অ্যাক্সেস করুন

ফায়ারবেস ক্লাউড মেসেজিং লাইব্রেরি শুরু করার পরে, ক্লায়েন্ট অ্যাপ্লিকেশন উদাহরণের জন্য একটি রেজিস্ট্রেশন টোকেন অনুরোধ করা হয়েছে। অ্যাপ্লিকেশনটি OnTokenReceived কলব্যাকের সাথে টোকেনটি গ্রহণ করবে, যা ক্লাসে সংজ্ঞায়িত করা উচিত যা firebase::messaging::Listener প্রয়োগ করে।

আপনি যদি সেই নির্দিষ্ট ডিভাইসটিকে লক্ষ্য করতে চান তবে আপনার এই টোকেনে অ্যাক্সেসের প্রয়োজন হবে।

অ্যান্ড্রয়েডে বার্তা বিতরণ সম্পর্কে নোট করুন

যখন অ্যাপটি মোটেও চলছে না এবং কোনও ব্যবহারকারী কোনও বিজ্ঞপ্তিতে ট্যাপ করে, বার্তাটি ডিফল্টরূপে কলব্যাকগুলিতে নির্মিত FCM মাধ্যমে চালিত হয় না। এই ক্ষেত্রে, অ্যাপ্লিকেশনটি শুরু করার জন্য ব্যবহৃত একটি Intent মাধ্যমে বার্তা পে -লোডগুলি প্রাপ্ত হয়। FCM এই আগত বার্তাগুলি সি ++ লাইব্রেরি কলব্যাকের কাছে ফরোয়ার্ড করার জন্য, আপনাকে আপনার ক্রিয়াকলাপে onNewIntent পদ্ধতিটি ওভাররাইড করতে হবে এবং MessageForwardingService সার্ভিসে Intent পাস করতে হবে।

import com.google.firebase.messaging.MessageForwardingService;

class MyActivity extends Activity {
  private static final String TAG = "MyActvity";

  @Override
  protected void onNewIntent(Intent intent) {
    Log.d(TAG, "A message was sent to this app while it was in the background.");
    Intent message = new Intent(this, MessageForwardingService.class);
    message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
    message.putExtras(intent);
    message.setData(intent.getData());
    // For older versions of Firebase C++ SDK (< 7.1.0), use `startService`.
    // startService(message);
    MessageForwardingService.enqueueWork(this, message);
  }
}

অ্যাপটিতে থাকা অবস্থায় প্রাপ্ত বার্তাগুলি তাদের বিজ্ঞপ্তি ক্ষেত্রের বিষয়বস্তু সিস্টেম ট্রে বিজ্ঞপ্তি পপুলেট করতে ব্যবহৃত হয়, তবে সেই বিজ্ঞপ্তি সামগ্রীটি FCM -এ যোগাযোগ করা হবে না। এটি, Message::notification একটি বাতিল হবে।

সংক্ষেপে:

অ্যাপ স্টেট বিজ্ঞপ্তি ডেটা উভয়
ফোরগ্রাউন্ড OnMessageReceived OnMessageReceived OnMessageReceived
পটভূমি সিস্টেম ট্রে OnMessageReceived বিজ্ঞপ্তি: সিস্টেম ট্রে
ডেটা: অভিপ্রায় অতিরিক্ত।

অ্যান্ড্রয়েডে কাস্টম বার্তা হ্যান্ডলিং

ডিফল্টরূপে, অ্যাপটিতে প্রেরিত বিজ্ঞপ্তিগুলি ::firebase::messaging::Listener::OnMessageReceived পাস করা হয়েছে, তবে কিছু ক্ষেত্রে আপনি ডিফল্ট আচরণকে ওভাররাইড করতে চাইতে পারেন। অ্যান্ড্রয়েডে এটি করার জন্য আপনাকে এমন কাস্টম ক্লাস লিখতে হবে যা com.google.firebase.messaging.cpp.ListenerService প্রসারিত করার পাশাপাশি আপনার প্রকল্পের AndroidManifest.xml আপডেট করতে হবে।

ওভাররাইড ListenerService পদ্ধতি

ListenerService হ'ল জাভা ক্লাস যা অ্যাপ্লিকেশনটিতে প্রেরিত আগত বার্তাগুলিকে বাধা দেয় এবং সেগুলি সি ++ লাইব্রেরিতে রুট করে। যখন অ্যাপটি অগ্রভাগে থাকে (বা যখন অ্যাপটি ব্যাকগ্রাউন্ড হয় এবং এটি কেবল ডেটা-কেবলমাত্র পে-লোড গ্রহণ করে), বার্তাগুলি এই শ্রেণিতে প্রদত্ত কলব্যাকগুলির মধ্যে একটির মধ্য দিয়ে যাবে। বার্তা হ্যান্ডলিংয়ে কাস্টম আচরণ যুক্ত করতে, আপনাকে FCM এর ডিফল্ট ListenerService প্রসারিত করতে হবে:

import com.google.firebase.messaging.cpp.ListenerService;

class MyListenerService extends ListenerService {

ListenerService.onMessageReceived পদ্ধতিটি ওভাররাইড করে, আপনি প্রাপ্ত রিমোটমেসেজ অবজেক্টের উপর ভিত্তি করে ক্রিয়া সম্পাদন করতে পারেন এবং বার্তার ডেটা পেতে পারেন:

@Override
public void onMessageReceived(RemoteMessage message) {
  Log.d(TAG, "A message has been received.");
  // Do additional logic...
  super.onMessageReceived(message);
}

ListenerService আরও কয়েকটি পদ্ধতি রয়েছে যা কম ঘন ঘন ব্যবহৃত হয়। এগুলি পাশাপাশি ওভাররাইড করা যেতে পারে, আরও তথ্যের জন্য ফায়ারবেসেমসেজিংস সার্ভিস রেফারেন্স দেখুন।

@Override
public void onDeletedMessages() {
  Log.d(TAG, "Messages have been deleted on the server.");
  // Do additional logic...
  super.onDeletedMessages();
}

@Override
public void onMessageSent(String messageId) {
  Log.d(TAG, "An outgoing message has been sent.");
  // Do additional logic...
  super.onMessageSent(messageId);
}

@Override
public void onSendError(String messageId, Exception exception) {
  Log.d(TAG, "An outgoing message encountered an error.");
  // Do additional logic...
  super.onSendError(messageId, exception);
}

AndroidManifest.xml আপডেট করুন

আপনার কাস্টম ক্লাসগুলি একবার লেখা হয়ে গেলে এগুলি কার্যকর করার জন্য সেগুলি অবশ্যই AndroidManifest.xml অন্তর্ভুক্ত করা উচিত। নিশ্চিত হয়ে নিন যে ম্যানিফেস্টটিতে <manifest> ট্যাগের অভ্যন্তরে উপযুক্ত বৈশিষ্ট্যটি ঘোষণা করে মার্জ সরঞ্জামগুলি অন্তর্ভুক্ত রয়েছে, যেমন:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.firebase.messaging.cpp.samples"
    xmlns:tools="http://schemas.android.com/tools">

firebase_messaging_cpp.aar আর্কাইভে একটি AndroidManifest.xml ফাইল রয়েছে যা FCM ডিফল্ট ListenerService ঘোষণা করে। এই ম্যানিফেস্টটি সাধারণত প্রকল্পের নির্দিষ্ট ম্যানিফেস্টের সাথে একীভূত হয় যা ListenerService কীভাবে চালাতে সক্ষম হয়। এই ListenerService কাস্টম শ্রোতা পরিষেবার সাথে প্রতিস্থাপন করা দরকার। এটি ডিফল্ট ListenerService সরিয়ে কাস্টম পরিষেবা যুক্ত করে সম্পন্ন হয়েছে, যা আপনার প্রকল্পগুলি AndroidManifest.xml ফাইলের নিম্নলিখিত লাইনগুলি দিয়ে করা যেতে পারে:

<service android:name="com.google.firebase.messaging.cpp.ListenerService"
         tools:node="remove" />
<service android:name="com.google.firebase.messaging.cpp.samples.MyListenerService"
         android:exported="false">
  <intent-filter>
    <action android:name="com.google.firebase.MESSAGING_EVENT"/>
  </intent-filter>
</service>

ফায়ারবেস সি ++ এসডিকে (7.1.0 এর পরে) এর নতুন সংস্করণগুলি JobIntentService ব্যবহার করুন যার জন্য AndroidManifest.xml ফাইলটিতে অতিরিক্ত পরিবর্তন প্রয়োজন।

<service android:name="com.google.firebase.messaging.MessageForwardingService"
     android:permission="android.permission.BIND_JOB_SERVICE"
     android:exported="false" >
</service>

অটো সূচনা প্রতিরোধ করুন

FCM ডিভাইস টার্গেটিংয়ের জন্য একটি নিবন্ধকরণ টোকেন উত্পন্ন করে। যখন একটি টোকেন উত্পন্ন হয়, গ্রন্থাগারটি সনাক্তকারী এবং কনফিগারেশন ডেটা ফায়ারবেসে আপলোড করে। আপনি যদি টোকেন ব্যবহার করার আগে একটি সুস্পষ্ট অপ্ট-ইন পেতে চান তবে আপনি এফসিএম (এবং অ্যান্ড্রয়েড, অ্যানালিটিক্সে) অক্ষম করে কনফিগার করার সময় প্রজন্মকে প্রতিরোধ করতে পারেন। এটি করার জন্য, অ্যাপল প্ল্যাটফর্মগুলিতে আপনার Info.plist (আপনার GoogleService-Info.plist নয়) বা অ্যান্ড্রয়েডে আপনার AndroidManifest.xml এ একটি মেটাডেটা মান যুক্ত করুন:

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

<?xml version="1.0" encoding="utf-8"?>
<application>
  <meta-data android:name="firebase_messaging_auto_init_enabled"
             android:value="false" />
  <meta-data android:name="firebase_analytics_collection_enabled"
             android:value="false" />
</application>

সুইফট

FirebaseMessagingAutoInitEnabled = NO

এফসিএম পুনরায় সক্ষম করতে, আপনি একটি রানটাইম কল করতে পারেন:

::firebase::messaging::SetTokenRegistrationOnInitEnabled(true);

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

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

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="http"/>
  <data android:host="CHANGE_THIS_DOMAIN.example.com" android:scheme="https"/>
</intent-filter>

অভিপ্রায় ফিল্টারটিকে আরও নমনীয় করতে একটি ওয়াইল্ডকার্ড নির্দিষ্ট করাও সম্ভব। যেমন:

<intent-filter>
  <action android:name="android.intent.action.VIEW"/>
  <category android:name="android.intent.category.DEFAULT"/>
  <category android:name="android.intent.category.BROWSABLE"/>
  <data android:host="*.example.com" android:scheme="http"/>
  <data android:host="*.example.com" android:scheme="https"/>
</intent-filter>

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

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

ক্লায়েন্ট অ্যাপটি সেট আপ হওয়ার পরে, আপনি বার্তাগুলি গ্রহণ করা বা সেগুলি আপনার ব্যবহারকারীদের কাছে প্রেরণ শুরু করতে পারেন: