2016-01-05 24 views
11

के साथ Google क्लाउड मैसेजिंग मैं एंड्रॉइड डिवाइस के साथ जीसीएम का उपयोग करने में कामयाब रहा हूं, लेकिन अब मैं आईओएस ऐप पर लागू करने की कोशिश कर रहा हूं।एक्सकोड 7 और आईओएस 9

मुझे लगता है कि मैंने जीसीएम सेवा का उपयोग करने में सक्षम होने के लिए सभी आवश्यक कदमों का पालन किया है। मौजूदा ऐप में सेवा जोड़ने के लिए मैंने https://developers.google.com/cloud-messaging/ios/client?configured=true का पालन किया है।

मुझे लगता है कि सबकुछ सही कॉन्फ़िगर किया गया है लेकिन मुझे कोई सूचना प्राप्त नहीं हो रही है। मेरे पास एपीएन प्रमाण पत्र और GoogleService-info.plist फ़ाइल है, कंसोल पर यह आउटपुट है:

2016-01-05 13: 47: 53.864: जीसीएम | चेकइन प्लिस्ट में अमान्य कुंजी: GMSInstanceIDDeviceDataVersion जीसीएम 2016-01-05 से कनेक्ट 13: 47: 57.501: GGLInstanceID | भविष्य में अमान्य अंतिम चेकइन टाइमस्टैम्प। 2016/01/05 13: 47: 57.501 TerneraGallega [1014: 444,977] authId साथ चेकइन सफल: 4958686017822257121, पचाने: KSJNg + Aj82uavBXrFeOAfA ==, lastCheckinTimestamp: 1451998077000 पंजीकरण टोकन: NC-dd9fCvFs: APA91bHMfbvLczxSPLQsLeEJASU_RfV4wvVuPs2u4VJDtpC8oB2cm1AKr6cH_LFeLsQzb94Kk9iwez8fsOvgzNns_9DU3i8Ema1oCKIwcNFzenNpAhViyGHah4E7-RkQlg1durYSEQRD पहले से ही करने के लिए सदस्यता/विषयों/वैश्विक

जैसे ही मैं इस प्राप्त के रूप में अगर मैं के साथ एक पोस्ट अनुरोध किया:

{ "के लिए": "NC-dd9fCvFs: APA91bHMfbvLczxSPLQsLeEJASU_RfV4wvVuPs2u4VJDtp C8oB2cm1AKr6cH_LFeLsQzb94Kk9iwez8fsOvgzNns_9DU3i8Ema1oCKIwcNFzenNpAhViyGHah4E7-RkQlg1durYSEQRD ", " content_available ": सच है, " अधिसूचना ": { " शरीर ":" बड़ा मैच ", " शीर्षक! ":" पुर्तगाल बनाम डेनमार्क " } }

पहला प्रयास यह एक सफलता संदेश लेकिन कोई लॉग न ही अधिसूचना रिटर्न

कुछ ही मिनटों के बाद (अग्रभूमि पर आवेदन के साथ) डिवाइस में दिखाया गया है, पोस्ट अनुरोध की एक और कोशिश में अब यह

के साथ एक विफलता रिटर्न

{ "multicast_id": 7256343774952522277, "सफलता": 0, "विफलता": 1, "canonical_ids": 0, "परिणाम": [ { "त्रुटि": "NotRegistered" } ] }

अब, मैं गूगल पेज से GCM उदाहरण डाउनलोड किया है, APN कॉन्फ़िगर किया गया है और यह भी GoogleService-Info.plist मिला, जब शुरू करने के रूप में यह पर खुलता है GCM उदाहरण स्विफ्ट जैसे ही दाखिल डिवाइस यह कहता है:

पंजीकरण सफल! पंजीकरण टोकन के लिए xcode डीबग कंसोल की जांच करें जिसका आप उपयोग कर सकते हैं ...

इस के बाद, अगर आप के साथ

{ "से" एक पोस्ट अनुरोध सेट: "mVEtHyTXEOg: APA91bGvK_Uf2ZKgpguWUOto3CXQzIT1z22uJ446mYkNqMwL9VLDYdGtdm_4vS8rcl3T9OeqEC1UWbdKAOyuoweW1GiU0mv0cDSPW03y4XGx19JcR6rxsiWRNUjtADX6iNAW8wM8UBJl", "content_available": सच है, "अधिसूचना": { "शरीर ":" शानदार मैच! ", " शीर्षक ":" पुर्तगाल बनाम डेनमार्क " } }

इसे फिर से एक

{ "multicast_id" रिटर्न: 7435981433811133310, "सफलता": 0, "विफलता": 1, "canonical_ids": 0, "परिणाम": [ { "त्रुटि": "NotRegistered" } ] }

कोई है जो एक ऐप्लिकेशन पर GCM लागू किया गया है मुझे कि मैं क्या बात कर सकता है कर सकते हैं मैं याद कर रहा हूँ

------- संपादित करें -------

अंत में मैं इसे एक विकास प्रमाण पत्र के स्थान पर एक वितरण प्रमाण पत्र का उपयोग कर काम कर दिया है ... ऐसा लगता है मेरे पास है सभी अच्छी तरह से कॉन्फ़िगर किया गया है लेकिन मुझे विकास प्रमाण पत्र के साथ कुछ याद आ रहा है।

पुनश्च: आईडी के तहत APN प्रोफाइल पेज में मैं दोनों पुश अधिसूचना प्रमाण पत्र सक्षम किया है

लेकिन मैं इस सवाल का खुला क्योंकि मैं का उपयोग करने में असमर्थ हूँ छोड़ देंगे (यही कारण है कि मैंने सोचा था कि सब कुछ के लिए कॉन्फ़िगर अच्छा था है) यह विकास परिस्थितियों में

+0

आप [दस्तावेज़ीकरण] (https: //developers.google.c ओम/क्लाउड-मैसेजिंग/http # प्रतिक्रिया) 'NotRegistered' त्रुटि के संभावित कारणों के लिए। यह कहता है: "यदि यह 'पंजीकृत नहीं है', तो आपको अपने सर्वर डेटाबेस से पंजीकरण आईडी को हटा देना चाहिए क्योंकि एप्लिकेशन को डिवाइस से अनइंस्टॉल किया गया था, या क्लाइंट ऐप संदेशों को प्राप्त करने के लिए कॉन्फ़िगर नहीं किया गया है।" – gerardnimo

+0

हाय @gerardnimo, हां, उस त्रुटि का अर्थ है कि आपको टोकन को हटाना है क्योंकि ऐप अब उस उपयोगकर्ता के लिए मौजूद नहीं है (जो कुछ सच नहीं है) लेकिन मैं अभी तक टोकन को सहेजता नहीं हूं, मैं सिस्टम को पहले चलाना चाहता हूं ..:( – neteot

उत्तर

1

मैं प्रमाण पत्र के साथ गड़बड़ किए बिना आपके संपादन में ठीक उसी तरह से काम करने में सक्षम था। जाहिर है यह काम नहीं करेगा यदि आपके पास पहले से ही सबकुछ सेटअप है, और विकास और उत्पादन वातावरण दोनों का उपयोग कर रहे हैं, लेकिन यदि आप विकास चरण में हैं तो इसे बदलने में काफी आसान है।

GCM उदाहरण परियोजना में आवेदन में (ऑब्जेक्टिव-सी के लिए): didRegisterForRemoteNotificationsWithDeviceToken मैं बस कोड से बदल दिया है:

_registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken, 
          kGGLInstanceIDAPNSServerTypeSandboxOption:@YES}; 

करने के लिए

_registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken, 
          kGGLInstanceIDAPNSServerTypeSandboxOption:@NO}; 

मैं समझता हूँ कि यह वास्तव में एक असली नहीं है ठीक करें, लेकिन कम से कम इसे किसी प्रमाण पत्र को बदलने के बिना काम किया है (जब तक उत्पादन प्रमाण पत्र सेटअप हो।

+0

हाय @ जेरोब हां, वास्तव में तेज़ 2 में यदि आप संपत्ति बनाना चाहते हैं तो जीसीएम के साथ उत्पादन प्रमाण पत्र का उपयोग करें, आपको 'kGGLInstanceIDAPNSServerTypeSandboxOption = false' सेट करना होगा यदि आपको हमेशा' {NotRegistered} 'नहीं मिलेगा, लेकिन जब मैं विकास प्रमाण पत्र की कोशिश कर रहा था मैंने ध्वज को सही पर सेट किया (लेकिन अभी भी काम नहीं किया) – neteot

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