2012-12-05 13 views
5

मेरा ऐप gcm का उपयोग करता टोकन। प्रत्येक बार जब उपयोगकर्ता लॉग इन करता है, तो नया जीसीएम टोकन पंजीकृत होता है और मेरे तीसरे पक्ष सर्वर को भेजा जाता है। प्रत्येक बार उपयोगकर्ता लॉग आउट करता है, जीसीएम टोकन अनियंत्रित है। बिना किसी समस्या के यह woks।अमान्य सभी gcm

समस्या यह है कि जब यह परीक्षण करने के लिए आता है, परीक्षक loging बाहर के बिना एप्लिकेशन को अनइंस्टॉल कर सकते हैं, और फिर वापस फिर से स्थापित करने और अन्य खाते में लॉग है। फिर वह दो अलग-अलग खातों से दो जीसीएम प्राप्त करेगा। इसका मतलब है कि वह खाता जीएसीएस के लिए निजी जीसीएमएस प्राप्त करेगा जो वर्तमान में लॉग इन नहीं है। यह कभी-कभी लाइव उपयोगकर्ताओं के साथ भी हो सकता है।

जीसीएम दस्तावेज बताता है कि यदि एप्लिकेशन अनइंस्टॉल किया गया है तो जीसीएम टोकन कभी-कभी समाप्त कर सकते हैं। अभ्यास में, यह कभी नहीं होता है।
http://developer.android.com/google/gcm/gcm.html

GCM प्रलेखन यह भी कहा गया है कि आप

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

को क्रियान्वित करते हुए GCM टोकन अपंजीकृत कर सकते हैं लेकिन यह विधि काम करने के लिए यदि आप इसे पुनः स्थापित करने के बाद की कोशिश प्रतीत नहीं होता। मुझे कॉलबैक प्राप्त होता है जो मुझे बताता है कि टोकन अनियंत्रित है, लेकिन जीसीएम टोकन अभी भी ठीक काम करता है।

मेरा प्रश्न है: क्या आप सुनिश्चित कर सकते हैं आपके आवेदन के लिए कोई वैध gcm टोकन देखते हैं कि? मैं वास्तव में एप्लिकेशन के दौरान सभी मौजूदा टोकन को अनियंत्रित करना चाहता हूं, या कम से कम उन्हें फोन सेटिंग्स से रीसेट कर दूंगा।

+0

अरे एलेक्सी, क्या समाधान आप मैं क्या मोहम्मद हाफ़िज सुझाव किया –

+0

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

+1

क्या होता है यदि कोई उपयोगकर्ता दो डिवाइसों में लॉग इन होता है। मुझे डर है कि दो उपकरणों को इस समाधान के साथ जीसीएम संदेश प्राप्त नहीं होंगे। या क्या मैं कुछ न कुछ भूल रहा हूं। –

उत्तर

1

मेरा मानना ​​है कि जब आपके सर्वर अवैध पंजीकरण आईडी को एक संदेश भेज आपको कोई त्रुटि प्राप्त करेंगे। मुझे लगता है कि आप अपने डेटाबेस/डेटास्टोर से इन रजिस्ट्रेशन आईडी को हटाने के लिए इस त्रुटि को पकड़ सकते हैं।

डॉक ( canonical id) से भी

:

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

अपने अनुप्रयोग के लिए
+0

मैं GCM में नया हूँ, इसलिए मैं rthis – rds

+0

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

2

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

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