Google is committed to advancing racial equity for Black communities. See how.
This page was translated by the Cloud Translation API.
Switch to English

একটি অ্যান্ড্রয়েড অ্যাপে বার্তা পান

ফায়ারবেস বিজ্ঞপ্তিগুলি প্রাপ্তি অ্যাপ্লিকেশনটির অগ্রভাগ / পটভূমির উপর নির্ভর করে আলাদা আচরণ করে। আপনি যদি অগ্রভাগযুক্ত অ্যাপ্লিকেশনগুলিকে বিজ্ঞপ্তি বার্তা বা ডেটা বার্তাগুলি গ্রহণ করতে চান তবে onMessageReceived কলব্যাক হ্যান্ডেল করার জন্য আপনার কোড লিখতে হবে। বিজ্ঞপ্তি এবং ডেটা বার্তাগুলির মধ্যে পার্থক্যের ব্যাখ্যার জন্য বার্তার প্রকারগুলি দেখুন

বার্তা হ্যান্ডলিং

বার্তাগুলি গ্রহণ করতে, এমন একটি পরিষেবা ব্যবহার করুন যা FirebaseMessagingService প্রসারিত করে। আপনার পরিষেবাটি onDeletedMessages onMessageReceived এবং onDeletedMessages কলব্যাকগুলি ওভাররাইড করে। এটি প্রাপ্তির 20 সেকেন্ডের মধ্যে অ্যান্ড্রয়েড মার্শমেলোতে 10 সেকেন্ডের মধ্যে কোনও বার্তা হ্যান্ডেল করা উচিত। onMessageReceived কল করার আগে ওএস বিলম্বের উপর নির্ভর করে সময় উইন্ডোটি সংক্ষিপ্ত হতে পারে। সেই সময়ের পরে, অ্যান্ড্রয়েড ও এর ব্যাকগ্রাউন্ড এক্সিকিউশন সীমা হিসাবে বিভিন্ন ওএস আচরণ আপনার কাজ শেষ করার আপনার ক্ষমতাকে হস্তক্ষেপ করতে পারে। আরও তথ্যের জন্য বার্তা অগ্রাধিকার উপর আমাদের ওভারভিউ দেখুন।

onMessageReceived নিম্নলিখিত ব্যতিক্রম সহ বেশিরভাগ বার্তার ধরণের জন্য সরবরাহ করা হয়:

  • আপনার অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে থাকলে বিজ্ঞপ্তি বার্তাগুলি বিতরণ করা হয় । এই ক্ষেত্রে, বিজ্ঞপ্তিটি ডিভাইসের সিস্টেম ট্রেতে সরবরাহ করা হয়। কোনও বিজ্ঞপ্তিতে একটি ব্যবহারকারী ট্যাপ ডিফল্টভাবে অ্যাপ্লিকেশন লঞ্চারটি খুলবে।

  • পটভূমিতে যখন প্রাপ্ত হয় তখন বিজ্ঞপ্তি এবং ডেটা পেলোড উভয়ই বার্তা । এই ক্ষেত্রে, বিজ্ঞপ্তিটি ডিভাইসের সিস্টেম ট্রেতে বিতরণ করা হয় এবং ডেটা পেডলোডটি আপনার লঞ্চের ক্রিয়াকলাপের উদ্দেশ্য হিসাবে অতিরিক্ত হিসাবে বিতরণ করা হয়।

সংক্ষেপে:

অ্যাপের অবস্থা বিজ্ঞপ্তি ডেটা দুটোই
অগ্রভাগ onMessageReceived onMessageReceived onMessageReceived
পটভূমি সিস্টেম ট্রে onMessageReceived বিজ্ঞপ্তি: সিস্টেম ট্রে
ডেটা: অভিপ্রায় অতিরিক্ত
বার্তার ধরণ সম্পর্কে আরও তথ্যের জন্য বিজ্ঞপ্তি এবং ডেটা বার্তা দেখুন

অ্যাপ্লিকেশন ম্যানিফেস্টটি সম্পাদনা করুন

FirebaseMessagingService ব্যবহার করতে, আপনাকে আপনার অ্যাপ্লিকেশনটিতে নিম্নলিখিতটি যুক্ত করতে হবে:

<service
    android:name=".java.MyFirebaseMessagingService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT" />
    </intent-filter>
</service>

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

কাস্টম ডিফল্ট আইকন এবং কাস্টম রঙ সেট করতে application ট্যাগের মধ্যে এই লাইনগুলি যুক্ত করুন:

<!-- 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" />

Android এর জন্য কাস্টম ডিফল্ট আইকনটি প্রদর্শন করে disp

  • বিজ্ঞপ্তি রচয়িতা থেকে প্রেরিত সমস্ত বিজ্ঞপ্তি বার্তা।
  • কোনও বিজ্ঞপ্তি বার্তা যা স্পষ্টভাবে নোটিফিকেশন পেলোডে আইকনটি সেট করে না।

অ্যান্ড্রয়েড এর জন্য কাস্টম ডিফল্ট রঙ ব্যবহার করে

  • বিজ্ঞপ্তি রচয়িতা থেকে প্রেরিত সমস্ত বিজ্ঞপ্তি বার্তা।
  • কোনও নোটিফিকেশন বার্তা যা স্পষ্টভাবে নোটিফিকেশন পেডে রঙ সেট করে না।

যদি কোনও কাস্টম ডিফল্ট আইকন সেট না করা হয় এবং বিজ্ঞপ্তি পেডে কোনও আইকন সেট না করা থাকে তবে অ্যান্ড্রয়েড অ্যাপ্লিকেশন আইকনটিকে সাদা রঙে রেন্ডার করে।

ওভাররাইড onMessageReceived

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

জাভা

13 বি 2207424

কোটলিন + কেটিএক্স

override fun onMessageReceived(remoteMessage: RemoteMessage) {
    // ...

    // TODO(developer): Handle FCM messages here.
    // Not getting messages here? See why this may be: https://goo.gl/39bRNJ
    Log.d(TAG, "From: ${remoteMessage.from}")

    // Check if message contains a data payload.
    if (remoteMessage.data.isNotEmpty()) {
        Log.d(TAG, "Message data payload: ${remoteMessage.data}")

        if (/* Check if data needs to be processed by long running job */ true) {
            // For long-running tasks (10 seconds or more) use WorkManager.
            scheduleJob()
        } else {
            // Handle message within 10 seconds
            handleNow()
        }
    }

    // Check if message contains a notification payload.
    remoteMessage.notification?.let {
        Log.d(TAG, "Message Notification Body: ${it.body}")
    }

    // Also if you intend on generating your own notifications as a result of a received FCM
    // message, here is where that should be initiated. See sendNotification method below.
}

onDeletedMessages ওভাররাইড onDeletedMessages

কিছু পরিস্থিতিতে, এফসিএম কোনও বার্তা দিতে পারে না। এটি ঘটে যখন নির্দিষ্ট অ্যাপ্লিকেশনে এটি সংযোগ করার সময় খুব বেশি বার্তা (> 100) মুলতুবি থাকে বা যদি এক মাসেরও বেশি সময় ধরে ডিভাইসটি FCM এর সাথে সংযুক্ত না থাকে। এই ক্ষেত্রে, আপনি FirebaseMessagingService.onDeletedMessages() কলব্যাক পেতে পারেন FirebaseMessagingService.onDeletedMessages() যখন অ্যাপ্লিকেশন ইনস্ট্যান্সটি এই কলব্যাকটি গ্রহণ করবে, তখন এটি আপনার অ্যাপ্লিকেশন সার্ভারের সাথে একটি সম্পূর্ণ সিঙ্ক করা উচিত। আপনি যদি গত 4 সপ্তাহের মধ্যে সেই ডিভাইসের অ্যাপটিতে কোনও বার্তা না পাঠিয়ে থাকেন, তবে এফসিএম onDeletedMessages() কল করবে না।

একটি পটভূমি অ্যাপ্লিকেশন মধ্যে বিজ্ঞপ্তি বার্তা হ্যান্ডেল

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

এর মধ্যে বিজ্ঞপ্তি এবং ডেটা পেলোড উভয়ই রয়েছে এমন বার্তাগুলি অন্তর্ভুক্ত রয়েছে (এবং বিজ্ঞপ্তি কনসোল থেকে প্রেরিত সমস্ত বার্তা)। এই ক্ষেত্রে, বিজ্ঞপ্তিটি ডিভাইসের সিস্টেম ট্রেতে বিতরণ করা হয় এবং ডেটা পেডলোডটি আপনার লঞ্চের ক্রিয়াকলাপের উদ্দেশ্য হিসাবে অতিরিক্ত হিসাবে বিতরণ করা হয়।

আপনার অ্যাপ্লিকেশনটিতে বার্তা বিতরণের অন্তর্দৃষ্টি জন্য, এফসিএম রিপোর্টিং ড্যাশবোর্ডটি দেখুন , যা অ্যান্ড্রয়েড অ্যাপ্লিকেশনগুলির জন্য "ইমপ্রেশন" (ব্যবহারকারীদের দ্বারা দেখানো বিজ্ঞপ্তিগুলি) সম্পর্কিত ডেটা সহ আইওএস এবং অ্যান্ড্রয়েড ডিভাইসে প্রেরিত ও খোলা বার্তাগুলির রেকর্ড করে।

পটভূমি সীমাবদ্ধ অ্যাপস (অ্যান্ড্রয়েড পি বা আরও নতুন)

এফসিএম অ্যাপ্লিকেশনগুলিতে বার্তাগুলি বিতরণ করতে পারে না যা ব্যবহারকারীরা ব্যাকগ্রাউন্ড সীমাবদ্ধতায় রেখেছিল (যেমন: মাধ্যমে সেট করা -> অ্যাপ্লিকেশন এবং বিজ্ঞপ্তি -> [অ্যাপ্লিকেশন] -> ব্যাটারি)। আপনার অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ড সীমাবদ্ধতা থেকে সরানো হয়ে গেলে, অ্যাপটিতে নতুন বার্তাগুলি আগের মতো বিতরণ করা হবে। হারানো বার্তাগুলি এবং অন্যান্য পটভূমি সীমাবদ্ধতার প্রভাব প্রতিরোধ করতে, অ্যান্ড্রয়েড ভিটালস প্রচেষ্টা দ্বারা তালিকাভুক্ত খারাপ আচরণ এড়াতে ভুলবেন না। এই আচরণগুলি ব্যবহারকারীর কাছে আপনার অ্যাপ্লিকেশনটিকে ব্যাকগ্রাউন্ড সীমাবদ্ধ করার পরামর্শ দিয়ে অ্যান্ড্রয়েড ডিভাইস নিয়ে যেতে পারে। আপনার অ্যাপ্লিকেশনটি এটি ব্যাকগ্রাউন্ডটি সীমাবদ্ধ কিনা তা পরীক্ষা করতে পারে: ইসব্যাকগ্রাউন্ডআস্ট্রিক্টেড ()

সরাসরি বুট মোডে এফসিএম বার্তা পান

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

এই ব্যবহারের ক্ষেত্রে তৈরি করার সময়, সরাসরি বুট মোডের জন্য সাধারণ সেরা অভ্যাস এবং বিধিনিষেধগুলি পর্যবেক্ষণ করুন । সরাসরি বুট-সক্ষম বার্তাগুলির দৃশ্যমানতা বিবেচনা করা বিশেষত গুরুত্বপূর্ণ; ডিভাইসে অ্যাক্সেস সহ যে কোনও ব্যবহারকারীর ব্যবহারকারীর শংসাপত্র প্রবেশ না করে এই বার্তাগুলি দেখতে পারবেন।

পূর্বশর্ত

  • সরাসরি বুট মোডের জন্য ডিভাইসটি সেট আপ করতে হবে।
  • ডিভাইসে অবশ্যই Google Play পরিষেবাদির একটি সাম্প্রতিক সংস্করণ ইনস্টল থাকা উচিত (19.0.54 বা তার পরে)।
  • অ্যাপ্লিকেশন অবশ্যই FCM বার্তা প্রাপ্ত করতে FCM SDK ( com.google.firebase:firebase-messaging ) ব্যবহার করা উচিত।

আপনার অ্যাপে সরাসরি বুট মোড বার্তা হ্যান্ডলিং সক্ষম করুন

  1. অ্যাপ্লিকেশন-স্তরের গ্রেডল ফাইলটিতে, এফসিএম সরাসরি বুট সমর্থন লাইব্রেরিতে নির্ভরতা যুক্ত করুন:

    implementation 'com.google.firebase:firebase-messaging-directboot:20.2.0'
    
  2. অ্যাপ্লিকেশনের করুন FirebaseMessagingService যোগ করে সরাসরি বুট সচেতন android:directBootAware="true" অ্যাপ্লিকেশন ম্যানিফেস্টে অ্যাট্রিবিউট:

    <service
        android:name=".java.MyFirebaseMessagingService"
        android:exported="false"
        android:directBootAware="true">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT" />
        </intent-filter>
    </service>
    

এই FirebaseMessagingService সরাসরি বুট মোডে চলতে পারে তা নিশ্চিত করা গুরুত্বপূর্ণ। নিম্নলিখিত প্রয়োজনীয়তা পরীক্ষা করুন:

  • সরাসরি বুট মোডে চলাকালীন পরিষেবাটি শংসাপত্রের সুরক্ষিত স্টোরেজ অ্যাক্সেস করা উচিত নয়।
  • পরিষেবার Activities , BroadcastReceivers , বা অন্যান্য Services যেমন সরাসরি বুট মোডে চলাকালীন সরাসরি বুট সচেতন হিসাবে চিহ্নিত নয় এমন কোনও উপাদান ব্যবহার করার চেষ্টা করা উচিত নয়।
  • পরিষেবাটি যে কোনও লাইব্রেরি ব্যবহার করে সেগুলি অবশ্যই শংসাপত্রযুক্ত সুরক্ষিত স্টোরেজ অ্যাক্সেস করতে হবে না বা ডায়রেক্ট বুট মোডে চলাকালীন নন-ডাইরেক্টবুটআওয়্যার উপাদানগুলিকে কল করতে পারে না। এর অর্থ হ'ল অ্যাপ্লিকেশনটি পরিষেবা থেকে কল করা কোনও লাইব্রেরি হয় সরাসরি বুট সচেতন হওয়া প্রয়োজন, বা অ্যাপ্লিকেশনটিকে এটি সরাসরি বুট মোডে চলছে কিনা এবং সেই মোডে সেগুলি কল না করে তা পরীক্ষা করে দেখতে হবে। উদাহরণস্বরূপ, ফায়ারবেস এসডিকে সরাসরি বুট দিয়ে কাজ করে (এটিকে সরাসরি বুট মোডে ক্র্যাশ না করে এগুলিতে অন্তর্ভুক্ত করা যেতে পারে), তবে অনেক ফায়ারবেস এপিআই সরাসরি ডায়াল বুট মোডে ডেকে সমর্থন করে না।
  • অ্যাপ্লিকেশনটি কাস্টম ব্যবহার করা হয়, তাহলে Application , Application এছাড়াও সরাসরি বুট সচেতন (সরাসরি বুট মোডে ক্রেডেনশিয়াল সুরক্ষিত সঞ্চয়স্থানে প্রবেশাধিকার নেই) হতে প্রয়োজন হবে।

সরাসরি বুট মোডে ডিভাইসগুলিতে বার্তা প্রেরণের দিকনির্দেশের জন্য, সরাসরি বুট-সক্ষম বার্তা প্রেরণ দেখুন