2017-07-31 23 views
11

में पुश अधिसूचना (फायरबेस) से एक स्थानीय अधिसूचना बनाना, मैं आयनिक फ्रेमवर्क का उपयोग कर एक एप्लिकेशन बना रहा हूं जो पुराने पुराने फेसबुक मैसेंजर के समान चैट फ़ंक्शन लागू करता है, जिसमें मैं उपयोगकर्ताओं को सूचित करना चाहता हूं एक चैट संदेश का, लेकिन अगर वे इसे कहीं और देखते हैं, तो मैं उनकी होम स्क्रीन से अधिसूचना को हटाना चाहता हूं।कॉर्डोवा/आयनिक

मैं पुश नोटिफिकेशन के लिए बैक-एंड के रूप में फ़ायरबेस का उपयोग कर रहा हूं (हालांकि मुझे लगता है कि बदला जा सकता है)।

मुझे पता है कि आप रिमोट अधिसूचना समाप्त नहीं कर सकते हैं, लेकिन मुझे बताया गया है कि आप समाप्त हो सकते हैं + स्थानीय अधिसूचना को हटा दें, इसलिए मेरा प्रश्न है - क्या मुझे विश्वसनीय रिमोट अधिसूचना मिल सकती है, स्थानीय बना सकते हैं, और उस पर प्रदर्शित करें, और उसके बाद 'समाप्ति' या 'निकालें' के दायरे के साथ अधिसूचना के जवाब में, स्थानीय अधिसूचना हटाएं ताकि मेरे उपयोगकर्ताओं को जानकारी का डुप्लिकेट न दिखाई दे?

अधिकांश प्लगइन ऐप की स्थिति का पता लगाते हैं और डिफ़ॉल्ट रूप से आपके द्वारा धकेलने वाली जानकारी के साथ होमस्क्रीन पर रिमोट अधिसूचना जोड़ते हैं, क्या इससे बचने का कोई तरीका है?

धन्यवाद दोस्तों।

संपादित करें: - स्थानीय अधिसूचना: http://ionicframework.com/docs/native/local-notifications/ - Firebase मेघ संदेश: https://github.com/fechanique/cordova-plugin-fcm

+1

आप रिमोट अधिसूचना को स्थानीय अधिसूचना में कैसे परिवर्तित करते हैं? – Pritish

उत्तर

4

कॉर्डोबा/आयनिक में सूचनाओं के साथ ही मुश्किल सा सूचना को प्राप्त करने और Android कोड ट्रिगर जे एस हिस्सा है।

मैंने https://github.com/phonegap/phonegap-plugin-push लाइब्रेरी और इसकी सुंदर सीधी आगे का उपयोग किया।

जेएस (कॉर्डोवा/आयनिक) में अधिसूचनाएं प्राप्त होने पर कॉलबैक होता है, इसे एंड्रॉइड में स्थानीय रूप से अधिसूचनाएं प्रदान करने के लिए इसका उपयोग करें।

पीएस: बेसल का जवाब आपको बताता है कि आपकी सूचनाओं को कैसे साफ़ किया जाए, इसलिए मैंने उस बिट को छोड़ने का फैसला किया।

5

जहां तक ​​मैं कह सकता हूं कि कोई प्लगइन्स नहीं है जो आपको आवश्यकतानुसार पूरा करता है। हालांकि ..

मैं मज़बूती से एक दूरस्थ अधिसूचना, प्राप्त कर सकते हैं एक स्थानीय एक बनाते हैं, और प्रदर्शित कि, और फिर 'समाप्त हो' या 'हटाने' का एक क्षेत्र के साथ एक नोटिफिकेशन के जवाब में है, इसलिए एक स्थानीय अधिसूचना हटाना कि मेरे उपयोगकर्ताओं को जानकारी का डुप्लिकेट नहीं दिख रहा है?

अधिकांश प्लगइन ऐप की स्थिति का पता लगाते हैं और डिफ़ॉल्ट रूप से आपके द्वारा धकेलने वाली जानकारी के साथ होमस्क्रीन पर रिमोट अधिसूचना जोड़ते हैं, क्या इससे बचने का कोई तरीका है?

हां, 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