2012-09-04 11 views
13

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

मैं के रूप में

Intent unregIntent = new Intent("com.google.android.c2dm.intent.UNREGISTER"); 
unregIntent.putExtra("app", PendingIntent.getBroadcast(this, 0, new Intent(), 0)); 
startService(unregIntent); 

कोड मिला है, लेकिन इस कोड डाल करने के लिए जहां हम हैं ..?

धन्यवाद।

+1

से अधिक जानकारी मिली: [जीसीएम से पंजीकरण कैसे करें] (http://developer.android।कॉम/गाइड/google/gcm/adv.html # unreg) –

+0

धन्यवाद। इसकी एक भयानक जानकारी – Sakthimuthiah

+0

इस SO उत्तर पर अधिक जानकारी: http://stackoverflow.com/a/28057615/3913366। –

उत्तर

21

अनइंस्टॉल करते समय आप जीसीएम से पंजीकरण रद्द नहीं कर सकते हैं, क्योंकि उपयोगकर्ता को एप्लिकेशन को अनइंस्टॉल करते समय कोई विधि नहीं कहा जाता है।

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

+2

वास्तव में? मैं ऐप को अनइंस्टॉल करने के बाद जीसीएम को नोटिफ़ को पुश करने के लिए HTTP का उपयोग कर रहा हूं, जीसीएम अभी भी इसका उत्तर देता है: {"multicast_id": XXXXXXXX, "सफलता": 1, "विफलता": 0, "canonical_ids": 0, "परिणाम": [{"message_id": "0: XXXXXXXXX"}]} क्या मुझे कॉन्फ़िगर करने के लिए कुछ याद आ रही है? – danisupr4

+1

मेरे प्रयोगों में, मैंने पाया है कि उपयोगकर्ता वास्तव में एप्लिकेशन को अनइंस्टॉल करने के 8 दिनों के बाद अनइंस्टॉल स्थिति अपडेट किया जाता है। समय भिन्न हो सकता है। –

1

आपको इसे अपने सर्वर पर देखना होगा। आप इसे एप्लिकेशन कोड से नहीं कर सकते हैं क्योंकि उपयोगकर्ता यह जानने का कोई तरीका नहीं है कि उपयोगकर्ता एप्लिकेशन को अनइंस्टॉल कर रहा है।

देखें: कैननिकल आईडी लागू करें। संदर्भ: https://developers.google.com/cloud-messaging/http#request

एक कैनोनिकल पंजीकरण आईडी को आपके आवेदन द्वारा अनुरोधित अंतिम पंजीकरण की आईडी माना जाता है। यह वह आईडी है जिसे डिवाइस को संदेश भेजते समय सर्वर का उपयोग करना चाहिए।

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

संदर्भ: https://stuff.mit.edu/afs/sipb/project/android/docs/google/gcm/adv.html#canonical

विहित आईडी 0 नहीं है, तो आप एक नकली पंजीकरण की है।

कहते हैं, उदाहरण के लिए, आप अपने डेटाबेस में 2 पंजीकरण है:

registration_A

registration_B

जब आप एक पुश सूचना भेजने के लिए, अपने सर्वर कुछ है कि इस तरह दिखता है के साथ जवाब मिल जाएगा:

{"multicast_id":########,"success":1,"failure":0,"canonical_ids":1,"results": 
[{"registration_id":"new_id_registration_id","message_id":"0:########"}]} 
{"multicast_id":######### ,"success":1,"failure":0,"canonical_ids":0,"results":[{"message_id":"0:################"}]} 

इस डेटा को एक सरणी में स्टोर करें। ध्यान दें कि पहले व्यक्ति के पास "canonical_ids" है: 1। इसका मतलब है कि एक डुप्लिकेट था। तो यह जानने के लिए कि आपके डेटाबेस में कौन सा रिकॉर्ड पुराना है। बस उपरोक्त में "पंजीकरण_आईडी" की खोज करें और सूचकांक मान को सहेजें। यह सूचकांक मान आपके डेटाबेस में पुराने रिकॉर्ड को इंगित करता है।

उपर्युक्त उदाहरण में, पंजीकरण_ए पुराना पंजीकरण_आईडी होगा।

अपने डेटाबेस से सभी रिकॉर्ड प्राप्त करें। फिर इसे पुनर्प्राप्त सूचकांक मान के आधार पर हटा दें। या आप इसे अपडेट कर सकते हैं। यह इस बात पर निर्भर करता है कि आप अपना डेटाबेस कैसे सेट अप करते हैं।

शुभकामनाएं!

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

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