जहां तक मैं कह सकता हूं कि कोई प्लगइन्स नहीं है जो आपको आवश्यकतानुसार पूरा करता है। हालांकि ..
मैं मज़बूती से एक दूरस्थ अधिसूचना, प्राप्त कर सकते हैं एक स्थानीय एक बनाते हैं, और प्रदर्शित कि, और फिर 'समाप्त हो' या 'हटाने' का एक क्षेत्र के साथ एक नोटिफिकेशन के जवाब में है, इसलिए एक स्थानीय अधिसूचना हटाना कि मेरे उपयोगकर्ताओं को जानकारी का डुप्लिकेट नहीं दिख रहा है?
अधिकांश प्लगइन ऐप की स्थिति का पता लगाते हैं और डिफ़ॉल्ट रूप से आपके द्वारा धकेलने वाली जानकारी के साथ होमस्क्रीन पर रिमोट अधिसूचना जोड़ते हैं, क्या इससे बचने का कोई तरीका है?
हां, silent notifications का उपयोग करके और स्वयं द्वारा स्थानीय अधिसूचना का निर्माण करके।
एक परियोजना के लिए मैं काम कर रहा हूं, मैंने प्लगइन cordova-plugin-fcm
को स्थानीय (मांग पर स्थानीय) अधिसूचनाओं को खारिज करने/प्रदर्शित करने के लिए समर्थन जोड़ने के लिए, कॉर्डोवा ऐप में कई अधिसूचनाएं भेज दी हैं, और कुछ पीआर जो अभी तक शामिल नहीं हैं। इसके अलावा, मैं प्रदर्शित होने के पूर्ण नियंत्रण के लिए स्वयं द्वारा अधिसूचना का निर्माण करता हूं। आप कुछ विचार पाने के लिए कोड को देख सकते हैं।सबसे पहले
, मैं अनुप्रयोग है, जो एंड्रॉयड से प्रदर्शित नहीं किया जाता करने के लिए एक "मूक" धक्का भेजें::
संक्षेप में यह इस तरह काम करता है
{
"content_available": true, // IMPORTANT: For Apple -> content-available: 1, for firebase -> content_available: true
"priority": "high",
"to": "/topics/all", // or to a fcm token
"data"{
"title": "My title", // this implies that you display the notification by yourself
"body": "My body", // this implies that you display the notification by yourself
"type": "NEW_USER_MESSAGE", // only relevant to this project
"userId": "1", // only relevant to this project
"timestamp", "150000000"
}
}
नोट: यदि पेलोड "notification": {}
है आइटम, एंड्रॉइड इसे सिस्टम ट्रे पर प्रदर्शित करेगा (यदि ऐप पृष्ठभूमि में है)। https://firebase.google.com/docs/cloud-messaging/concept-options#notifications_and_data_messages
दूसरा, जब पुश ऐप (onMessageReceived() में) आता है, तो मैं स्थानीय अधिसूचना बनाता हूं, इसे एक टैग और आईडी निर्दिष्ट करता हूं। इस तरह आप इसे बाद में खारिज करने के लिए उपयोग कर सकते हैं। उदाहरण के लिए, आप TAG "NEW_USER_MESSAGE" और आईडी 1 के साथ एक स्थानीय अधिसूचना बना सकते हैं (संदेश की स्थिति का निरंतर संकेत, या उदाहरण के लिए उपयोगकर्ता आईडी)। इसके अलावा, Android will replace notifications with the same TAG and ID, इसलिए यह स्वचालित रूप से अधिसूचनाओं को प्रतिस्थापित करने का एक और तरीका है (उदाहरण के लिए यदि आप एक सामान्य संदेश भेजते हैं, जैसे "नया अपडेट उपलब्ध")। इस तरह से यह कर के
public static String TYPE_NEW_USER_MESSAGE = "NEW_USER_MESSAGE";
public static String TYPE_USER_LEFT_ROOM = "USER_LEFT_ROOM";
NotificationManager notificationManager =
(NotificationManager) _ctx.getSystemService(Context.NOTIFICATION_SERVICE);
// based in the type of the message you've received, you can stylize the notification
if (type.equals(TYPE_USER_LEFT_ROOM)){
notificationBuilder.setColor(Color.RED);
notificationBuilder.setLights(Color.RED, 1000, 500);
}
else if (type.equals(TYPE_NEW_USER_MESSAGE)){
notificationBuilder.setColor(Color.BLUE);
notificationBuilder.setLights(Color.BLUE, 1000, 1000);
}
Notification n = notificationBuilder.build();
notificationManager.notify(type, userId, n);
एक लाभ यह है, आप अधिसूचना प्रदर्शित करने के लिए का पूरा नियंत्रण है है, तो आप यह चंद्रमा की झलक की तरह आप चाहते हैं कर सकते हैं।
आप की अवधि समाप्त हो गए संदेशों को छोड़ना चाहते हैं, तो आप कर सकते हैं check out the elapsed time between the sent timestamp and the current timestamp:
java.util.Date now = new java.util.Date();
java.util.Date sent_timestamp = new java.util.Date(Long.valueOf(timestamp.toString()));
final Long elapsed_time = ((now.getTime() - sent_timestamp.getTime())/1000);
Log.d(TAG, "New message. sent " + elapsed_time + "s ago");
तीसरा, जब एक अधिसूचना पर उपयोगकर्ता क्लिक एंड्रॉयड अपने एप्लिकेशन लॉन्च होगा, और प्लगइन करने के लिए पुश संदेश का पेलोड भेज देंगे कॉर्डोवा व्यू (onNotificationReceived()
)।
अपने अनुप्रयोग खोला जाता है और आप पुश संदेश प्राप्त हुआ है ही, आप उसे प्लगइन करने के लिए कोई नया कार्य जोड़ने खारिज कर सकते हैं:
onNotificationReceived(data){
if (data.wasTapped === true){
if (data.type === 'NEW_USER_MESSAGE'){
FCMPlugin.dismissNotification(NEW_USER_MESSAGE, 1);
}
}
}
एंड्रॉयड कार्रवाई:
else if (action.equals(ACTION_DISMISS_NOTIFICATION)) {
cordova.getThreadPool().execute(new Runnable() {
public void run() {
try{
Log.d(TAG, "FCMPlugin dismissNotificaton: " + args.getString(0)); //tag
NotificationManager nManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
nManager.cancel(args.getString(0)/*NEW_USER_MESSAGE*/, args.getInt(1) /*1*/);
Log.d(TAG, "FCMPlugin dismissNotificaton() to remove: " + id); //tag
callbackContext.success();
}catch(Exception e){
callbackContext.error(e.getMessage());
}
}
});
https://github.com/TrustedCircles/cordova-plugin-fcm/blob/master/src/android/FCMPlugin.java#L286
और कॉर्डोवा ऐप से अवगत विधि:
https://github.com/TrustedCircles/cordova-plugin-fcm/blob/master/www/FCMPlugin.js#L65
आप रिमोट अधिसूचना को स्थानीय अधिसूचना में कैसे परिवर्तित करते हैं? – Pritish