| প্ল্যাটফর্ম নির্বাচন করুন: | iOS+ অ্যান্ড্রয়েড ওয়েব ফ্লাটার ইউনিটি সি++ |
এই নির্দেশিকাটি বর্ণনা করে যে কীভাবে আপনার C++ ক্লায়েন্ট অ্যাপগুলিতে Firebase Cloud Messaging শুরু করবেন যাতে আপনি নির্ভরযোগ্যভাবে বার্তা পাঠাতে পারেন।
C++ দিয়ে আপনার ক্রস-প্ল্যাটফর্ম Firebase Cloud Messaging ক্লায়েন্ট অ্যাপটি লেখার জন্য, Firebase Cloud Messaging API ব্যবহার করুন। C++ SDK Android এবং Apple উভয় প্ল্যাটফর্মের জন্যই কাজ করে, প্রতিটি প্ল্যাটফর্মের জন্য কিছু অতিরিক্ত সেটআপ প্রয়োজন। iOS এবং Android এর জন্য C++ SDK FCM সাথে কীভাবে কাজ করে সে সম্পর্কে আরও জানতে, Understand Firebase for C++ দেখুন।
Firebase এবং FCM SDK সেট আপ করুন
অ্যান্ড্রয়েড
যদি আপনি ইতিমধ্যেই না করে থাকেন, তাহলে আপনার C++ প্রজেক্টে Firebase যোগ করুন ।
লিঙ্ক করা সেটআপ নির্দেশাবলীতে, Firebase C++ SDK ব্যবহারের জন্য ডিভাইস এবং অ্যাপের প্রয়োজনীয়তাগুলি পর্যালোচনা করুন, যার মধ্যে আপনার অ্যাপ তৈরি করতে CMake ব্যবহার করার সুপারিশও অন্তর্ভুক্ত রয়েছে।
আপনার প্রজেক্ট-লেভেল
build.gradleফাইলে, আপনারbuildscriptএবংallprojectsউভয় বিভাগেই Google এর Maven রিপোজিটরি অন্তর্ভুক্ত করতে ভুলবেন না।
JNI পরিবেশ এবং কার্যকলাপের মধ্যে একটি Firebase অ্যাপ অবজেক্ট তৈরি করুন:
app = ::firebase::App::Create(::firebase::AppOptions(), jni_env, activity);
এমন একটি ক্লাস সংজ্ঞায়িত করুন যা
firebase::messaging::Listenerইন্টারফেস বাস্তবায়ন করে।অ্যাপে এবং একটি নির্মিত শ্রোতা প্রবেশ করিয়ে FCM আরম্ভ করুন:
::firebase::messaging::Initialize(app, listener);
যেসব অ্যাপ Google Play services SDK-এর উপর নির্ভর করে, তাদের বৈশিষ্ট্যগুলি অ্যাক্সেস করার আগে ডিভাইসটিতে একটি সামঞ্জস্যপূর্ণ Google Play services APK আছে কিনা তা পরীক্ষা করা উচিত। আরও জানতে, Google Play services APK চেক করুন দেখুন।
আইওএস+
- যদি আপনি ইতিমধ্যেই না করে থাকেন, তাহলে আপনার C++ প্রোজেক্টে Firebase যোগ করুন । তারপর, FCM এর জন্য আপনার প্রোজেক্ট সেট আপ করতে:
- আপনার প্রকল্পের পডফাইলে, FCM নির্ভরতা যোগ করুন:
pod 'FirebaseMessaging'
- Firebase C++ SDK থেকে আপনার Xcode প্রজেক্টে
firebase.frameworkএবংfirebase_messaging.frameworkফ্রেমওয়ার্ক টেনে আনুন।
- আপনার প্রকল্পের পডফাইলে, FCM নির্ভরতা যোগ করুন:
আপনার APN প্রমাণীকরণ কী Firebase-এ আপলোড করুন। যদি আপনার কাছে ইতিমধ্যেই একটি APN প্রমাণীকরণ কী না থাকে, তাহলে Apple Developer Member Center- এ একটি তৈরি করতে ভুলবেন না।
Firebase কনসোলে আপনার প্রোজেক্টের ভিতরে, গিয়ার আইকনটি নির্বাচন করুন, প্রোজেক্ট সেটিংস নির্বাচন করুন এবং তারপর ক্লাউড মেসেজিং ট্যাবটি নির্বাচন করুন।
iOS অ্যাপ কনফিগারেশনের অধীনে APNs প্রমাণীকরণ কী- তে, আপনার ডেভেলপমেন্ট প্রমাণীকরণ কী, অথবা প্রোডাকশন প্রমাণীকরণ কী, অথবা উভয়ই আপলোড করতে আপলোড বোতামে ক্লিক করুন। কমপক্ষে একটি প্রয়োজন।
আপনার কী যেখানে সংরক্ষণ করেছেন সেই স্থানে ব্রাউজ করুন, এটি নির্বাচন করুন এবং খুলুন ক্লিক করুন। কীটির জন্য কী আইডি যোগ করুন ( অ্যাপল ডেভেলপার সদস্য কেন্দ্রে উপলব্ধ) এবং আপলোড ক্লিক করুন।
পুশ নোটিফিকেশন সক্ষম করতে আপনার এক্সকোড প্রকল্পটি কনফিগার করুন:
- ন্যাভিগেটর এলাকা থেকে প্রকল্পটি নির্বাচন করুন।
- সম্পাদক এলাকা থেকে প্রকল্প লক্ষ্য নির্বাচন করুন।
সম্পাদক এলাকা থেকে সাধারণ ট্যাবটি নির্বাচন করুন।
- লিঙ্কড ফ্রেমওয়ার্কস এবং লাইব্রেরিগুলিতে স্ক্রোল করুন, তারপর ফ্রেমওয়ার্ক যুক্ত করতে + বোতামে ক্লিক করুন।
যে উইন্ডোটি প্রদর্শিত হবে, সেখানে UserNotifications.framework এ স্ক্রোল করুন, এন্ট্রিতে ক্লিক করুন, তারপর Add এ ক্লিক করুন।
এই ফ্রেমওয়ার্কটি শুধুমাত্র Xcode v8 এবং পরবর্তী সংস্করণগুলিতে প্রদর্শিত হয় এবং এই লাইব্রেরির জন্য এটি প্রয়োজনীয়।
সম্পাদক এলাকা থেকে সক্ষমতা ট্যাব নির্বাচন করুন।
- পুশ নোটিফিকেশন চালু করুন।
- ব্যাকগ্রাউন্ড মোডে স্ক্রোল করুন, তারপর এটিকে চালু করুন।
- ব্যাকগ্রাউন্ড মোডের অধীনে রিমোট নোটিফিকেশন নির্বাচন করুন।
একটি Firebase অ্যাপ অবজেক্ট তৈরি করুন:
app = ::firebase::App::Create(::firebase::AppOptions());
এমন একটি ক্লাস সংজ্ঞায়িত করুন যা
firebase::messaging::Listenerইন্টারফেস বাস্তবায়ন করে।অ্যাপে এবং একটি নির্মিত শ্রোতা প্রবেশ করিয়ে, ফায়ারবেস ক্লাউড মেসেজিং শুরু করুন:
::firebase::messaging::Initialize(app, listener);
FCM রেজিস্ট্রেশন টোকেন অ্যাক্সেস করুন
Firebase ক্লাউড মেসেজিং লাইব্রেরি শুরু করার পরে, ক্লায়েন্ট অ্যাপ ইনস্ট্যান্সের জন্য একটি নিবন্ধন টোকেন অনুরোধ করা হয়। অ্যাপটি OnTokenReceived কলব্যাকের মাধ্যমে টোকেনটি গ্রহণ করবে, যা firebase::messaging::Listener প্রয়োগকারী ক্লাসে সংজ্ঞায়িত করা উচিত।
যদি আপনি সেই নির্দিষ্ট অ্যাপের উদাহরণটিকে লক্ষ্য করতে চান, তাহলে আপনার এই টোকেনটিতে অ্যাক্সেসের প্রয়োজন হবে।
অ্যান্ড্রয়েডে বার্তা বিতরণ সম্পর্কে নোট
যখন অ্যাপটি একেবারেই চালু না থাকে এবং ব্যবহারকারী কোনও বিজ্ঞপ্তিতে ট্যাপ করেন, তখন ডিফল্টরূপে বার্তাটি FCM এর অন্তর্নির্মিত কলব্যাকের মাধ্যমে রাউট করা হয় না। এই ক্ষেত্রে, অ্যাপ্লিকেশনটি শুরু করার জন্য ব্যবহৃত একটি Intent এর মাধ্যমে বার্তা পেলোডগুলি গৃহীত হয়। FCM এই আগত বার্তাগুলিকে C++ লাইব্রেরি কলব্যাকে ফরোয়ার্ড করতে, আপনাকে আপনার Activity-এ 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 এ পাঠানো হয়, তবে কিছু ক্ষেত্রে আপনি ডিফল্ট আচরণটি ওভাররাইড করতে চাইতে পারেন। অ্যান্ড্রয়েডে এটি করার জন্য আপনাকে কাস্টম ক্লাস লিখতে হবে যা 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 কাস্টম লিসেনার পরিষেবা দিয়ে প্রতিস্থাপন করতে হবে। এটি ডিফল্ট 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>
যখন ব্যবহারকারীরা আপনার নির্দিষ্ট স্কিম এবং হোস্টের লিঙ্ক সম্বলিত একটি বিজ্ঞপ্তিতে ট্যাপ করবেন, তখন আপনার অ্যাপটি লিঙ্কটি পরিচালনা করার জন্য এই ইন্টেন্ট ফিল্টার দিয়ে কার্যকলাপ শুরু করবে।
পরবর্তী পদক্ষেপ
সেটআপ ধাপগুলি সম্পন্ন করার পরে, C++ এর জন্য FCM ব্যবহার করার জন্য এখানে কয়েকটি বিকল্প রয়েছে: