2016-02-07 6 views
5

मैं एक Android GCM क्लाइंट ऐप here स्थापित करने के लिए दिए गए निर्देशों का पालन किया है का उपयोग करते हुए अधिसूचना प्रदर्शन और टोन अनुकूलित करने के लिए कैसे, और इस अंश के साथ विशेष रूप से एक समस्या है:जब GCMReceiver और GcmListenerService

है कि एक का विस्तार मौजूदा ऐप के लिए WakefulBroadcastReceiver, Google जीसीएमआरसीवर और जीसीएम लिस्टनर सेवा में माइग्रेट करने की अनुशंसा करता है। विस्थापित करने के लिए: ऐप्लिकेशन मेनिफेस्ट में, अपने GcmBroadcastReceiver साथ "com.google.android.gms.gcm.GcmReceiver" की जगह है, और वर्तमान सेवा घोषणा है कि नए GcmListenerService को IntentService फैली की जगह से BroadcastReceiver कार्यान्वयन निकालें अपने ग्राहक कोड Refactor वर्तमान IntentService सेवा कार्यान्वयन GcmListenerService

अधिकांश उदाहरण है कि मैं GCM कार्यान्वयन के लिए देखा है उपयोग करने के लिए, एक वर्ग है कि WakefulBroadcastReceiver फैली का उपयोग करें। जैसे this one। जब आप ऐसा करते हैं, तो आपको NotificationManager का उपयोग करने और अधिसूचना आइकन, ध्वनि इत्यादि को अनुकूलित करने का अवसर मिलता है। हालांकि, अगर आप Google की सलाह का पालन करते हैं, तो मुझे यकीन नहीं है कि अधिसूचनाओं को कैसे अनुकूलित किया जाए। Google द्वारा सुझाए गए अनुसार GcmListenerService का उपयोग करने वाले अधिकांश उदाहरण, बस onMessageReceived विधि को ओवरराइड करें। लेकिन उस विधि को केवल तभी बुलाया जाता है जब अधिसूचना प्राप्त होने पर एप्लिकेशन पहले ही अग्रभूमि में हो, या जब उपयोगकर्ता अधिसूचना पर क्लिक करता है। अधिसूचना ध्वनि को अनुकूलित करने के लिए यह विधि सही जगह नहीं है। उस विधि को बुलाए जाने से पहले ध्वनि पहले ही खेला जा चुका है।

तो, अगर मैं सूचना ध्वनि अनुकूलित करने के लिए की जरूरत है, मैं शायद एक अलग पद्धति GcmListenerService में ओवरराइड करना चाहिए, लेकिन कोई प्रलेखन कि जो एक से पता चलता है। here वर्णित sound विशेषता का उपयोग करने का एक और विकल्प है। लेकिन फिर आपको एप्लिकेशन की res/raw निर्देशिका में ध्वनि फ़ाइलों को बंडल करना होगा। यह गलत लगता है। मैं सिर्फ ध्वनि, थीम इत्यादि प्रदान की गई प्रणाली का उपयोग करूंगा

विचार?

+0

फिर भी [एक और उदाहरण] (https://github.com/codepath/android_guides/wiki/Google-Cloud-Messaging) जो दावा है 'GcmListenerService.onMessageReceived()' हर बार एक पुश सूचना प्राप्त होता है कहा जाता है। यह मेरे लिए बिल्कुल सही नहीं रहा है (यदि ऐप अग्रभूमि में है तो इसे केवल पुश नोटिफिकेशन को संभालने के लिए बुलाया जाता है)। – Shiprack

+0

मुझे निश्चित रूप से मेरे कार्यान्वयन में कुछ याद आ रहा है। [यह] (https://github.com/googlesamples/google-services/blob/master/android/gcm/app/src/main/java/gcm/play/android/samples/com/gcmquickstart/MyGcmListenerService.java) Google से नमूना ऐप लगभग समान है। यह भी तात्पर्य है कि 'मैसेज रिसीव() 'को पुश अधिसूचना प्राप्त होने पर हर बार बुलाया जाएगा, चाहे ऐप अग्रभूमि में है या नहीं। लेकिन यह अभी भी मुझे परेशान करता है कि नोटिफिकेशन अभी भी प्रदर्शित होते हैं और ध्वनि अलर्ट अभी भी खेला जाता है भले ही मैं 'मैसेज रिसीव() 'ओवरराइड नहीं करता हूं। और आधार कार्यान्वयन खाली है। – Shiprack

उत्तर

5

@SamStern मेरे लिए इस सवाल का जवाब है, जब मैं एक Google Samples github wiki पर पोस्ट किया (color और icon करने के लिए अपने सीमित हालांकि): तो वहाँ

इन कोई मध्यवर्ती प्रसंस्करण के साथ एक अधिसूचना उत्पन्न करने के उद्देश्य से कर रहे हैं -

सूचना संदेश: two kinds of GCM messages कर रहे हैं आवेदन द्वारा। वे केवल पर मैसेज पर पहुंच गए हैं यदि ऐप चल रहा है।

डेटा संदेश - इन्हें ऐप की संदेश सेवा में चुपचाप डेटा पास करने का इरादा है। उन्होंने मैसेज पर क्लिक किया, भले ही ऐप पृष्ठभूमि में हो।सेवा सामान्य सिस्टम अधिसूचना एपीआई का उपयोग कर अधिसूचना उत्पन्न करने का चयन कर सकती है, या यह चुपचाप संदेश को संभालने का चयन कर सकती है।

मेरे टेकअवे है कि यदि एक ग्राहक अनुप्रयोग अनुकूलित करने के लिए कैसे एक अधिसूचना उपयोगकर्ता के लिए प्रस्तुत किया जाता है चाहता है (यानी अधिसूचना ट्रे में चिह्न बदलने, एक ध्वनि के आधार एप्लिकेशन की साझा वरीयताओं में खेलते हैं, ध्वनि सेटिंग्स पर आदि) है , तो हमें सर्वर को "अधिसूचना संदेश" के बजाय "डेटा संदेश" भेजना होगा। Here's Google नमूने प्रोजेक्ट में कार्यान्वयन, डेटा डेटा को संभालने का तरीका दिखा रहा है।

0

विकल्प है कि मैं ही संभव देख सकते हैं दोनों XMPP और HTTP कनेक्शन सर्वर द्वारा नियंत्रित किया जाता है जो पेलोड के माध्यम से है (जैसा कि आप इंगित)। मुझे यकीन नहीं है कि यह आपके हिस्से में क्यों गलत लगता है, क्योंकि सर्वर पेलोड में sound डेटा को परिभाषित करेगा और क्लाइंट को केवल संबंधित संपत्ति फ़ोल्डर पर मौजूद फ़ाइल की आवश्यकता होगी।

प्रदर्शन अनुकूलन भी अधिसूचना पेलोड के माध्यम से किया जा सकता है

+0

क्या यह ऐप को बहुत सारी नकल की तरह प्रतीत नहीं होता है यदि प्रत्येक ऐप को अपनी संपत्तियों में ध्वनि फ़ाइलों को बंडल करना पड़ता है? उदाहरण के लिए, जब मैं जीमेल ऐप पर जाता हूं और खाता विशिष्ट सेटिंग्स पर क्लिक करता हूं, और फिर अधिसूचनाओं पर क्लिक करता हूं, और फिर ध्वनि, मैं [यह] (https://www.evernote.com/l/AcnKg5Pc615PWYn1EPUlj4qtXDchzFxpzrA) रिंगटोन की सूची देखता हूं। जब मैं सिस्टम सेटिंग्स पर जाता हूं तो यह रिंगटोन की सूची के समान होता है। मुझे यकीन है कि जीमेल ऐप इन ध्वनि फ़ाइलों को बंडल नहीं करता है। – Shiprack

+0

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

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