ফায়ারবেস অনমেসেজগ্রাউন্ডে অ্যাপ থাকা অবস্থায় কল করা হয়নি


232

আমি ফায়ারবেস নিয়ে কাজ করছি এবং অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায় আমার সার্ভার থেকে আমার অ্যাপে বিজ্ঞপ্তি প্রেরণের পরীক্ষা করছি। বিজ্ঞপ্তিটি সফলভাবে প্রেরণ করা হয়েছে, এটি এমনকি ডিভাইসের বিজ্ঞপ্তি কেন্দ্রে উপস্থিত হয়, তবে বিজ্ঞপ্তিটি উপস্থিত হয় বা আমি যদি এটিতে ক্লিক করি তখনও আমার FCMessagingService এর ভিতরে onMessageRemitted পদ্ধতিটি কখনও কল হয় না।

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

এই উদ্দেশ্যপূর্ণ আচরণ, বা আমি এটি ঠিক করার কোন উপায় আছে?

এখানে আমার এফবিম্যাসেজিংসেবা:

import android.util.Log;

import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;

public class FBMessagingService extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.i("PVL", "MESSAGE RECEIVED!!");
        if (remoteMessage.getNotification().getBody() != null) {
            Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getNotification().getBody());
        } else {
            Log.i("PVL", "RECEIVED MESSAGE: " + remoteMessage.getData().get("message"));
        }
    }
}

জসন বডি ছাড়াও, আপনার অন ​​টোকেনআরফ্রেশ কোডটি কোথায়? আপনি কি অ্যান্ড্রয়েড সেটআপ শেষ করেছেন ?
কাটো

4
বিজ্ঞপ্তির জসন বডি বলতে কী বোঝ? এছাড়াও, আমার অন টোকেনআরফ্রেশ কোডটি আমার ফায়ারবেইস ইনস্ট্যান্সআইডি পরিষেবার মধ্যে রয়েছে।
সাইজোজেনস

আপনি যে নমুনা পেডলোড পাঠাচ্ছেন তা কি পোস্ট করতে পারবেন?
আ।


আপনি এই থ্রেডটি স্ট্যাকওভারফ্লো
.

উত্তর:


144

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

ব্যবহারকারীর দ্বারা বিজ্ঞপ্তিটি আলতো চাপার সময় চালু করা উচিত এমন অভিপ্রায়টি নির্দেশ করতে আপনি একটি ক্লিক_অ্যাকশন নির্দিষ্ট করতে পারেন। ক্লিক_অ্যাকশন নির্দিষ্ট না করা থাকলে মূল ক্রিয়াকলাপ ব্যবহৃত হয়।

অভিপ্রায়টি চালু হলে আপনি এটি ব্যবহার করতে পারেন

getIntent().getExtras();

একটি সেট পুনরুদ্ধার করতে যাতে বিজ্ঞপ্তি বার্তার সাথে প্রেরিত যে কোনও ডেটা অন্তর্ভুক্ত থাকে।

বিজ্ঞপ্তি বার্তায় আরও জানতে ডক্স দেখুন


6
click_actionআমি যখন ফায়ারবেস বিজ্ঞপ্তি কনসোল ব্যবহার করছি তখন সেট করার কোনও উপায় আছে ?
নি লারিয়া

6
ঠিক আছে, তবে যদি অ্যাপটি মেরে ফেলা হয় (অগ্রভাগ বা পটভূমি নেই)?
মিচালু

3
কিন্তু ব্যবহারকারী কীভাবে বাতিল করবেন বিজ্ঞপ্তি? কারণ যদি ব্যবহারকারী এটিকে বাতিল করে দেয় তবে এর অর্থ হ'ল সমস্ত ডেটা এড়িয়ে যাবে ... তাই না?
আলেকসি টিমোশচেঙ্কো

4
সঠিক! সুতরাং অ্যান্ড্রয়েডে বিজ্ঞপ্তি বার্তা প্রেরণের সময়, সাথে থাকা ডেটা এমন ডেটা হওয়া উচিত যা বিজ্ঞপ্তির অভিজ্ঞতা বাড়িয়ে তুলছে। এটি অ্যাপের সমালোচনামূলক ডেটা হওয়া উচিত নয়, ব্যবহারকারীর বিজ্ঞপ্তিটি খারিজ করলেও অ্যাপ্লিকেশনটির প্রয়োজনীয় ডেটার জন্য ডেটা বার্তা ব্যবহার করা উচিত।
আর্থার থম্পসন

3
এটি সম্পূর্ণ সঠিক নয়। যদি বার্তাটিতে কেবল কোনও ডেটা থাকে এবং কোনও বিজ্ঞপ্তি পেইড না থাকে তবে অ্যাপটি অগ্রভাগে আছে বা না থাকলে ম্যাসেজটি সর্বদা অন-ম্যাসেজের রিসিভারে পৌঁছে দেওয়া হবে।
জ্যাকসঅনএফ 1 ই

125

সরান notificationক্ষেত্র আপনার সার্ভারে অনুরোধ থেকে সম্পূর্ণরূপে। কেবলdata প্রেরণ করুন এবং এটি হ্যান্ডেল করুন onMessageReceived()অন্যথায় আপনার onMessageReceived()অ্যাপ্লিকেশন ব্যাকগ্রাউন্ডে বা হত্যা করার সময় ট্রিগার হবে না।

"priority": "high"আপনার বিজ্ঞপ্তির অনুরোধে ক্ষেত্রটি অন্তর্ভুক্ত করতে ভুলবেন না । ডকুমেন্টেশন অনুসারে: ডেটা বার্তা একটি সাধারণ অগ্রাধিকার সহ প্রেরণ করা হয়, সুতরাং তারা তাত্ক্ষণিকভাবে পৌঁছাবে না; এটি সমস্যা হতে পারে।

সার্ভার থেকে যা পাঠাচ্ছি তা এখানে

{
  "data":{
    "id": 1,
    "missedRequests": 5
    "addAnyDataHere": 123
  },
  "to": "fhiT7evmZk8:APA91bFJq7Tkly4BtLRXdYvqHno2vHCRkzpJT8QZy0TlIGs......",
  "priority": "high"
}

সুতরাং আপনি এইভাবে আপনার ডেটা গ্রহণ করতে পারেন onMessageReceived(RemoteMessage message).... আমাকে আইডি পেতে হবে বলে দিন

Object obj = message.getData().get("id");
        if (obj != null) {
            int id = Integer.valueOf(obj.toString());
        }

9
আমি দেখতে পেয়েছি যে আমি যদি কেবল ডেটা বার্তা প্রেরণ করি তবে টাস্ক ম্যানেজারের কাছ থেকে সাফ হওয়া অ্যাপটি কী বিজ্ঞপ্তি পাবে না? এটি কি উদ্দেশ্যমূলক আচরণ?
প্রভজোত সিং 6

2
আমার পটভূমিতে বার্তা পাওয়ার জন্য এটিই ছিল সমাধান!
রায় হুলহা

5
ওরিওতে যখন অ্যাপ মারা যায়, অনেসেসরিজড কল করা হচ্ছে না। আমার কাছে কেবল ডেটা সহ পেডলোড রয়েছে। আপনার কোন আপডেট আছে?
সমীর মঙ্গরোলিয়া

2
একটি যাদুমন্ত্র মত কাজ করে!
এসএসকি

3
এই উত্তরের জন্য আপনাকে অনেক ভালবাসি: পি
আহমদ আরসলান

63

এই পদ্ধতির হ্যান্ডেল ইনটেন্ট () অবমূল্যায়ন করা হয়েছে, সুতরাং একটি বিজ্ঞপ্তি হ্যান্ডলিং নীচের হিসাবে করা যেতে পারে:

  1. পূর্বভূমি স্থিতি: বিজ্ঞপ্তির ক্লিকটি আপনার ব্যাকেন্ডিং ইনটেন্টের ক্রিয়াকলাপে যাবে যা আপনি সরবরাহ করছেন ব্যাকরণগতভাবে একটি নোটিফিকেশন তৈরি করার সময় এটি সাধারণত নোটিফিকেশনের ডেটা পেলোড দিয়ে তৈরি করা হয়।

  2. পটভূমি / নিহত রাজ্য - এখানে, সিস্টেম নিজেই নোটিফিকেশন পেলোডের উপর ভিত্তি করে একটি বিজ্ঞপ্তি তৈরি করে এবং সেই বিজ্ঞপ্তিটি ক্লিক করলে আপনি অ্যাপ্লিকেশনটির লঞ্চার ক্রিয়াকলাপে নিয়ে যান যেখানে আপনি আপনার জীবনচক্রের যে কোনও পদ্ধতিতে সহজেই ইনটেন্ট ডেটা আনতে পারবেন।


ধন্যবাদ!!! এই সমস্যায় আমি কয়েক দিন হারিয়েছি এবং এটি আমাকে বাঁচিয়েছে।
ইগোর জাঙ্কোভিć

সত্যিই নিখুঁত সমাধান!
এডুএক্সেভিয়ার

4
আমি হ্যান্ডেল ইনটেন্ট (ইনটেন্ট অভিপ্রায়) এ নোটিফিকেশন ডিসপ্লে লজিকটি পরিচালনা করছি, তবে অ্যাপটি ব্যাকগ্রাউন্ডে থাকাকালীন, 2 টি বিজ্ঞপ্তি প্রদর্শিত হবে, যা আমি তৈরি করেছি এবং অন্যটিতে পূর্বনির্দেশ থেকে সম্পূর্ণ বার্তা রয়েছে contains
জয়েসন

5
দুর্দান্ত, তবে আমি OnMessageReceivedএই ক্ষেত্রে কোনও ব্যবহার দেখতে পাচ্ছি না !?
আলা আবুজারিফা

8
আমি খাচ্ছি com.google.firebase: firebase মেসেজিং: 11.6.2 & handleIntent চূড়ান্ত now.Check হয় stackoverflow.com/questions/47308155/...
রোনাক Poriya

31

ফায়ারবেস বার্তা সম্পর্কে আরও স্পষ্ট ধারণা এখানে। আমি তাদের সমর্থন দল থেকে এটি পেয়েছি।

ফায়ারবাসে তিনটি বার্তার প্রকার রয়েছে :

বিজ্ঞপ্তি বার্তা : বিজ্ঞপ্তি বার্তা ব্যাকগ্রাউন্ড বা অগ্রভাগে কাজ করে। অ্যাপ্লিকেশন পটভূমিতে থাকাকালীন বিজ্ঞপ্তি বার্তাগুলি সিস্টেম ট্রেতে সরবরাহ করা হয়। অ্যাপ্লিকেশনটি অগ্রভাগে থাকলে, বার্তাগুলি হ'ল onMessageReceived()বা didReceiveRemoteNotificationকলব্যাকগুলি দ্বারা পরিচালনা করা হয় । এগুলি হ'ল প্রদর্শন বার্তা হিসাবে উল্লেখ করা হয়।

ডেটা বার্তা : অ্যান্ড্রয়েড প্ল্যাটফর্মে, ডেটা বার্তা ব্যাকগ্রাউন্ড এবং অগ্রভাগে কাজ করতে পারে। ডেটা বার্তাটি onMessageRe प्राप्त () দ্বারা পরিচালিত হবে। প্ল্যাটফর্মের জন্য নির্দিষ্ট নোটটি হ'ল: অ্যান্ড্রয়েডে, আপনার ক্রিয়াকলাপটি চালু করতে ব্যবহৃত ইনটেন্টে ডেটা পেলডটি পুনরুদ্ধার করা যেতে পারে। বিস্তারিতভাবে বলতে গেলে, যদি আপনার কাছে থাকে তবে আপনি কেবলমাত্র থেকে "click_action":"launch_Activity_1"এই উদ্দেশ্যটি পুনরুদ্ধার করতে পারেন ।getIntent()Activity_1

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

এছাড়াও, আমি আপনাকে ডেটা বান্ডেল নিষ্কাশন করতে onMessageRe प्राप्त পদ্ধতি (ডেটা বার্তা দেখুন) ব্যবহার করার পরামর্শ দিচ্ছি। আপনার যুক্তি থেকে, আমি বান্ডিল অবজেক্টটি চেক করেছি এবং প্রত্যাশিত ডেটা সামগ্রী খুঁজে পাই না। এখানে একই ধরণের মামলার একটি রেফারেন্স দেওয়া হয়েছে যা আরও স্পষ্টতা দিতে পারে।

সার্ভার দিক থেকে, ফায়ারবেস বিজ্ঞপ্তি নীচে বিন্যাস করা উচিত :

সার্ভার পক্ষের "বিজ্ঞপ্তি" অবজেক্টটি প্রেরণ করা উচিত । আমার TargetActivityব্যবহারের বার্তা পাচ্ছে না বলে "বিজ্ঞপ্তি" অবজেক্টের অভাব রয়েছে getIntent()

সঠিক বার্তার ফর্ম্যাটটি দেওয়া হয়েছে:

{
 "data": {
  "body": "here is body",
  "title": "Title"
 },
"notification": {
  "body": "here is body",
  "title": "Title",
  "click_action": "YOUR_ACTION"
 },
 "to": "ffEseX6vwcM:APA91bF8m7wOF MY FCM ID 07j1aPUb"
}

ফায়ারবেস বার্তা সম্পর্কে আরও স্পষ্ট ধারণা এখানে। আমি তাদের সমর্থন দল থেকে এটি পেয়েছি।

আরও তথ্যের জন্য আমার এই থ্রেড এবং এই থ্রেডটি দেখুন


3
উল্লেখ করার মতো যে ডিভাইসটি গভীর ডোজ মোডে (অ্যান্ড্রয়েড 7.০ এ প্রবর্তিত) থাকলে "ডেটা বার্তা" পাওয়া যাবে না। যারা সাবধান!
সমীর জে

30

আমারও একই সমস্যা ছিল। 'বিজ্ঞপ্তি'র পরিবর্তে' ডেটা বার্তা 'ব্যবহার করা আরও সহজ। ডেটা বার্তা সর্বদা onMessageReceed ক্লাসে লোড করে।

সেই শ্রেণিতে আপনি নোটিফিকেশন বিল্ডার দিয়ে নিজের বিজ্ঞপ্তি তৈরি করতে পারেন।

উদাহরণ:

 @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        sendNotification(remoteMessage.getData().get("title"),remoteMessage.getData().get("body"));
    }

    private void sendNotification(String messageTitle,String messageBody) {
        Intent intent = new Intent(this, MainActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        PendingIntent pendingIntent = PendingIntent.getActivity(this,0 /* request code */, intent,PendingIntent.FLAG_UPDATE_CURRENT);

        long[] pattern = {500,500,500,500,500};

        Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

        NotificationCompat.Builder notificationBuilder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                .setSmallIcon(R.drawable.ic_stat_name)
                .setContentTitle(messageTitle)
                .setContentText(messageBody)
                .setAutoCancel(true)
                .setVibrate(pattern)
                .setLights(Color.BLUE,1,1)
                .setSound(defaultSoundUri)
                .setContentIntent(pendingIntent);

        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }

7
ধন্যবাদ .. আমি আমার সার্ভার কোড পরিবর্তন করেছি এবং "বিজ্ঞপ্তি" এর পরিবর্তে "ডেটা" ব্যবহার করেছি এবং এখন এটি নিখুঁতভাবে কাজ করছে,
মহেশ কাব্যথিয়া

5
@ অ্যাপটি পটভূমিতে না থাকলেই যদি অগ্রভাগে থাকে তবেই এটিকে কাজ করুন। আপনি উভয় ক্ষেত্রেই এই ইভেন্টটি ট্রিগার করতে আমাকে সহায়তা করতে পারেন ??
অনন্ত শাহ

@ অ্যান্টশাহ ফায়ারবেস সার্ভারে আপনার পোস্টটি কেমন দেখাচ্ছে?
কুট

3
এখানে আসলে তিনটি সম্ভাব্য মামলা রয়েছে। 1) অগ্রভাগে অ্যাপ। 2) ব্যাকগ্রাউন্ডে অ্যাপ। ৩) অ্যাপ চলছে না। আপনি বলতে হিসেবে, একটি ডেটা 'বার্তা প্রথম দুই ক্ষেত্রেই প্রাপ্ত করা হবে, কিন্তু না তৃতীয় মামলা, যখন অ্যাপ্লিকেশন চলছে না পারে। তিনটি ক্ষেত্রেই পূরণ করতে আপনাকে বার্তায় 'বিজ্ঞপ্তি' ক্ষেত্রটি সেট করতে হবে। (এছাড়াও আপনি যদি আইওএসের পাশাপাশি অ্যান্ড্রয়েড ক্লায়েন্টগুলিকে সমর্থন করতে চান তবে একটি ভাল ধারণা)
স্টিভ মোসলে

1
এমনকি অ্যাপটি চলমান নেই, আমি onmessagereused ফাংশনটিতে সার্ভার থেকে একটি বার্তা পাই। আমি আপনার সাথে একমত যে আপনি যদি আইওএসকে সমর্থন করতে চান তবে 'বিজ্ঞপ্তি' ব্যবহার করা আরও ভাল।
কুট

21

ফায়ারবেস ক্লাউড মেসেজিং ডকুমেন্টেশন অনুসারে-যদি ক্রিয়াকলাপটি অগ্রভাগে থাকে তবে onMessageReceed কল হবে। যদি কার্যকলাপ ব্যাকগ্রাউন্ডে থাকে বা বন্ধ থাকে তবে অ্যাপ্লিকেশন লঞ্চার ক্রিয়াকলাপের জন্য বিজ্ঞপ্তি কেন্দ্রে বিজ্ঞপ্তি বার্তা প্রদর্শিত হয়। আপনার অ্যাপ্লিকেশনটি ফায়ারবেস মেসেজিংয়ের জন্য রেস্ট সার্ভিস এপিআই কল করে ব্যাকগ্রাউন্ডে থাকলে বিজ্ঞপ্তির ক্লিকে আপনার কাস্টমাইজড ক্রিয়াকলাপটিকে কল করতে পারেন:

URL- https://fcm.googleapis.com/fcm/send

পদ্ধতির প্রকার - পোস্ট করুন

Header- Content-Type:application/json
Authorization:key=your api key

শরীর / পেলোড:

{ "notification": {
    "title": "Your Title",
    "text": "Your Text",
     "click_action": "OPEN_ACTIVITY_1" // should match to your intent filter
  },
    "data": {
    "keyname": "any value " //you can get this data as extras in your activity and this data is optional
    },
  "to" : "to_id(firebase refreshedToken)"
} 

এবং এটি আপনার অ্যাপ্লিকেশনটিতে আপনি কল করতে আপনার ক্রিয়াকলাপের নীচে কোড যুক্ত করতে পারেন:

<intent-filter>
                <action android:name="OPEN_ACTIVITY_1" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>

আমি কোথায় উদ্দেশ্যটি তৈরি করব এবং এটি একটি নির্দিষ্ট ক্রিয়াকলাপটি খুলব? আমি জানি এটি প্রকাশিতটিতে OPEN_ACTIVITY_1 অভিপ্রায় নিবন্ধিত করে, তবে আমি আসলে এটি কোথায় বলি?
সাইজোজোস


আমাদের উদ্দেশ্যমূলক-ফিল্টারগুলি থেকে কোনও ক্রিয়াকলাপ কল করা উচিত? বা নিজেই এটি শুরু onMessageReceived?
কুলমাইন্ড

14

নিম্নলিখিত মামলার উপর ভিত্তি করে onMessageRemitted (রিমোটমেসেজ রিমোটমেসেজ) পদ্ধতি বলা হয়।

  • বিজ্ঞপ্তি এবং ডেটা ব্লক সহ এফসিএম প্রতিক্রিয়া :
{
  
"to": "device token list",
  "notification": {
    "body": "Body of Your Notification",
    "title": "Title of Your Notification"
  },
  "data": {
    "body": "Body of Your Notification in Data",
    "title": "Title of Your Notification in Title",
    "key_1": "Value for key_1",
    "image_url": "www.abc.com/xyz.jpeg",
    "key_2": "Value for key_2"
  }
}
  1. অগ্রভাগে অ্যাপ্লিকেশন:

onMessageRemitted (রিমোটমেসেজ রিমোটমেসেজ) নামক নোটিফিকেশন বারে লার্জিকন এবং বিগপিকচার দেখায়। আমরা বিজ্ঞপ্তি এবং ডেটা ব্লক উভয় থেকেই সামগ্রীটি পড়তে পারি

  1. পটভূমিতে অ্যাপ:

onMessageReceived (RemoteMessage remoteMessage) বলা হয় না, সিস্টেম ট্রে বার্তা থেকে শরীর এবং শিরোনাম পড়তে হবে প্রজ্ঞাপন বিজ্ঞপ্তি বারের ব্লক এবং শো ডিফল্ট বার্তা ও শিরোনাম।

  • কেবলমাত্র ডেটা ব্লক সহ এফসিএম প্রতিক্রিয়া :

এই ক্ষেত্রে, জসন থেকে বিজ্ঞপ্তি ব্লকগুলি সরিয়ে ফেলা হচ্ছে

{
  
"to": "device token list",
  "data": {
    "body": "Body of Your Notification in Data",
    "title": "Title of Your Notification in Title",
    "key_1": "Value for key_1",
    "image_url": "www.abc.com/xyz.jpeg",
    "key_2": "Value for key_2"
  }
}

ম্যাসেজের জন্য কল করার সমাধান (প্রাপ্ত)

  1. অগ্রভাগে অ্যাপ্লিকেশন:

onMessageRemitted (রিমোটমেসেজ রিমোটমেসেজ) নামক নোটিফিকেশন বারে লার্জিকন এবং বিগপিকচার দেখায়। আমরা বিজ্ঞপ্তি এবং ডেটা ব্লক উভয় থেকেই সামগ্রীটি পড়তে পারি

  1. পটভূমিতে অ্যাপ:

onMessageRe प्राप्त (রিমোটমেসেজ রিমোটমেসেজ) কল করা হয়েছে , নোটিফিকেশন কী সাড়া না পাওয়ায় সিস্টেম ট্রে বার্তাটি গ্রহণ করবে না । নোটিফিকেশন বারে লার্জ আইকন এবং বিগপিকচার দেখায়

কোড

 private void sendNotification(Bitmap bitmap,  String title, String 
    message, PendingIntent resultPendingIntent) {

    NotificationCompat.BigPictureStyle style = new NotificationCompat.BigPictureStyle();
    style.bigPicture(bitmap);

    Uri defaultSound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);

    NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
    String NOTIFICATION_CHANNEL_ID = mContext.getString(R.string.default_notification_channel_id);

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "channel_name", NotificationManager.IMPORTANCE_HIGH);

        notificationManager.createNotificationChannel(notificationChannel);
    }
    Bitmap iconLarge = BitmapFactory.decodeResource(mContext.getResources(),
            R.drawable.mdmlogo);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(mContext, NOTIFICATION_CHANNEL_ID)
            .setSmallIcon(R.drawable.mdmlogo)
            .setContentTitle(title)
            .setAutoCancel(true)
            .setSound(defaultSound)
            .setContentText(message)
            .setContentIntent(resultPendingIntent)
            .setStyle(style)
            .setLargeIcon(iconLarge)
            .setWhen(System.currentTimeMillis())
            .setPriority(Notification.PRIORITY_MAX)
            .setChannelId(NOTIFICATION_CHANNEL_ID);


    notificationManager.notify(1, notificationBuilder.build());


}

রেফারেন্স লিংক:

https://firebase.google.com/docs/cloud-messaging/android/receive


ব্যাকগ্রাউন্ড ইস্যুতে ভুগছেন লোকদের জন্য সর্বাধিক গুরুত্বপূর্ণ অংশটি হ'ল সার্ভারের মাধ্যমে প্রেরিত জেএসএন থেকে "বিজ্ঞপ্তি" সম্পত্তি মুছে ফেলা। এটি সমস্যার সমাধান করে। অনেক ধন্যবাদ.
রমি এম মোসা

13

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

পটভূমিতে অ্যাপটি সনাক্ত করতে এবং আপনার ব্যাকগ্রাউন্ড পরিষেবাটি ট্রিগার করার জন্য আমার সমাধান এখানে রয়েছে,

public class FirebaseBackgroundService extends WakefulBroadcastReceiver {

  private static final String TAG = "FirebaseService";

  @Override
  public void onReceive(Context context, Intent intent) {
    Log.d(TAG, "I'm in!!!");

    if (intent.getExtras() != null) {
      for (String key : intent.getExtras().keySet()) {
        Object value = intent.getExtras().get(key);
        Log.e("FirebaseDataReceiver", "Key: " + key + " Value: " + value);
        if(key.equalsIgnoreCase("gcm.notification.body") && value != null) {
          Bundle bundle = new Bundle();
          Intent backgroundIntent = new Intent(context, BackgroundSyncJobService.class);
          bundle.putString("push_message", value + "");
          backgroundIntent.putExtras(bundle);
          context.startService(backgroundIntent);
        }
      }
    }
  }
}

ম্যানিফেস্টে। XML এ

<receiver android:exported="true" android:name=".FirebaseBackgroundService" android:permission="com.google.android.c2dm.permission.SEND">
            <intent-filter>
                <action android:name="com.google.android.c2dm.intent.RECEIVE" />
            </intent-filter>
        </receiver>

সর্বশেষতম অ্যান্ড্রয়েড 8.0 সংস্করণে এই সমাধানটি পরীক্ষিত। ধন্যবাদ


এই ফায়ারব্যাকব্যাকগ্রাউন্ড সার্ভিস ক্লাসটি ব্যবহার করার জন্য কি ?? @ নাগেন্দ্র বদিগন্তী

এই কোডটি কোথায় পাবলিক ক্লাসটি ব্যবহার করবেন ফায়ারব্যাকব্যাকগ্রাউন্ডস সার্ভিস ওয়াকেফুলড্রাস্টকাস্ট রিসিভার @ নাগেন্দ্র বদিগন্তী প্রসারিত করুন

আপনার প্যাকেজে একটি পরিষেবা শ্রেণি তৈরি করুন এবং আপনার মেনিফেস্ট.এক্সএমএলতে নিবন্ধ করুন। আপনার বিজ্ঞপ্তিগুলির জন্য আপনার কাছে ফিল্টার রয়েছে তা নিশ্চিত করুন। যেহেতু পরিষেবাটি প্রতিটি জিসিএম বিজ্ঞপ্তির জন্য ট্রিগার করে।
নগেন্দ্র বদিগন্তী

firebase.google.com/docs/cloud-messaging/android/… আমি এই লিঙ্কটি অনুসরণ করছি, বিজ্ঞপ্তি পাওয়ার জন্য আমার এই শ্রেণিটি যুক্ত করা দরকার। কেবল ফায়ারবেস থেকে প্রথম বার্তা প্রেরণ .. এটি বলেছে সম্পূর্ণ হয়েছে তবে বিজ্ঞপ্তিটি পাচ্ছে না নাগেন্দ্র বদিগন্তী

1
WakefulBroadcastReceiverএপিআই স্তর 26.1.0 থেকে অবহেলিত।
মাইনোরু

12

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

সুতরাং MainActivity.java উপর onCreate জন্য চেক অতিরিক্ত :

    if (getIntent().getExtras() != null) {
        for (String key : getIntent().getExtras().keySet()) {
            Object value = getIntent().getExtras().get(key);
            Log.d("MainActivity: ", "Key: " + key + " Value: " + value);
        }
    }

আমি কীভাবে বিজ্ঞপ্তি শিরোনাম, বডি এবং ডেটা পেতে পারি?
মোঃ তারিকুল ইসলাম

1
ধন্যবাদ, এই উত্তর। @ মোঃ তারিকুল ইসলাম এই প্রশ্নে উল্লিখিত হিসাবে onMessageRemitted () ব্যবহার করে।
felixwcf

7

আমার জন্য কাজগুলির handleIntentপদ্ধতিটি ওভাররাইড করুন FirebaseMessageService

এখানে কোড সি # (Xamarin)

public override void HandleIntent(Intent intent)
{
    try
    {
        if (intent.Extras != null)
        {
            var builder = new RemoteMessage.Builder("MyFirebaseMessagingService");

            foreach (string key in intent.Extras.KeySet())
            {
                builder.AddData(key, intent.Extras.Get(key).ToString());
            }

            this.OnMessageReceived(builder.Build());
        }
        else
        {
            base.HandleIntent(intent);
        }
    }
    catch (Exception)
    {
        base.HandleIntent(intent);
    }
}

এবং জাভা কোড thats

public void handleIntent(Intent intent)
{
    try
    {
        if (intent.getExtras() != null)
        {
            RemoteMessage.Builder builder = new RemoteMessage.Builder("MyFirebaseMessagingService");

            for (String key : intent.getExtras().keySet())
            {
                builder.addData(key, intent.getExtras().get(key).toString());
            }

            onMessageReceived(builder.build());
        }
        else
        {
            super.handleIntent(intent);
        }
    }
    catch (Exception e)
    {
        super.handleIntent(intent);
    }
}

হ্যান্ডেল ইনটেন্ট () চূড়ান্ত
ইটোর

@ এটোর কীভাবে আমি হ্যান্ডেল ইনটেন্ট ফাংশনটি চালু করতে পারি?
হিরোটো

আপনি ফায়ারবেস থেকে বার্তাটি গ্রহণ করার সময় পদ্ধতিটি বলা হয়, তবে পদ্ধতিটি চূড়ান্ত ঘোষিত হওয়ার কারণে আপনি ওভাররাইড করতে পারবেন না। (ফায়ারবেস 11.6.0)
এটোর

5

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

if(getIntent().getExtras()! = null){
  //do your stuff
}else{
  //do that you normally do
}

যদি আমি মূলঅ্যাক্টিভিটি থেকে নেভিগেট করি তবে কীভাবে নির্দিষ্ট ক্রিয়াকলাপে ফিরে নেভিগেট কাজ করবে?
ম্যাক_প্লে

@ উজাইর গেটইন্টেন্ট ()। GetExtras () সর্বদা নালিশ হয়ে যাচ্ছে, আপনার কি অন্য কোনও সমাধান আছে? যখন অ্যাপটি ব্যাকগ্রাউন্ডে চলছে ম্যাসেজের প্রাপ্ত পদ্ধতিটি কল করবেন না
ব্যবহারকারী 2025187

3

অ্যাপ্লিকেশনটি যদি ডিফল্ট হ্যান্ডলিং বিজ্ঞপ্তি অনুসারে ফায়ার-বেসে থাকে তবে আমরা যদি আমাদের কাস্টম বিজ্ঞপ্তিটি চেয়ে আমাদের সার্ভারের দিকটি পরিবর্তন করতে পারি তবে এটি আমাদের কাস্টম ডেটা (ডেটা পেলোড) প্রেরণের জন্য দায়বদ্ধ

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

এখন, আপনার সার্ভার সাইড কোড ফর্ম্যাটটি দেখতে দেখতে,

{
  "collapse_key": "CHAT_MESSAGE_CONTACT",
  "data": {
    "loc_key": "CHAT_MESSAGE_CONTACT",
    "loc_args": ["John Doe", "Contact Exchange"],
    "text": "John Doe shared a contact in the group Contact Exchange",
    "custom": {
      "chat_id": 241233,
      "msg_id": 123
    },
    "badge": 1,
    "sound": "sound1.mp3",
    "mute": true
  }
}

দ্রষ্টব্য : উপরের কোডটি
"পাঠ্য" এ এই লাইনটি দেখুন : "জন ডো ডেটো পেওডে গ্রুপ যোগাযোগ এক্সচেঞ্জের একটি পরিচিতি ভাগ করেছেন" বার্তা বিবরণের জন্য "বডি" বা "বার্তা" পরামিতিগুলির পরিবর্তে "পাঠ্য" পরামিতি ব্যবহার করা উচিত বা আপনি যা কিছু করুন পাঠ্য ব্যবহার করতে চান

onMessageReceived ()

@Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        Log.e(TAG, "From: " + remoteMessage.getData().toString());

        if (remoteMessage == null)
            return;

        // Check if message contains a data payload.
        if (remoteMessage.getData().size() > 0) {
           /* Log.e(TAG, "Data Payload: " + remoteMessage.getData().toString());*/
            Log.e(TAG, "Data Payload: " + remoteMessage);

            try {

                Map<String, String> params = remoteMessage.getData();
                JSONObject json = new JSONObject(params);
                Log.e("JSON_OBJECT", json.toString());


                Log.e(TAG, "onMessageReceived: " + json.toString());

                handleDataMessage(json);
            } catch (Exception e) {
                Log.e(TAG, "Exception: " + e.getMessage());
            }
        }
    }

2

আপনার মেইনএকটিভিটির অনক্রিট পদ্ধতিতে কেবল এটি কল করুন:

if (getIntent().getExtras() != null) {
           // Call your NotificationActivity here..
            Intent intent = new Intent(MainActivity.this, NotificationActivity.class);
            startActivity(intent);
        }

যদি আমি মূলঅ্যাক্টিভিটি থেকে নেভিগেট করি তবে কীভাবে নির্দিষ্ট ক্রিয়াকলাপে ফিরে নেভিগেট কাজ করবে?
ম্যাক_প্লে

2

t3h Exi এর সমাধান অনুসারে আমি এখানে পরিষ্কার কোড পোস্ট করতে চাই। এটিকে কেবল মাইফায়ারবেসমেসেজিং সার্ভিসে রেখে দিন এবং অ্যাপটি ব্যাকগ্রাউন্ড মোডে থাকলে সবকিছু ঠিকঠাক কাজ করে। কমপক্ষে আপনার কমপ্লেক্স তৈরি করতে হবে .google ফায়ারবেস: ফায়ারবেস-বার্তা: 10.2.1

 @Override
public void handleIntent(Intent intent)
{
    try
    {
        if (intent.getExtras() != null)
        {
            RemoteMessage.Builder builder = new RemoteMessage.Builder("MyFirebaseMessagingService");

            for (String key : intent.getExtras().keySet())
            {
                builder.addData(key, intent.getExtras().get(key).toString());
            }



           onMessageReceived(builder.build());
        }
        else
        {
            super.handleIntent(intent);
        }
    }
    catch (Exception e)
    {
        super.handleIntent(intent);
    }
}

আমি আপনার সমাধানটি বাস্তবায়নের চেষ্টা করছি, তবে হ্যান্ডেল ইনটেন্ট () পদ্ধতিটি আমার এসডিকে সংস্করণে (এসডিকে 27) চূড়ান্ত, তাই আমি আমার সেবায় ওভাররাইড করতে পারি না ...
মাতদেব

হ্যাঁ তবে আমার দোষ নয় বা দেওয়ার কোনও কারণ নেই -১ !!! খুব অহংকারী। এটি ফায়ারবেস ১১.৪.২ অবধি কাজ করে তারপরে গুগল এটিকে পরিবর্তন করে (এই পদ্ধতিটিকে চূড়ান্ত করে তোলে)। সুতরাং এখন আপনাকে অবশ্যই নিজের সমাধানটি বিজ্ঞপ্তি সহ প্রোগ্রাম করতে হবে।
ফ্র্যাঙ্ক

আমি একটি -1 না দিয়ে একটি +1 দিয়েছি!
মাতদেব

আপনি আমার কাজটি সংরক্ষণ করুন: পি
অমিতাভ 2715

2

এটা চেষ্টা কর:

public void handleIntent(Intent intent) {
    try {
        if (intent.getExtras() != null) {
            RemoteMessage.Builder builder = new RemoteMessage.Builder("MyFirebaseMessagingService");
            for (String key : intent.getExtras().keySet()) {
            builder.addData(key, intent.getExtras().get(key).toString());
        }
            onMessageReceived(builder.build());
        } else {
            super.handleIntent(intent);
        }
    } catch (Exception e) {
        super.handleIntent(intent);
    }
}

হ্যান্ডেল ইনট্যান্ট আর ফায়ারবেস ব্যবহার করা হয় না: 11.8.0 এবং উপরের।
শিহাব উদ্দিন

1

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


1

যে পয়েন্টটি হাইলাইট করার দাবি রাখে তা হ'ল অ্যাপটি ব্যাকগ্রাউন্ডে থাকা অবস্থায়ও অন-ম্যাসেজআরসিটেড হ্যান্ডলার কল করতে আপনাকে কেবলমাত্র ডেটা কী - ডেটা বার্তা ব্যবহার করতে হবে। আপনার পেডলোডে আপনার কাছে অন্য কোনও বিজ্ঞপ্তি বার্তা কী থাকা উচিত নয়, অন্যথায় অ্যাপ্লিকেশনটি ব্যাকগ্রাউন্ডে থাকলে হ্যান্ডলারটির ট্রিগার হবে না।

এটি এখানে উল্লেখ করা হয়েছে (তবে এফসিএম ডকুমেন্টেশনে এত জোর দেওয়া হয়নি):

https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages

আপনার অ্যাপ্লিকেশন সার্ভার এবং FCM সার্ভার API ব্যবহার করুন: কেবলমাত্র ডেটা কী সেট করুন । হয় সঙ্কুচিত বা অ-সঙ্কুচিত হতে পারে।


1

আমি যে ব্যাকএন্ডের সাথে কাজ করছি তা হ'ল নোটিফিকেশন বার্তা এবং ডেটা বার্তা নয়। সুতরাং সমস্ত উত্তর পড়ার পরে আমি চালু হওয়া ক্রিয়াকলাপে আসা অভিপ্রায়টির বান্ডিল থেকে অতিরিক্তগুলি পুনরুদ্ধার করার চেষ্টা করেছি। তবে আমি কোন কীগুলি থেকে পুনরুদ্ধার করার চেষ্টা করেছি তা বিবেচনা getIntent().getExtras();করেই মানটি সর্বদা নালাগুলি।

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

এখানে কীটি হল বিজ্ঞপ্তি বার্তায় ডেটা পেলোড যুক্ত করা।

উদাহরণ:

{
    "data": {
        "message": "message_body",
        "title": "message_title"
    },
    "notification": {
        "body": "test body",
        "title": "test title"
    },
    "to": "E4An.."
}

আপনি এটি করার পরে, আপনি এইভাবে আপনার তথ্য পেতে সক্ষম হবেন:

intent.getExtras().getString("title") হবে message_title

এবং intent.getExtras().getString("message") হবেmessage_body

উল্লেখ


1

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

{ "data": { "image": "https://static.pexels.com/photos/4825/red-love-romantic-flowers.jpg", "message": "Firebase Push Message Using API" "AnotherActivity": "True" }, "to" : "device id Or Device token" }

আপনি "অন্যকোন কার্যকলাপ" এর আগে কমা হারিয়েছেন। আমার অ্যান্ড্রয়েড কম্পন করে কিন্তু আসলে কিছুই দেখায় না (কোনও পাঠ্য নেই, কোনও চিত্র নেই, কোনও ধাক্কা নেই)।
জেকাবি

1

যখন বার্তাটি পাওয়া যায় এবং আপনার অ্যাপ ব্যাকগ্রাউন্ডে থাকে তখন নোটিফিকেশনটি মূল ক্রিয়াকলাপের অতিরিক্ত উদ্দেশ্যগুলিতে প্রেরণ করা হয়।

আপনি মূল ক্রিয়াকলাপের oncreate () বা onresume () ফাংশনে অতিরিক্ত মান পরীক্ষা করতে পারেন।

আপনি ক্ষেত্র যেমন ডেটা, টেবিল ইত্যাদি পরীক্ষা করতে পারেন (বিজ্ঞপ্তিতে নির্দিষ্ট একটি)

উদাহরণস্বরূপ আমি কী হিসাবে ডেটা ব্যবহার করে প্রেরণ করেছি

public void onResume(){
    super.onResume();
    if (getIntent().getStringExtra("data")!=null){
            fromnotification=true;
            Intent i = new Intent(MainActivity.this, Activity2.class);
            i.putExtra("notification","notification");
            startActivity(i);
        }

}

0

আমার একই সমস্যা ছিল এবং এটি সম্পর্কে আরও কিছু খনন করেছি। অ্যাপটি ব্যাকগ্রাউন্ডে থাকলে, সিস্টেম ট্রেতে একটি বিজ্ঞপ্তি বার্তা প্রেরণ করা হয়, তবে https://firebase.google.com/docs/cloud-messaging/downstream#monitor-token-generation_3 এবং এ দেখতে একটি ডেটা বার্তা প্রেরণ করা হয় https://github.com/firebase/quickstart-android/blob/master/messaging/app/src/main/java/com/google/firebase/quickstart/fcm/MyFirebaseMessagingService.javaonMessageReceived()

তা নিশ্চিত করতে আপনি যে বার্তা পাঠাচ্ছেন, দস্তাবেজ বলে, " আপনার অ্যাপ সার্ভার এবং FCM সার্ভার API ব্যবহার করুন:।। সেট ডেটার কী শুধুমাত্র পারেন কলাপসিবল বা অ- কলাপসিবল হতে পারে "
দেখুন https://firebase.google.com/ ডক্স / মেঘ-মেসেজিং / ধারণা-অপশন # notifications_and_data_messages


0

দুটি ধরণের বার্তা রয়েছে: বিজ্ঞপ্তি বার্তা এবং ডেটা বার্তা। আপনি যদি কেবল ডেটা বার্তা প্রেরণ করেন তবে তা আপনার বার্তার স্ট্রিংয়ে বিজ্ঞপ্তি অবজেক্ট ছাড়াই। আপনার অ্যাপ্লিকেশনটি যখন পটভূমিতে আসে তখন তা আমন্ত্রণ জানানো হবে।


0

@ মাহেশ কাবথিয়া এর উত্তর চেক করুন। আমার ক্ষেত্রে, সার্ভার কোডটিতে কেবল এটির মতো রয়েছে:

{
"notification": {
  "body": "here is body",
  "title": "Title",
 },
 "to": "sdfjsdfonsdofoiewj9230idsjkfmnkdsfm"
}

আপনাকে এতে পরিবর্তন করতে হবে:

{
 "data": {
  "body": "here is body",
  "title": "Title",
  "click_action": "YOUR_ACTION"
 },
"notification": {
  "body": "here is body",
  "title": "Title"
 },
 "to": "sdfjsdfonsdofoiewj9230idsjkfmnkdsfm"
}

তারপরে, ব্যাকগ্রাউন্ডে অ্যাপের ক্ষেত্রে ডিফল্ট ক্রিয়াকলাপের উদ্দেশ্য অতিরিক্ত "ডেটা" পাবে

শুভকামনা!


-1

ফায়ারব্যাসমেসেজিং সার্ভিসির অনক্রিট পদ্ধতিটি কেবল ওভাররাইড করুন। যখন আপনার অ্যাপটি পটভূমিতে থাকে তখন তাকে বলা হয়:

public override void OnCreate()
{
    // your code
    base.OnCreate();
}

এই উত্তরটি আরও কার্যকর হতে পারে যদি আপনি কোনও ব্যাখ্যা যুক্ত করতে পারেন এবং কিছু ডকুমেন্টেশনের লিঙ্ক করতে পারেন। এটি কীভাবে সাহায্য করার কথা?
কিলোকাহন

@ কিলোকাহন আপনি কি আমাকে বোঝাতে পারেন যা আপনি বুঝতে পারছেন না? নির্দেশিত পদ্ধতিটি অবশ্যই কোডের মধ্যে প্রবেশ করাতে হবে যা প্রশ্নের অংশ এবং প্রশ্নের পুরো উত্তর দেয়। কোডটি জামারিনের জন্য, তবে আপনি কেবল জাভাতে রূপান্তর করতে পারেন।
রেনজো সিওট

এএফআইকি অফিশিয়াল ডকুমেন্টেশন ( ফায়ারবেস.google.com/docs/cloud-messaging/android/client) ফায়ারব্যাসমেসেজিং সার্ভিসেস প্রসারিত কোনও পরিষেবাতে অনক্রিটকে ওভাররাইড করার বিষয়ে কথা বলবে না - যদি আপনার ডকুমেন্টেশনে অ্যাক্সেস থাকে যা সম্ভবত আপনি একটি লিঙ্ক ভাগ করতে পারেন? এছাড়াও, আপনার উত্তর থেকে, এটি ওভাররাইডিং কীভাবে অনক্রিট বিজ্ঞপ্তিটি ক্লিক করা হয় তখন কল করা হবে না অনমেসরেইজটের সমস্যাটি সমাধান করে - তাই আরও তথ্যের জন্য অনুরোধ।
কিলোকাহন

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

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

-1

আছে 2 ধরনের এর Firebase পুশ-বিজ্ঞপ্তিগুলি:

1- বিজ্ঞপ্তি বার্তা (প্রদর্শন বার্তা) -> - 1.1 আপনি যদি এই বৈকল্পিকটি চয়ন করেন তবে অ্যাপটি ব্যাকগ্রাউন্ডে থাকলে ওএস এটিকে একটি নোটিফিকেশন তৈরি করবে এবং এতে ডেটা পাস করবে intent। তারপরে এটি ক্লায়েন্টের উপর নির্ভর করে এই ডেটা পরিচালনা করবে।

- 1.2 অ্যাপে হয় তাহলে ফোরগ্রাউন্ড তারপর প্রজ্ঞাপন এটা মাধ্যমে প্রাপ্ত করা হবে callback-functionFirebaseMessagingServiceএবং এটি এটি পরিচালনা ক্লায়েন্ট উপরে নির্ভর করে।

2- ডেটা বার্তা (4k ডেটা অবধি) -> এই বার্তাগুলি ক্লায়েন্টকে কেবলমাত্র ডেটা প্রেরণে ব্যবহৃত হয় (নিঃশব্দে) এবং এটি কলব্যাক-ফাংশনের মাধ্যমে ব্যাকগ্রাউন্ড / ফোরগ্রাউন্ড উভয় ক্ষেত্রেই এটি পরিচালনা করতে ক্লায়েন্টের উপর নির্ভর করে FirebaseMessagingService

এটি অফিশিয়াল ডক্স অনুসারে: https://firebase.google.com/docs/cloud-messaging/concept-options

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.