Catch up on everthing we announced at this year's Firebase Summit. Learn more

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

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

বার্তা পরিচালনা করা

বার্তা গ্রহণ করতে, একটি পরিষেবা যা প্রসারিত ব্যবহার FirebaseMessagingService । আপনার পরিষেবা ওভাররাইড করা উচিত onMessageReceived এবং onDeletedMessages callbacks। এটি প্রাপ্তির 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 এর জন্য কাস্টম ডিফল্ট আইকন প্রদর্শন করে

  • সকল বিজ্ঞপ্তি বার্তা থেকে পাঠানো বিজ্ঞপ্তিগুলি সুরকার
  • কোনো বিজ্ঞপ্তি বার্তা যা স্পষ্টভাবে বিজ্ঞপ্তি পেলোডে আইকন সেট করে না।

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

  • সকল বিজ্ঞপ্তি বার্তা থেকে পাঠানো বিজ্ঞপ্তিগুলি সুরকার
  • কোনো বিজ্ঞপ্তি বার্তা যা স্পষ্টভাবে বিজ্ঞপ্তি পেলোডে রঙ সেট করে না।

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

ওভাররাইড onMessageReceived

পদ্ধতি অগ্রাহ্য করে FirebaseMessagingService.onMessageReceived , আপনার প্রাপ্ত উপর ভিত্তি করে কর্ম সম্পাদন করতে পারবেন RemoteMessage বস্তু এবং বার্তা তথ্য পাবেন:

জাভা

@Override
public void 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.getFrom());

    // Check if message contains a data payload.
    if (remoteMessage.getData().size() > 0) {
        Log.d(TAG, "Message data payload: " + remoteMessage.getData());

        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.
    if (remoteMessage.getNotification() != null) {
        Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
    }

    // 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.
}

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

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

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

একটি ব্যাকগ্রাউন্ডেড অ্যাপে বিজ্ঞপ্তি বার্তা পরিচালনা করুন

যখন আপনার অ্যাপটি ব্যাকগ্রাউন্ডে থাকে, তখন Android সিস্টেম ট্রেতে বিজ্ঞপ্তি বার্তা পাঠায়। বিজ্ঞপ্তিতে একটি ব্যবহারকারীর ট্যাপ ডিফল্টরূপে অ্যাপ লঞ্চারটি খোলে।

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

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

ব্যাকগ্রাউন্ড সীমাবদ্ধ অ্যাপ (Android P বা নতুন)

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

সরাসরি বুট মোডে FCM বার্তা গ্রহণ করুন

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

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

পূর্বশর্ত

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

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

  1. অ্যাপ-লেভেল গ্রেডল ফাইলে, FCM ডাইরেক্ট বুট সাপোর্ট লাইব্রেরির উপর নির্ভরতা যোগ করুন:

    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 যে সরাসরি বুট সচেতন হিসাবে চিহ্নিত করা হয় না যখন সরাসরি বুট মোডে চলমান।
  • পরিষেবা ব্যবহার করে এমন যেকোন লাইব্রেরিগুলিকে অবশ্যই শংসাপত্রের সুরক্ষিত স্টোরেজ অ্যাক্সেস করতে হবে না বা সরাসরি বুট মোডে চলাকালীন অ-ডাইরেক্ট বুটঅ্যায়ার উপাদানগুলিকে কল করতে হবে না। এর মানে হল যে অ্যাপটি ব্যবহার করে এমন যেকোন লাইব্রেরিগুলিকে পরিষেবা থেকে কল করা হয় সরাসরি বুট সচেতন হতে হবে, অথবা অ্যাপটিকে সরাসরি বুট মোডে চলছে কিনা তা পরীক্ষা করতে হবে এবং সেগুলিকে সেই মোডে কল করতে হবে না। উদাহরণস্বরূপ, Firebase SDK গুলি সরাসরি বুটের সাথে কাজ করে (এগুলি সরাসরি বুট মোডে ক্র্যাশ না করে একটি অ্যাপে অন্তর্ভুক্ত করা যেতে পারে), কিন্তু অনেক Firebase API সরাসরি বুট মোডে কল করা সমর্থন করে না।
  • অ্যাপ্লিকেশনটি কাস্টম ব্যবহার করা হয়, তাহলে Application , Application এছাড়াও সরাসরি বুট সচেতন (সরাসরি বুট মোডে ক্রেডেনশিয়াল সুরক্ষিত সঞ্চয়স্থানে প্রবেশাধিকার নেই) হতে প্রয়োজন হবে।

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