Join us for Firebase Summit on November 10, 2021. Tune in to learn how Firebase can help you accelerate app development, release with confidence, and scale with ease. Register

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

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

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

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

  1. যদি আপনি এমনটি না থাকে, তাহলে আপনার সি ++ প্রকল্পে Firebase যোগ

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

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

  2. একটি Firebase অ্যাপ্লিকেশন অবজেক্টের তৈরি করুন, JNI পরিবেশ ও কার্যকলাপে ক্ষণস্থায়ী:

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

  3. একটি বর্গ যে কার্যকরী নির্ধারণ firebase::messaging::Listener ইন্টারফেস।

  4. আরম্ভ FCM, অ্যাপ এবং নির্মাণ লিসেনার মধ্যে পাসিং:

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

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

আইওএস

  1. আপনাকে অবশ্যই একটি বৈধ প্রয়োজন APN গুলি শংসাপত্র। যদি ইতিমধ্যে আপনার একটি না থাকে, তাহলে নিশ্চিত মধ্যে একটি তৈরি করতে অ্যাপল ডেভেলপার সদস্য সেন্টার
  2. যদি আপনি এমনটি না থাকে, তাহলে আপনার সি ++ প্রকল্পে Firebase যোগ । তারপর, FCM- এর জন্য আপনার প্রজেক্ট সেট আপ করতে:
    1. আপনার প্রকল্পের Podfile সালে FCM নির্ভরতা যোগ করুন:
      pod 'Firebase/Messaging'
    2. টেনে আনুন firebase.framework এবং firebase_messaging.framework থেকে আপনার Xcode প্রকল্পে অবকাঠামো Firebase সি ++ SDK এর
  3. পুশ বিজ্ঞপ্তিগুলি সক্ষম করতে আপনার এক্সকোড প্রকল্পটি কনফিগার করুন:

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

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

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

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

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

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

  5. একটি বর্গ যে কার্যকরী নির্ধারণ firebase::messaging::Listener ইন্টারফেস।

  6. আরম্ভ Firebase ক্লাউড মেসেজিং, অ্যাপ এবং নির্মাণ লিসেনার মধ্যে পাসিং:

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

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

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

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

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

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

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 কিন্তু কিছু কিছু ক্ষেত্রে আপনি ডিফল্ট আচরণ ওভাররাইড করতে পারেন। Android এর উপর এই কাজের জন্য আপনি যে প্রসারিত কাস্টম শ্রেণীর লিখতে হবে com.google.firebase.messaging.cpp.ListenerService যেমন আপডেটটি আপনার প্রকল্পের পাশাপাশি AndroidManifest.xml

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

ListenerService Java শ্রেণি যে সি ++ লাইব্রেরিতে অ্যাপ্লিকেশন এবং যেসব রুটে তাদের কাছে পাঠালেন বিবৃতি অন্তর্মুখী বার্তাগুলির হয়। যখন অ্যাপটি ফোরগ্রাউন্ডে থাকে (অথবা যখন অ্যাপটি ব্যাকগ্রাউন্ড থাকে এবং এটি শুধুমাত্র একটি ডেটা-পেলোড পায়), এই ক্লাসে প্রদত্ত একটি কলব্যাকের মধ্য দিয়ে বার্তাগুলি চলে যাবে। বার্তা হ্যান্ডলিং কাস্টম আচরণ যোগ করার জন্য 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 সি ++ 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 ডিভাইস টার্গেটিং এর জন্য একটি রেজিস্ট্রেশন টোকেন তৈরি করে। যখন একটি টোকেন তৈরি হয়, লাইব্রেরি শনাক্তকারী এবং কনফিগারেশন ডেটা ফায়ারবেসে আপলোড করে। আপনি যদি টোকেন ব্যবহার করার আগে একটি স্পষ্ট অপ্ট-ইন পেতে চান, তাহলে আপনি FCM (এবং অ্যান্ড্রয়েড, অ্যানালিটিক্সে) নিষ্ক্রিয় করে কনফিগার করার সময় প্রজন্মকে প্রতিরোধ করতে পারেন। এটি করার জন্য, আপনার জন্য একটি মেটাডেটা মান যোগ Info.plist (আপনার না GoogleService-Info.plist ) iOS এ, অথবা আপনার AndroidManifest.xml Android এর উপর:

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

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

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

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

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

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

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