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

C++ দিয়ে আপনার ক্রস-প্ল্যাটফর্ম Firebase ক্লাউড মেসেজিং ক্লায়েন্ট অ্যাপ লিখতে, Firebase ক্লাউড মেসেজিং API ব্যবহার করুন। C++ SDK Android এবং Apple উভয় প্ল্যাটফর্মের জন্য কাজ করে, প্রতিটি প্ল্যাটফর্মের জন্য কিছু অতিরিক্ত সেটআপের প্রয়োজন হয়।

Firebase এবং FCM SDK সেট আপ করুন৷

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

  1. যদি আপনি ইতিমধ্যে না করে থাকেন, আপনার C++ প্রকল্পে Firebase যোগ করুন

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

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

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

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

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

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

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

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

iOS+

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

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

      1. লিঙ্কড ফ্রেমওয়ার্ক এবং লাইব্রেরিতে নিচে স্ক্রোল করুন, তারপর ফ্রেমওয়ার্ক যোগ করতে + বোতামে ক্লিক করুন।
      2. প্রদর্শিত উইন্ডোতে, UserNotifications.framework- এ স্ক্রোল করুন, সেই এন্ট্রিতে ক্লিক করুন, তারপর Add এ ক্লিক করুন।

        এই ফ্রেমওয়ার্কটি শুধুমাত্র Xcode v8 এবং পরবর্তীতে প্রদর্শিত হয় এবং এই লাইব্রেরির জন্য প্রয়োজনীয়।

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

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

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

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

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

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

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

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

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

Android এ বার্তা বিতরণ সম্পর্কে নোট করুন

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

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

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

class MyListenerService extends ListenerService {

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

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

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

@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 cusom শ্রোতা পরিষেবা দিয়ে প্রতিস্থাপন করতে হবে। এটি ডিফল্ট 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>

Firebase C++ SDK (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 ডিভাইস লক্ষ্য করার জন্য একটি নিবন্ধন টোকেন তৈরি করে। যখন একটি টোকেন তৈরি হয়, তখন লাইব্রেরি শনাক্তকারী এবং কনফিগারেশন ডেটা Firebase-এ আপলোড করে। আপনি যদি টোকেন ব্যবহার করার আগে একটি স্পষ্ট অপ্ট-ইন পেতে চান, তাহলে আপনি FCM (এবং Android, Analytics-এ) অক্ষম করে কনফিগার করার সময় জেনারেশন প্রতিরোধ করতে পারেন। এটি করার জন্য, Apple প্ল্যাটফর্মে আপনার Info.plist (আপনার GoogleService-Info.plist নয়) বা Android-এ আপনার 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

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

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

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

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

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

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

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

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

আপনার অ্যাপে অন্যান্য, আরও উন্নত আচরণ যোগ করতে একটি অ্যাপ সার্ভার থেকে বার্তা পাঠানোর নির্দেশিকা দেখুন:

মনে রাখবেন যে এই বৈশিষ্ট্যগুলি ব্যবহার করতে আপনার একটি সার্ভার বাস্তবায়নের প্রয়োজন হবে৷