| প্ল্যাটফর্ম নির্বাচন করুন: | iOS+ অ্যান্ড্রয়েড ওয়েব ফ্লাটার ইউনিটি C++ |
এই নির্দেশিকায় বর্ণনা করা হয়েছে কীভাবে আপনার অ্যান্ড্রয়েড ক্লায়েন্ট অ্যাপে Firebase Cloud Messaging শুরু করবেন, যাতে আপনি নির্ভরযোগ্যভাবে বার্তা পাঠাতে পারেন।
FCM ক্লায়েন্টদের জন্য অ্যান্ড্রয়েড ৬.০ বা তার উচ্চতর সংস্করণের ডিভাইস প্রয়োজন, যেগুলোতে গুগল প্লে স্টোর অ্যাপ ইনস্টল করা আছে, অথবা গুগল এপিআই (Google APIs) সহ অ্যান্ড্রয়েড ৬.০ চালিত একটি এমুলেটর প্রয়োজন। উল্লেখ্য যে, আপনার অ্যান্ড্রয়েড অ্যাপগুলো শুধুমাত্র গুগল প্লে স্টোরের মাধ্যমেই ডেপ্লয় করতে হবে এমন কোনো বাধ্যবাধকতা নেই।
এসডিকে সেটআপ করুন
যদি আগে থেকে না করে থাকেন, তাহলে আপনার অ্যান্ড্রয়েড প্রজেক্টে ফায়ারবেস যোগ করুন ।
FCM সাথে সর্বোত্তম অভিজ্ঞতার জন্য, আমরা আপনার প্রোজেক্টে Google Analytics সক্রিয় করার জন্য দৃঢ়ভাবে সুপারিশ করছি। FCM এর মেসেজ ডেলিভারি রিপোর্টিং-এর জন্য Google Analytics একটি আবশ্যকীয় শর্ত।
আপনার অ্যাপ ম্যানিফেস্ট সম্পাদনা করুন
আপনার অ্যাপের ম্যানিফেস্টে নিম্নলিখিতটি যোগ করুন:
- একটি সার্ভিস যা
FirebaseMessagingServiceএক্সটেন্ড করে। ব্যাকগ্রাউন্ডে থাকা অ্যাপে নোটিফিকেশন পাওয়ার বাইরেও যদি আপনি অন্য কোনো মেসেজ হ্যান্ডলিং করতে চান, তবে এটি প্রয়োজন। ফোরগ্রাউন্ড অ্যাপে নোটিফিকেশন পেতে, ডেটা পেলোড গ্রহণ করতে এবং আরও অনেক কিছুর জন্য, আপনাকে অবশ্যই এই সার্ভিসটি এক্সটেন্ড করতে হবে। - (ঐচ্ছিক) অ্যাপ্লিকেশন কম্পোনেন্টের মধ্যে, ডিফল্ট নোটিফিকেশন আইকন এবং রঙ সেট করার জন্য মেটাডেটা এলিমেন্ট ব্যবহার করা যায়। ইনকামিং মেসেজের জন্য যখন স্পষ্টভাবে কোনো আইকন বা রঙ সেট করা থাকে না, তখন অ্যান্ড্রয়েড এই মানগুলো ব্যবহার করে।
- (ঐচ্ছিক) অ্যান্ড্রয়েড ৮.০ (এপিআই লেভেল ২৬) এবং তার পরবর্তী সংস্করণ থেকে নোটিফিকেশন চ্যানেল সমর্থিত এবং এটি ব্যবহার করার পরামর্শ দেওয়া হয়। FCM প্রাথমিক সেটিংস সহ একটি ডিফল্ট নোটিফিকেশন চ্যানেল প্রদান করে। আপনি যদি নিজের ডিফল্ট চ্যানেল তৈরি এবং ব্যবহার করতে চান, তাহলে দেখানো অনুযায়ী
default_notification_channel_idআপনার নোটিফিকেশন চ্যানেল অবজেক্টের ID-তে সেট করুন; যখন আগত মেসেজগুলোতে স্পষ্টভাবে কোনো নোটিফিকেশন চ্যানেল সেট করা থাকবে না, তখন FCM এই মানটি ব্যবহার করবে। আরও জানতে, ‘ম্যানেজ নোটিফিকেশন চ্যানেলস’ দেখুন।
<service android:name=".java.MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT" /> </intent-filter> </service>
<!-- Set custom default icon. This is used when no icon is set for incoming notification messages. See README(https://goo.gl/l4GJaQ) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_icon" android:resource="@drawable/ic_stat_ic_notification" /> <!-- Set color used with incoming notification messages. This is used when no color is set for the incoming notification message. See README(https://goo.gl/6BKBk7) for more. --> <meta-data android:name="com.google.firebase.messaging.default_notification_color" android:resource="@color/colorAccent" />
<meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id" />
অ্যান্ড্রয়েড ১৩+ এ রানটাইম নোটিফিকেশনের অনুমতি অনুরোধ করুন
অ্যান্ড্রয়েড ১৩-এ নোটিফিকেশন দেখানোর জন্য একটি নতুন রানটাইম পারমিশন চালু করা হয়েছে। অ্যান্ড্রয়েড ১৩ বা তার উচ্চতর সংস্করণে চালিত যে সমস্ত অ্যাপ FCM নোটিফিকেশন ব্যবহার করে, এই পরিবর্তনটি তাদের সকলের উপর প্রযোজ্য।
ডিফল্টরূপে, FCM SDK (সংস্করণ 23.0.6 বা উচ্চতর)-এর ম্যানিফেস্টে POST_NOTIFICATIONS পারমিশনটি অন্তর্ভুক্ত থাকে। তবে, আপনার অ্যাপকে android.permission.POST_NOTIFICATIONS কনস্ট্যান্টটি ব্যবহার করে এই পারমিশনের রানটাইম সংস্করণের জন্যও অনুরোধ করতে হবে। ব্যবহারকারী এই অনুমতি না দেওয়া পর্যন্ত আপনার অ্যাপ নোটিফিকেশন দেখাতে পারবে না।
নতুন রানটাইম অনুমতির জন্য অনুরোধ করতে:
Kotlin
// Declare the launcher at the top of your Activity/Fragment: private val requestPermissionLauncher = registerForActivityResult( ActivityResultContracts.RequestPermission(), ) { isGranted: Boolean -> if (isGranted) { // FCM SDK (and your app) can post notifications. } else { // TODO: Inform user that that your app will not show notifications. } } private fun askNotificationPermission() { // This is only necessary for API level >= 33 (TIRAMISU) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED ) { // FCM SDK (and your app) can post notifications. } else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) { // TODO: display an educational UI explaining to the user the features that will be enabled // by them granting the POST_NOTIFICATION permission. This UI should provide the user // "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission. // If the user selects "No thanks," allow the user to continue without notifications. } else { // Directly ask for the permission requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS) } } }
Java
// Declare the launcher at the top of your Activity/Fragment: private final ActivityResultLauncher<String> requestPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), isGranted -> { if (isGranted) { // FCM SDK (and your app) can post notifications. } else { // TODO: Inform user that that your app will not show notifications. } }); private void askNotificationPermission() { // This is only necessary for API level >= 33 (TIRAMISU) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { if (ContextCompat.checkSelfPermission(this, Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { // FCM SDK (and your app) can post notifications. } else if (shouldShowRequestPermissionRationale(Manifest.permission.POST_NOTIFICATIONS)) { // TODO: display an educational UI explaining to the user the features that will be enabled // by them granting the POST_NOTIFICATION permission. This UI should provide the user // "OK" and "No thanks" buttons. If the user selects "OK," directly request the permission. // If the user selects "No thanks," allow the user to continue without notifications. } else { // Directly ask for the permission requestPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS); } } }
সাধারণত, ব্যবহারকারীকে একটি ইউজার ইন্টারফেস (UI) দেখানো উচিত, যা তাকে বুঝিয়ে দেবে যে অ্যাপটিকে নোটিফিকেশন পোস্ট করার অনুমতি দিলে কোন ফিচারগুলো চালু হবে। এই UI-তে ব্যবহারকারীকে সম্মতি বা অসম্মতি জানানোর জন্য 'ওকে' এবং 'নো থ্যাঙ্কস' বাটনের মতো অপশন থাকা উচিত। যদি ব্যবহারকারী 'ওকে' নির্বাচন করেন, তবে সরাসরি অনুমতির জন্য অনুরোধ করুন। আর যদি ব্যবহারকারী 'নো থ্যাঙ্কস' নির্বাচন করেন, তবে তাকে নোটিফিকেশন ছাড়াই কাজ চালিয়ে যেতে দিন।
আপনার অ্যাপ কখন ব্যবহারকারীর কাছ থেকে POST_NOTIFICATIONS পারমিশন চাইবে, সে বিষয়ে আরও সেরা অনুশীলনের জন্য নোটিফিকেশন রানটাইম পারমিশন দেখুন।
অ্যান্ড্রয়েড ১২এল (এপিআই লেভেল ৩২) বা তার নিচের সংস্করণকে লক্ষ্য করে তৈরি অ্যাপগুলির জন্য নোটিফিকেশন অনুমতি
আপনার অ্যাপটি ফোরগ্রাউন্ডে থাকা অবস্থায়, প্রথমবার কোনো নোটিফিকেশন চ্যানেল তৈরি করার সময় অ্যান্ড্রয়েড স্বয়ংক্রিয়ভাবে ব্যবহারকারীর কাছে অনুমতি চায়। তবে, চ্যানেল তৈরি এবং অনুমতির অনুরোধের সময়ের ক্ষেত্রে কিছু গুরুত্বপূর্ণ বিষয় মনে রাখতে হবে:
- যদি আপনার অ্যাপ ব্যাকগ্রাউন্ডে চলার সময় তার প্রথম নোটিফিকেশন চ্যানেল তৈরি করে—যা FCM SDK একটি FCM নোটিফিকেশন পেলে করে থাকে—তাহলে অ্যান্ড্রয়েড সেই নোটিফিকেশনটি প্রদর্শন করতে দেবে না এবং আপনার অ্যাপটি পরবর্তীবার খোলা না হওয়া পর্যন্ত ব্যবহারকারীর কাছে নোটিফিকেশনের অনুমতি চাইবে না। এর মানে হলো, আপনার অ্যাপটি খোলার আগে এবং ব্যবহারকারী অনুমতি গ্রহণ করার আগে প্রাপ্ত যেকোনো নোটিফিকেশন হারিয়ে যাবে।
- অনুমতি চাওয়ার জন্য প্ল্যাটফর্মের এপিআই (API) ব্যবহার করতে, আমরা আপনাকে আপনার অ্যাপটি অ্যান্ড্রয়েড ১৩+ টার্গেট করে আপডেট করার জন্য দৃঢ়ভাবে সুপারিশ করছি। যদি তা সম্ভব না হয়, তবে অ্যাপে কোনো নোটিফিকেশন পাঠানোর আগে নোটিফিকেশন চ্যানেল তৈরি করা উচিত, যাতে নোটিফিকেশনের অনুমতির ডায়ালগটি চালু হয় এবং কোনো নোটিফিকেশন হারিয়ে না যায়। আরও তথ্যের জন্য নোটিফিকেশনের অনুমতি সংক্রান্ত সেরা অনুশীলনগুলো দেখুন।
ঐচ্ছিক: POST_NOTIFICATIONS অনুমতিটি সরিয়ে ফেলুন
ডিফল্টরূপে, FCM SDK-তে POST_NOTIFICATIONS পারমিশনটি অন্তর্ভুক্ত থাকে। যদি আপনার অ্যাপ নোটিফিকেশন মেসেজ ব্যবহার না করে (তা FCM নোটিফিকেশনের মাধ্যমে হোক, অন্য কোনো SDK-এর মাধ্যমে হোক, বা সরাসরি আপনার অ্যাপ দ্বারা পোস্ট করা হোক) এবং আপনি না চান যে আপনার অ্যাপে এই পারমিশনটি অন্তর্ভুক্ত থাকুক, তাহলে আপনি ম্যানিফেস্ট মার্জারের remove মার্কার ব্যবহার করে এটি সরিয়ে ফেলতে পারেন। মনে রাখবেন যে, এই পারমিশনটি সরিয়ে ফেললে শুধুমাত্র FCM নোটিফিকেশন নয়, সমস্ত নোটিফিকেশনের প্রদর্শন বন্ধ হয়ে যায়। আপনার অ্যাপের ম্যানিফেস্ট ফাইলে নিম্নলিখিতটি যোগ করুন:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" tools:node="remove"/>
FCM রেজিস্ট্রেশন টোকেন অ্যাক্সেস করুন
আপনার অ্যাপ প্রথমবার চালু হওয়ার সময়, FCM SDK ক্লায়েন্ট অ্যাপ ইনস্ট্যান্সের জন্য একটি রেজিস্ট্রেশন টোকেন তৈরি করে। আপনি যদি একক অ্যাপ ইনস্ট্যান্সকে টার্গেট করতে বা ডিভাইস গ্রুপ তৈরি করতে চান, তাহলে আপনাকে FirebaseMessagingService এক্সটেন্ড করে এবং onNewToken ওভাররাইড করে এই টোকেনটি অ্যাক্সেস করতে হবে। যেহেতু প্রথমবার চালু হওয়ার পর টোকেনটি পরিবর্তিত হতে পারে, তাই আপনাকে সর্বশেষ আপডেট করা রেজিস্ট্রেশন টোকেনটি সংগ্রহ করার জন্য দৃঢ়ভাবে সুপারিশ করা হচ্ছে।
নিম্নলিখিত ক্ষেত্রে রেজিস্ট্রেশন টোকেন পরিবর্তিত হতে পারে:
- অ্যাপটি একটি নতুন ডিভাইসে পুনরুদ্ধার করা হয়েছে।
- ব্যবহারকারী অ্যাপটি আনইনস্টল/পুনরায় ইনস্টল করে।
- ব্যবহারকারী অ্যাপের ডেটা মুছে ফেলেন।
বর্তমান নিবন্ধন টোকেনটি পুনরুদ্ধার করুন।
যখন বর্তমান টোকেনটি পুনরুদ্ধার করার প্রয়োজন হবে, তখন FirebaseMessaging.getInstance().getToken() কল করুন:
Kotlin
FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task -> if (!task.isSuccessful) { Log.w(TAG, "Fetching FCM registration token failed", task.exception) return@OnCompleteListener } // Get new FCM registration token val token = task.result // Log and toast val msg = getString(R.string.msg_token_fmt, token) Log.d(TAG, msg) Toast.makeText(baseContext, msg, Toast.LENGTH_SHORT).show() })
Java
FirebaseMessaging.getInstance().getToken() .addOnCompleteListener(new OnCompleteListener<String>() { @Override public void onComplete(@NonNull Task<String> task) { if (!task.isSuccessful()) { Log.w(TAG, "Fetching FCM registration token failed", task.getException()); return; } // Get new FCM registration token String token = task.getResult(); // Log and toast String msg = getString(R.string.msg_token_fmt, token); Log.d(TAG, msg); Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show(); } });
টোকেন তৈরি নিরীক্ষণ করুন
যখনই একটি নতুন টোকেন তৈরি হয়, onNewToken কলব্যাকটি সক্রিয় হয়।
Kotlin
/** * Called if the FCM registration token is updated. This may occur if the security of * the previous token had been compromised. Note that this is called when the * FCM registration token is initially generated so this is where you would retrieve the token. */ override fun onNewToken(token: String) { Log.d(TAG, "Refreshed token: $token") // If you want to send messages to this application instance or // manage this apps subscriptions on the server side, send the // FCM registration token to your app server. sendRegistrationToServer(token) }
Java
/** * There are two scenarios when onNewToken is called: * 1) When a new token is generated on initial app startup * 2) Whenever an existing token is changed * Under #2, there are three scenarios when the existing token is changed: * A) App is restored to a new device * B) User uninstalls/reinstalls the app * C) User clears app data */ @Override public void onNewToken(@NonNull String token) { Log.d(TAG, "Refreshed token: " + token); // If you want to send messages to this application instance or // manage this apps subscriptions on the server side, send the // FCM registration token to your app server. sendRegistrationToServer(token); }
টোকেনটি পেয়ে যাওয়ার পর, আপনি সেটি আপনার অ্যাপ সার্ভারে পাঠাতে এবং আপনার পছন্দের পদ্ধতিতে সংরক্ষণ করতে পারেন।
গুগল প্লে পরিষেবাগুলি পরীক্ষা করুন
যেসব অ্যাপ প্লে সার্ভিসেস এসডিকে (Play Services SDK)-এর উপর নির্ভর করে, তাদের গুগল প্লে সার্ভিসেস ফিচারগুলো ব্যবহার করার আগে ডিভাইসে একটি সামঞ্জস্যপূর্ণ গুগল প্লে সার্ভিসেস এপিকে (APK) আছে কিনা তা সবসময় যাচাই করে নেওয়া উচিত। আরও জানতে, গুগল প্লে সার্ভিসেস সেট আপ দেখুন। দুটি জায়গায় এটি করার পরামর্শ দেওয়া হয়: মেইন অ্যাক্টিভিটির onCreate() মেথডে এবং এর onResume() মেথডে। onCreate() মেথডের যাচাই নিশ্চিত করে যে, সফলভাবে যাচাই সম্পন্ন না হলে অ্যাপটি ব্যবহার করা যাবে না। onResume() মেথডের যাচাই নিশ্চিত করে যে, যদি ব্যবহারকারী অন্য কোনো উপায়ে, যেমন ব্যাক বাটনের মাধ্যমে, চলমান অ্যাপে ফিরে আসেন, তাহলেও যাচাই প্রক্রিয়াটি সম্পন্ন হবে।
যদি ডিভাইসটিতে গুগল প্লে সার্ভিসের কোনো সামঞ্জস্যপূর্ণ সংস্করণ না থাকে, তাহলে আপনার অ্যাপ GoogleApiAvailability.makeGooglePlayServicesAvailable() কল করে ব্যবহারকারীদের প্লে স্টোর থেকে গুগল প্লে সার্ভিস ডাউনলোড করার সুযোগ দিতে পারে।
স্বয়ংক্রিয় প্রারম্ভিকীকরণ প্রতিরোধ করুন
যখন একটি FCM রেজিস্ট্রেশন টোকেন তৈরি হয়, তখন লাইব্রেরিটি আইডেন্টিফায়ার এবং কনফিগারেশন ডেটা Firebase-এ আপলোড করে। আপনি যদি টোকেনের স্বয়ংক্রিয় তৈরি হওয়া আটকাতে চান, তাহলে আপনার 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 অটো-ইনিট পুনরায় সক্রিয় করতে, একটি রানটাইম কল করুন:
Kotlin
Firebase.messaging.isAutoInitEnabled = true
Java
FirebaseMessaging.getInstance().setAutoInitEnabled(true);
অ্যানালিটিক্স সংগ্রহ পুনরায় সক্রিয় করতে, FirebaseAnalytics ক্লাসের setAnalyticsCollectionEnabled() মেথডটি কল করুন। উদাহরণস্বরূপ:
setAnalyticsCollectionEnabled(true);
একবার সেট করা হলে, এই মানগুলো অ্যাপ পুনরায় চালু করার পরেও অপরিবর্তিত থাকে।
একটি বিজ্ঞপ্তি বার্তা পাঠান
আপনার অ্যান্ড্রয়েড ক্লায়েন্টটি সঠিকভাবে সেটআপ করা হয়েছে কিনা তা নিশ্চিত করতে, আপনি নিম্নলিখিত নির্দেশাবলী ব্যবহার করে একটি পরীক্ষামূলক নোটিফিকেশন বার্তা পাঠাতে পারেন:
- টার্গেট ডিভাইসে অ্যাপটি ইনস্টল করে চালান।
- নিশ্চিত করুন যে অ্যাপটি ডিভাইসে ব্যাকগ্রাউন্ডে চালু আছে।
- Firebase কনসোলে, মেসেজিং পেজটি খুলুন।
- এটি যদি আপনার প্রথম বার্তা হয়, তাহলে 'Create your first campaign' , 'Firebase Notification messages' নির্বাচন করুন এবং তারপর 'Create' নির্বাচন করুন।
- অন্যথায়, Campaigns ট্যাবে, New campaign নির্বাচন করুন এবং তারপর Notifications নির্বাচন করুন।
- বার্তার লেখাটি লিখুন। অন্য সব ঘর ঐচ্ছিক।
- ডান দিকের প্যানেল থেকে ‘Send test message’ নির্বাচন করুন।
- ‘Add an FCM registration token’ লেবেলযুক্ত ফিল্ডে, এই গাইডের পূর্ববর্তী কোনো অংশে প্রাপ্ত রেজিস্ট্রেশন টোকেনটি প্রবেশ করান।
- পরীক্ষা নির্বাচন করুন।
অ্যাপটি ব্যাকগ্রাউন্ডে চালু থাকা অবস্থায়, নির্দিষ্ট ক্লায়েন্ট ডিভাইসটিতে নোটিফিকেশনটি পাওয়া উচিত।
আপনার অ্যাপে বার্তা ডেলিভারি সম্পর্কে আরও তথ্যের জন্য, FCM রিপোর্টিং ড্যাশবোর্ড দেখুন, যেখানে অ্যাপল এবং অ্যান্ড্রয়েড ডিভাইসে পাঠানো ও খোলা বার্তার সংখ্যার পাশাপাশি অ্যান্ড্রয়েড অ্যাপের ইম্প্রেশন (ব্যবহারকারীদের দেখা নোটিফিকেশন) ডেটাও রেকর্ড করা থাকে।
পরবর্তী পদক্ষেপ
সেটআপ ধাপগুলো সম্পন্ন করার পর, অ্যান্ড্রয়েডের জন্য FCM for Android) নিয়ে এগিয়ে যাওয়ার জন্য এখানে কয়েকটি বিকল্প রয়েছে: