2014-05-17 12 views
6

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

उत्तर

5

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

विहित आईडी

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

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

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

(Source)

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

+2

एरान, ऐसा लगता है कि आप जीसीएम से संबंधित कुछ भी पूछने वाले व्यक्ति हैं: मैंने आपके समाधान में थोड़ा सा संशोधन किया है डिवाइस के regid के साथ सर्वर पर अद्वितीय आईडी (उपयोगकर्ता नाम)। अगर मैं गलत हूं तो मुझे सही करें, लेकिन मुझे ठीक होना चाहिए क्योंकि मैं केवल प्रति उपयोगकर्ता एक regid की अनुमति दे रहा हूं, और मैं तदनुसार अपडेट कर सकता हूं। हालांकि यह अभी भी मानता है कि डिवाइस * हमेशा * सबसे हालिया (और मान्य) regid होगा। क्या यह मानना ​​सुरक्षित है? – user1164937

+0

दूसरा प्रश्न: क्या कोई अन्य * किनारे के मामले हैं * मुझे इसके अलावा, इसके बारे में पता होना चाहिए और यह सुनिश्चित करने के लिए कि यदि उपयोगकर्ता उपलब्ध कराया गया है तो मैं कैननिकल आईडी द्वारा उपयोगकर्ता के रेजीड को अपडेट कर सकता हूं? अग्रिम में धन्यवाद। – user1164937

+0

मैं यह उल्लेख करना भूल गया था कि मैं उसी प्रक्रिया का उपयोग कर रहा हूं जैसे Google के उदाहरण जीसीएम ऐप को regid के लिए पंजीकरण करने के लिए - जब साझा संदर्भों में कोई नहीं होता है। (मैं स्पैम के लिए क्षमा चाहता हूं) – user1164937

0

@Eran हमारे पास पुराने पंजीकरण आईडी को हटाने या कुंजी और कैननिकल आईडी की स्थिति के साथ अद्यतन करने के लिए दो विकल्प हैं। मैं अपडेट करना पसंद करता हूं ... आप मेरा जवाब कोड देख सकते हैं मैंने जवाब दिया है Steps to Update Canonical Ids

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