2014-11-03 9 views
35

मैं अपने जीसीएम कोड का परीक्षण करने में सफल हूं।जीसीएम 'त्रुटि: पंजीकृत नहीं'

लेकिन ठीक उसी कोड, मैं GCM धक्का नहीं मिलता है और मिल गया हो सकता है:

GCM त्रुटि: पंजीकृत नहीं।

+3

अपर्याप्त स्पष्टीकरण के साथ आपकी सहायता करना लगभग असंभव है। –

+1

@ टी-डी मुझे इसके लिए खेद है ... मैंने पहले से ही उस प्रश्न को ठीक कर दिया है, आपकी ईमानदारी के लिए धन्यवाद! – LKM

उत्तर

46

GCM प्रतिसाद Not Registered साधन निम्नलिखित "यदि यह NotRegistered है, आप अपने सर्वर डेटाबेस से पंजीकरण आईडी को दूर करना चाहिए, क्योंकि आवेदन डिवाइस से अनइंस्टॉल किया गया था या यह एक प्रसारण रिसीवर com.google.android प्राप्त करने के लिए कॉन्फ़िगर नहीं है। c2dm.intent.RECEIVE इरादों। " documentation से। यह जांचें कि आपको यह त्रुटि किस स्थिति में मिलती है, जब डिवाइस से ऐप अनइंस्टॉल किया जाता है या आप AndroidManifest में गलत प्रसारण रिसीवर का वर्णन करते हैं। आप my test GCM server के साथ अपनी जीसीएम कार्यक्षमता का परीक्षण कर सकते हैं। उम्मीद है, यह आपकी मदद करता है।

+0

क्या आप कृपया मुझे बता सकते हैं कि सर्वर किनारे पर कौन से आईडी अनियंत्रित हैं, ताकि मैं उन्हें अपने डीबी से हटा सकूं। –

+0

@ डीबी निश्चित रूप से, सर्वर पर अपने डेटाबेस से ** पंजीकरण आईडी ** को हटाने की आवश्यकता होने पर केवल एक ही तरीका है। जीसीएम सर्वर से "NotRegistered" त्रुटि प्राप्त करने का अर्थ है कि पंजीकरण_आईडी जिसे आप उपयोग करने का प्रयास करते हैं वह वैध नहीं है और इसे हटाया जाना चाहिए। इसके अलावा आपका सर्वर जीसीएम से ** cannonical_id ** प्रतिक्रिया को संसाधित करने के लिए तैयार होना चाहिए। मैंने समझाया कि ** cannonical_id ** का अर्थ है http://stackoverflow.com/questions/26826869/regarding-canonical-ids-in-gcm-google-cloud-messaging/26827470#26827470 – Samik

+0

@ डीबी इसके अलावा आप अपने निदान का निदान भी कर सकते हैं ** पंजीकरण_आईडी ** मेरे टेस्ट पुश सर्वर के माध्यम से http://1-dot-sigma-freedom-752.appspot.com/gcmpusher.jsp – Samik

1

एक Google खाता एंड्रॉइड 4.0.4 या उससे कम वाले डिवाइसों पर एक आवश्यकता है। http://developer.android.com/google/gcm/gcm.html

आपको अपनी मेनिफेस्ट फ़ाइल में <uses-permission android:name="android.permission.GET_ACCOUNTS" /> भी जोड़ना चाहिए।

+0

मेरे पास पहले से ही है ... – LKM

2

मुझे यह त्रुटि थी जब मेरे पास मैनिफेस्ट फ़ाइल में एप्लिकेशन के बाहर जीसीएम रिसीवर था। रिसीवर को एप्लिकेशन स्कोप में ले जाया गया और सब कुछ काम किया। अब एक बहुत खुश बनी।

<application> 
... 
<receiver> 
... 
</receiver> 
... 
</application> 
1

मैं GCM के लिए वर्ष पदावनत कोड का उपयोग किया गया था:

InstanceID instanceID = InstanceID.getInstance(this); 
      String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId), 
        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null); 

मैं एक ही त्रुटि हो रही थी और यह था:

if (gcm == null) { 
       gcm = GoogleCloudMessaging.getInstance(this); 
      } 
      String regId = gcm.register(SENDER_ID); 
      msg = "Device registered, registration ID=" + regId; 

और जब नया तरीका करने के लिए स्विच करने की कोशिश कर दो ठोस दिनों के लिए मुझे पागल गाड़ी चलाओ।

पुस्तक में सबकुछ करने की कोशिश करने के बाद, यह तय किया गया कि यह डेवलपर्स कंसोल में जीसीएम को अक्षम कर रहा है, इसे फिर से सक्षम कर रहा है, फिर यहां जा रहा है: https://developers.google.com/mobile/add मेरे एंड्रॉइड ऐप के लिए एक नई google-services.json फ़ाइल जेनरेट करने के लिए।

यह भी ध्यान दें, RegistrationIntentService आपके पैकेज की जड़ पर होना चाहिए या यह काम नहीं करेगा! (एंड्रॉइड में जीसीएम कार्यान्वयन के लिए यह नमूना देखें: https://github.com/google/gcm)

आशा है कि इससे किसी की मदद मिलेगी क्योंकि मैंने इस पर दिन खो दिए हैं !!!! > <

17

यदि आप परीक्षण के लिए डिवाइस का उपयोग कर रहे हैं, तो आपको टोकन प्राप्त करने से पहले इंस्टेंस आईडी को हटाने की आवश्यकता है और फिर से परीक्षण करने की आवश्यकता है क्योंकि एक बार जब आप अपने एपीके को ओवरराइट करते हैं तो यह इंस्टेंस आईडी को डी-रजिस्ट्रार करता है और आपको उस रजिस्ट्रारर्ड त्रुटि मिलती है। तो अपने RegisterIntentService कक्षा में, onHandleIntent समारोह में निम्न कार्य करें:

InstanceID instanceID = InstanceID.getInstance(this); 
try 
{ 
    instanceID.deleteInstanceID(); 
} catch(IOException e) 
{ 
    e.printStackTrace(); 
} 
instanceID = InstanceID.getInstance(this); 
+0

क्या आप इसे डीबग बिल्ड पर ही करते हैं? – Jeremy

+0

हां बस डीबग मोड में – Rhodesie

+0

कारण इसकी पहली प्रतिलिपि मॉडरेटर द्वारा हटा दी गई थी, नीचे दी गई टिप्पणियों में आपको दिखाई दे रही है। यहां पुन: उत्पादित: "कृपया कई प्रश्नों के समान उत्तरों को पोस्ट न करें। एक अच्छा उत्तर पोस्ट करें, फिर अन्य प्रश्नों को डुप्लिकेट के रूप में बंद करने के लिए वोट/ध्वज करें। यदि प्रश्न डुप्लिकेट नहीं है, तो प्रश्न के उत्तर दें।" – halfer

3

यदि आप वास्तव में लगता है कि आपका कोड सही है और अभी भी त्रुटि

हो रही
{"error": "NotRegistered"} 

मैन्युअल फोन और रन से संयुक्त राष्ट्र: स्थापित करने की कोशिश एप्लिकेशन यह फिर से (आपके डिवाइस को नई पंजीकरण आईडी मिलेगी)।

कम से कम मेरे मामले में समस्या हल हो गई थी!

+0

मेरे मामले में समस्या हल हो गई थी! मैंने InstanceID को हटाने और फिर से अनुरोध भेजने का प्रयास करने का प्रयास किया। लेकिन मैं केवल तब सफल हुआ जब मैंने ऐप को अनइंस्टॉल किया (और मुझे इंस्टेंस आईडी को मिटाना नहीं था जैसा कि मैंने पहले कोशिश की है) –

8

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

  1. स्थापना रद्द वर्तमान स्थापना से:

    enter image description here

    @Samik पर और @ O'Rilla जवाब मैं निम्नलिखित चरणों का सुझाव है कि आधार एंड्रॉइड डिवाइस

  2. सुनिश्चित करें कि आपके पास <receiver> और <sender> नोड AndroidManifest.xml में परिभाषित हैं।
  3. अपने <receiver>
  4. में सुनिश्चित करें कि आप सही <category android:name="COM.COMPANY.YOURAPP" /> किया है सुनिश्चित करें कि रिसीवर के कार्यान्वयन सही
+0

चरण 2 फिक्स्ड खान - एक मूर्ख निरीक्षण, लेकिन आपका जवाब एक कोशिश करने के कुछ दिनों के बाद बचाया गया था मूल कारण खोजने के लिए। धन्यवाद @ रूजबेब –

0

है इसका मतलब यह है बस अपने एक गलत पंजीकरण क्रमांक दे रहे हैं। तो इसके लिए, पहले अपना मोबाइल एप्लिकेशन चलाएं और आपकी पंजीकरण आईडी टोकन के रूप में आ जाएगी। पंजीकरण आईडी के रूप में अपने ऐप सर्वर कोड पर यह टोकन रखें। ऐप आईडी के लिए सर्वर आईडी दें, जिसे आप Google डेवलपर कंसोल, अपनी प्रोजेक्ट और क्रेडेंशियल्स से प्राप्त कर सकते हैं। प्रेषक आईडी के लिए, अपनी प्रोजेक्ट आईडी सेट करें जो प्रोजेक्ट से एक्वायर हो सकती है, डेवलपर कंसोल में सेटिंग्स।

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