7

एप्लिकेशन फोनगैप में है। मैं पुश अधिसूचना सुविधा का उपयोग कर रहा हूं https://github.com/marknutter/GCM-Cordovaजीसीएम कॉर्डोवा पुश अधिसूचना काम नहीं कर रही है जब ऐप नहीं चल रहा है

मैंने पूरी सुविधा लागू की और कल तक ठीक काम किया। जब मैंने पिछले दिन ऐप की जांच की, तो ऐप चालू नहीं होने पर पुश अधिसूचना काम नहीं कर रही है। मेरे डिवाइस पर सभी सूचनाएं प्राप्त हो रही हैं, संदेश पर क्लिक करने से ऐप खुलता है।

लेकिन नियंत्रण जावास्क्रिप्ट भाग पर प्राप्त नहीं हो रहा है जहां संदेश अधिसूचना संभालती है। फ़ाइल GCMIntentService.java से

कोड: संदेश कब प्राप्त हुआ

JSONObject json; 
json = new JSONObject().put("event", "message"); 

json.put("message", extras.getString("message")); 
json.put("link", extras.getString("link")); 

Log.v(ME + ":onMessage ", json.toString()); 

GCMPlugin.sendJavascript(json); 
// Send the MESSAGE to the Javascript application 

इस कोड काम करेंगे। लेकिन उस समय, ऐप नहीं चल रहा है।

जब मैं अधिसूचना संदेश पर क्लिक करता हूं, तो ऐप सामान्य रूप से खुलता है, संदेश ईवेंट पंजीकृत नहीं करता है; इस प्रकार पुश अधिसूचना को संभालने के लिए जावास्क्रिप्ट में नियंत्रण नहीं मिल रहा है।

https://github.com/marknutter/GCM-Cordova/blob/master/assets/www/CORDOVA_GCM_script.js

नोट: CORDOVA_GCM_script.js के लिए

कोड पर उपलब्ध है यह ठीक काम करता है जब अनुप्रयोग चल रहा है।

संपादित करें: अधिसूचना कभी कभी चलाता है। जावास्क्रिप्ट को संदेश घटना यादृच्छिक रूप से मिल रही है।

संपादित करें 2:

मैं निश्चित रूप से समस्या को जानते हैं।

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

क्या मैं कुछ गलत कर रहा हूं?

+0

पुश अधिसूचना की बात है कि यह पृष्ठभूमि में चलता है जब अपने अनुप्रयोग नहीं चल रहा है है। इसलिए, यदि आपका ऐप नहीं चल रहा है और इस मामले में, यह वेबव्यू है, मुझे नहीं लगता कि यह मूल पक्ष से कुछ भी प्राप्त करेगा क्योंकि JVM पृष्ठभूमि में वेबव्यू नहीं चलाता है जो बताता है कि आपका जेएस भाग क्यों नहीं करता है ' जब ऐप नहीं चल रहा है तो टी चलाएं। जब आपको पुश अधिसूचना मिलती है तो आपको साझा प्राथमिकताओं या अधिसूचना में अधिसूचना डेटा संग्रहीत करने पर विचार करना चाहिए; जांचें कि हर बार आपका ऐप लॉन्च हो जाता है ताकि आप इसका प्रतिक्रिया दे सकें। – praneetloke

+0

यह एक आम कार्यान्वयन है और मुझे अन्य द्वारा सूचित कोई समस्या नहीं मिली, जो मुझे भ्रमित कर रहा है .. – IvenMS

उत्तर

3

मुझे एक आसान समाधान मिला है। यह shouldn

while (GCMPlugin.gwebView == null || GCMPlugin.gwebView.webView == null || !GCMPlugin.gwebView.webView.isEnabled()) { 
    // Wait until webView is enabled 
} 
GCMPlugin.sendJavascript(json); 

यह मेरे लिए काम करता ... शायद क्रम अनंत लूप को रोकने के लिए भी समय समाप्त जोड़ने के लिए एक अच्छा choise है (: GCMIntentService में, बस से पहले जावास्क्रिप्ट चेक भेज अगर वेबव्यू भरी हुई है 'टी हो लेकिन ...)

डेविड

3

IvenMS - मुझे भी एक ही समस्या है इसलिए आप केवल एक ही नहीं हैं। अगर मैं praneetloke को सही ढंग से समझता हूं, तो पुश नोटिफिकेशन फ़ोनगैप ऐप्स के साथ काम नहीं करेगा जो वर्तमान में चल रहे नहीं हैं।

+0

ऐप नहीं चलाने की तरह कुछ भी नहीं है। ऐप पृष्ठभूमि में हर समय चलाएगा, या इसके उदाहरण चलेंगे। जब संदेश सर्वर से धक्का देते हैं, तो एप्लिकेशन नियंत्रण प्राप्त करेगा और जावाकोड में संदेश पंजीकृत करेगा। मैं जावाकोड के साथ लॉगिंग देख सकता हूं। कोड जावास्क्रिप्ट को भी आमंत्रित करने का प्रयास करता है। उस समय, वेबदृश्य लोड नहीं होता है। अधिसूचना संदेश पर क्लिक करने पर, ऐप लोड होगा और इसलिए वेबदृश्य। लेकिन उस समय, सूचना घटना (जिसे नोटिस प्राप्त करने के समय जावाकोड द्वारा शुरू किया गया है) नहीं आ जाएगा। – IvenMS

4

जीसीएम-कॉर्डोवा प्लगइन का उपयोग करना अगर एप्लिकेशन नहीं चल रहा है तो अधिसूचना सही तरीके से संभाल नहीं पाएगी। ऐसा इसलिए है क्योंकि उस समय वेबव्यू लोड नहीं किया गया था जब प्लगइन जावास्क्रिप्ट शुरू करता था।

समाधान:

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

अंत में दो प्लगइन - जीसीएम-कॉर्डोवा और कस्टम प्लगइन की मदद से इस समस्या को हल करने में सक्षम।

+2

यह मेरे लिए समस्या का समाधान नहीं करेगा क्योंकि संदेश में भेजे गए डेटा का उपयोग फ़ोन पर अलार्म सेट करने के लिए किया जाता है और उपयोगकर्ता ऐप को फिर से नहीं देख सकता है। – BallisticPugh

+0

यदि आप एक कस्टम प्लगइन बना रहे हैं, तो वह उस समय चलाएगा जब अधिसूचना आती है (या उपयोगकर्ता नोटिस पर क्लिक करता है)। आप कस्टम प्लगइन कोड के भीतर अलार्म कोड सेट कर सकते हैं। मैं अपना कोड साझा करना चाहता हूं, लेकिन मैं एक आईटी कंपनी के लिए काम कर रहा हूं और कोड कड़ाई से संरक्षित है। – IvenMS

+0

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

संबंधित मुद्दे