android जब ऐप बैकग्राउंड पर होता है या नहीं चल रहा होता है तो पुश नोटिफिकेशन गलत तरीके से काम करता है




service push-notification (2)

FCM के साथ आप https://fcm.googleapis.com/fcm/send पर भेजने के लिए एक POST पेलोड निर्दिष्ट करते हैं। उस पेलोड में आप data या notification कुंजी या दोनों को निर्दिष्ट कर सकते हैं।

यदि आपके पेलोड में केवल एक data कुंजी है, तो आपका ऐप सभी पुश संदेशों को स्वयं संभाल लेगा। उदाहरण के लिए, वे सभी आपके onMessageReceived हैंडलर को वितरित किए जाते हैं।

यदि आपके पेलोड में एक notification कुंजी है, तो आपका ऐप केवल पुश संदेशों को तभी हैंडल करेगा, जब आपका ऐप अग्रभूमि में सक्रिय हो /। यदि यह नहीं है (तो यह पृष्ठभूमि में है, या पूरी तरह से बंद है), एफसीएम आपके लिए notification कुंजी पेलोड में डाले गए मूल्यों का उपयोग करके आपके लिए अधिसूचना दिखा रहा है।

ध्यान दें कि कंसोल से भेजे गए नोट (जैसे फायरबेस कंसोल), वे हमेशा एक notification कुंजी शामिल करते हैं।

ऐसा लगता है कि आप अपने आप को FCM संदेशों को संभालना चाहते हैं ताकि आप अधिसूचना को थोड़ा और अधिक अनुकूलित कर सकें, इसलिए बेहतर होगा कि POST पेलोड में notification कुंजी को शामिल न करें, इसलिए सभी पुश संदेश आपके onMessageReceived वितरित किए onMessageReceived

आप इसके बारे में यहां और अधिक पढ़ सकते हैं:
उन्नत संदेश विकल्प
डाउनस्ट्रीम संदेश सिंटैक्स

https://code.i-harness.com

मैं पुश नोटिफिकेशन भेजने के लिए फायरबेस क्लाउड मैसेजिंग का उपयोग कर रहा हूं।

यहाँ मेरा FirebaseMessageService :

public class FireBaseMessageService extends FirebaseMessagingService {


@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    Log.e("TAG", "From: " + remoteMessage.getFrom());
    Log.e("TAG", "Notification Message Body: " + remoteMessage.getData().get("CardName")+"  :  "+remoteMessage.getData().get("CardCode"));
    sendNotification(remoteMessage.getNotification().getBody());
}


private void sendNotification(String messageBody) {
    Intent intent = new Intent(this, StartActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

    Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher_final)
            .setContentTitle("Notification")
            .setContentText(messageBody)
            .setTicker("Test")
            .setAutoCancel(true)
            .setDefaults(Notification.DEFAULT_SOUND)
            .setContentIntent(pendingIntent);

    NotificationManager notificationManager =
            (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);

        notificationManager.notify(0 /* ID of notification */, notificationBuilder.build());
    }
}

और FirebaseInstanceServer

public class FirebaseInstanceService extends FirebaseInstanceIdService {


@Override
public void onTokenRefresh() {
    // Get updated InstanceID token.
    String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.e("TAG", "Refreshed token: " + refreshedToken);

    // TODO: Implement this method to send any registration to your app's servers.
    sendRegistrationToServer(refreshedToken);

}

private void sendRegistrationToServer(String token) {


      // Add custom implementation, as needed.
        Log.e("TAG", "Refreshed token2: " + token);
    }
}

जो AndroidManifest में घोषित किया गया है:

<service
    android:name=".util.notifications.FireBaseMessageService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

<service
    android:name=".util.notifications.FirebaseInstanceService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

इसलिए मुद्दा यह है कि जब ऐप चल रहा है तो ticker को अच्छी तरह से दिखाया जाता है और नोटिफिकेशन डिफ़ॉल्ट साउंड के साथ आता है, लेकिन जब ऐप बैकग्राउंड में होता है या नहीं चल रहा होता है तो बिना किसी साउंड के नोटिफिकेशन आता है और स्टेटस बार में ticker नहीं दिखाया जाता है।
यह क्यों हो रहा है और मैं इसे कैसे ठीक कर सकता हूं?


मैंने यह समझने के लिए 2 सप्ताह बिताए कि मेरे एप्लिकेशन को डेटा संदेश क्यों नहीं मिल सकता है जब वह पृष्ठभूमि में है और जितना अजीब हो सकता है, मैं इस निष्कर्ष पर पहुंचा कि एंड्रॉइड-स्टूडियो 2.1.2 समस्या है!

अब मैं किसी भी FCM संदेश को पृष्ठभूमि अनुप्रयोग में प्राप्त नहीं कर सकता

https://github.com/firebase/quickstart-android/issues/89





firebase-cloud-messaging