2012-12-19 7 views
9

की मूल आईडी मिलती है, मैं कुछ एंड्रॉइड उपकरणों को पुश अपडेट भेजने की कोशिश कर रहा हूं। उनमें से कुछ को औसत समय में एक नई आईडी मिली है, इसलिए मैं Google को बताता हूं कि कैननिकल आईडी हैं। प्रलेखन से मैंने पढ़ा:एंड्रॉइड जीसीएम को कैनोनिकल आईडी

message_id सेट है, तो registration_id के लिए जाँच:

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

क्या मुझे कोई हिस्सा याद आ रहा है, या यदि आप Google को 1 से अधिक पंजीकरण आईडी भेजते हैं तो यह संदिग्ध है?

मेरा अनुरोध (पठनीयता के लिए प्रतिस्थापित आईडी):

"{"data":{"favorite":1},"registration_ids":["1","2","3","4","5","6"]}" 

गूगल से प्रतिक्रिया है:

{ 
    "multicast_id":7917175795873320166, 
    "success":6, 
    "failure":0, 
    "canonical_ids":4, 
    "results":[ 
    {"registration_id":"3","message_id":"m1"}, 
    {"message_id":"m1"}, 
    {"message_id":"m1"}, 
    {"registration_id":"3","message_id":"m1"}, 
    {"registration_id":"3","message_id":"m1"}, 
    {"registration_id":"3","message_id":"m1"} 
] 
} 

इस से, मुझे पता है कि आईडी 3 सही है, लेकिन जो मूल आईडी मैं चाहिए 3 के साथ प्रतिस्थापित करें? प्रत्येक पंजीकृत आईडी के लिए हर संदेश भेजना एक अपशिष्ट होगा। मैंने जावा सर्वर के लिए इसे हल करने वाले स्टैक ओवरफ्लो (GCM and id handling) पर एक पोस्ट पढ़ी है, लेकिन मेरा नहीं है (आरओआर)।

इस मुद्दे को हल करने के तरीके पर कोई विचार?

उत्तर

15

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

अपने उदाहरण यहाँ

तो परिणाम जिनमें से 4 विहित (0, 3, 4, 5) इस प्रकार हैं:

[0] {"registration_id":"3","message_id":"m1"}, 
[1] {"message_id":"m1"}, 
[2] {"message_id":"m1"}, 
[3] {"registration_id":"3","message_id":"m1"}, 
[4] {"registration_id":"3","message_id":"m1"}, 
[5] {"registration_id":"3","message_id":"m1"} 

और यहाँ है अपने "सूची भेज":

[0] "1", 
[1] "2", 
[2] "3", 
[3] "4", 
[4] "5", 
[5] "6" 

परिणामों के मुताबिक आपको पंजीकरण आईडी को 0, 3, 4, 5 में 3 की आईडी में अपडेट करने की आवश्यकता है। इसका मतलब है कि आप निम्न की तरह पंजीकरण सूची के साथ समाप्त हो जाएंगे:

[0] "3", 
[1] "2", 
[2] "3", 
[3] "3", 
[4] "3", 
[5] "3" 

और अंत में:

[0] "3", 
[1] "2", 

यह भी देखें: https://developer.android.com/google/gcm/adv.html#canonical और https://developer.android.com/google/gcm/gcm.html#response

+0

आह, मैं प्रविष्टियों को सिर्फ खाते में "message_id" निहित नहीं लिया, तो मैं एक 4-प्रविष्टि प्रतिक्रिया विचार कर रहा था मेरी 6-प्रवेश अनुरोध। आपकी पहली लिस्टिंग ने मेरे लिए यह किया था। धन्यवाद। – Jos

+3

पहले भेजने से पहले सही "पंजीकरण_आईडी" कैसे फ़िल्टर करें? अन्यथा, पहले मामले में सर्वर अभी भी तीन डुप्लिकेट संदेश भेजता है, और केवल सर्वर प्रतिक्रिया प्राप्त करने के बाद डुप्लीकेट साफ़ हो जाएगा। – iBog