जवाबों:
से [एप्पल प्रलेखन ApplePushService] 2
टोकन ट्रस्ट के इस चरण का रूप केवल यह सुनिश्चित करता है कि केवल APN टोकन ही उत्पन्न करता है जिसे वह बाद में सम्मानित करेगा, और यह खुद को आश्वस्त कर सकता है कि किसी डिवाइस द्वारा उसे दिया गया टोकन वही टोकन है जो उसने पहले उस विशेष डिवाइस के लिए प्रावधान किया था - और केवल उस उपकरण के लिए।
यदि उपयोगकर्ता बैकअप डेटा को एक नए डिवाइस में पुनर्स्थापित करता है या ऑपरेटिंग सिस्टम को पुनर्स्थापित करता है, तो डिवाइस टोकन बदल जाता है।
इस बिंदु पर Apple का आधिकारिक दस्तावेज अस्पष्ट है। मैंने जो देखा है वह यह है: टोकन किसी दिए गए डिवाइस, एप्लिकेशन और डोमेन (उत्पादन बनाम सैंडबॉक्स) के लिए अपरिवर्तनीय है। मेरा मानना है कि सिस्टम को मज़बूती से काम करने के लिए यह सही होना चाहिए। उस स्थिति पर विचार करें जहां एक एप्लिकेशन अपडेट एक नया APN टोकन चलाता है; अगर मैं सबसे बड़े नए ट्विटर जैसे ऐप का उपयोग कर रहा हूं, तो सूचनाओं को सक्षम करने के साथ, जब मैं आईट्यून्स से अपना ऐप अपडेट करूंगा तो क्या होगा? क्या मुझे यह उम्मीद होनी चाहिए कि यह मेरे द्वारा डिवाइस पर अपडेट "सिंक" करने के बाद भी मैंने एप्लिकेशन न चलाने के बावजूद नोटिफिकेशन भेजा रहेगा? एप्लिकेशन को बदलने का कार्य APN प्रणाली को प्रभावित नहीं कर सकता क्योंकि OS आपकी ओर से सूचनाएं प्राप्त कर सकता है, भले ही आपने अपडेट किए गए ऐप को नहीं चलाया हो।
स्पष्ट होने के लिए, ऐप्पल कहता है "एक आवेदन को [एपीएन सर्वरों के साथ] हर बार लॉन्च होने पर और अपने प्रदाता को वर्तमान टोकन देना चाहिए"। मैं तहे दिल से सहमत हूँ; ऐसा करने से आपके एप्लिकेशन को खराब मान्यताओं या असामान्य स्थितियों से बचाया जाएगा।
के जवाब में से एक Are पुश अधिसूचना एक ही उपकरण के लिए एप्लिकेशन में अद्वितीय टोकन? इंगित करता है कि डिवाइस टोकन "ऑपरेटिंग सिस्टम इंस्टॉल" के अनुसार अद्वितीय हैं; और जो एक डिवाइस से बैकअप को बहाल करता है, वह टोकन को बनाए रखेगा लेकिन एक डिवाइस को पोंछने से उसे नया टोकन प्राप्त होगा। यह ऐप्पल के सहज संचालन और गोपनीयता के इरादों के साथ पूरी तरह से संगत होगा: एक डिवाइस को पोंछना काफी गंभीर है कि शायद यह एक नई एसोसिएशन को वारंट करता है, लेकिन एक ओएस अपडेट के बाद एक छवि को बहाल करने वाला उपयोगकर्ता अपने मौजूदा नोटिफिकेशन को संरक्षित करना चाहेगा। अगर मुझे अपने iPad पर हालिया iOS5 अपडेट याद है, तो मैंने अपग्रेड करने के बाद सबसे हालिया बैकअप को बहाल कर दिया है, इसलिए इससे मेरे नोटिफिकेशन टोकन की निरंतरता बनी रहेगी। [संपादित करें: बैकअप को किसी भिन्न में पुनर्स्थापित करना उपकरण टोकन की नकल नहीं करेगा।]
चेतावनी: मुझे विषय पर निश्चित ज्ञान नहीं है, बस एपीएन (तीसरे पक्ष के डेवलपर के रूप में) के साथ काम करने का कुछ उचित अनुभव है। हमेशा की तरह, अपनी मान्यताओं को सत्यापित करना सबसे अच्छा है।
मुझे हाल ही में Apple के इंजीनियरों से बात करने का मौका मिला और b> कुछ वास्तविक विश्व परीक्षण चलाए, और मैं परिणाम प्रस्तुत करना चाहता था:
पूर्ण होने के लिए, जब मैं एपीएन टोकन वापस करने के बारे में बात करता हूं, तो मैं एक एकल बंडल पहचानकर्ता / आवेदन का संदर्भ मान रहा हूं।
सबसे पहले, Apple इंजीनियरों ने कहा कि दो उपकरणों के लिए एक ही APN को वापस करना संभव नहीं होना चाहिए। नीचे दी गई टिप्पणियों के बावजूद, मैं ऐसी परिस्थिति की पहचान नहीं कर पाया जहां यह विफल हो।
दूसरा, यहाँ उन्नयन परीक्षण अनुक्रम और परिणाम है:
IPhone4 पर स्थापित iOS4 से शुरू करें; आईट्यून्स में बैकअप डिवाइस
IOS5 में अपग्रेड करें
पिछले परीक्षण से, मुझे पता है कि APN टोकन अब अलग है
डिवाइस पर बैकअप पुनर्स्थापित करें
APN टोकन अब चरण 1 के समान है।
IOS (क्लीन डिवाइस) को रीसेट करें
APN टोकन बदल जाता है
आईट्यून्स के लिए एक अलग फोन का बैकअप लें और डिवाइस का परीक्षण करने के लिए उस बैकअप को पुनर्स्थापित करें; मूल रूप से, मैं "गलत" बैकअप बहाल कर रहा हूं, जैसे कि मैं फोन स्विच कर रहा था।
APN टोकन फिर से बदलता है; आगे यह विशिष्ट है और टोकन या तो मूल टोकन या "क्लोन" टोकन से मेल नहीं खाता है।
डिवाइस के लिए "सही" बैकअप पुनर्स्थापित करें।
APN टोकन अब चरण 1 के समान है।
अंत में, मैंने फोन को iOS6 (बीटा 2) में अपग्रेड किया, मेरा बैकअप बहाल किया और फिर से परीक्षण किया। उम्मीद के मुताबिक, चरण 1 में टोकन से मिलान जारी रहा।
इस बिंदु पर, मुझे पूरा विश्वास है कि APN टोकन को विभिन्न उपकरणों के बीच दोहराया नहीं जा सकता है; शायद यह iOS के पुराने संस्करणों में बग के रूप में हुआ होगा, लेकिन मुझे विश्वास है कि iOS5 (और संभवतः iOS6) APN टोकन को सही तरीके से संभाल रहा है।
मुझे बस एहसास हुआ कि मैंने इसे नहीं जोड़ा था: डिवाइस टोकन बदल जाएगा । Apple देवों में से एक ने मेरे साथ साझा किया कि टोकन वास्तव में समाप्त हो जाते हैं (2 साल बाद, मुझे लगता है)। कई उद्देश्यों के लिए, यह काफी लंबा है जिसे अजेय माना जा सकता है।
[मुझे चिंता नहीं है अगर मुझे हर दो साल में नई टोकन के साथ अपनी टेस्ट स्क्रिप्ट को अपडेट करना है, खासकर जब से मैं हर साल फोन बदलता हूं।]
अगर मैंने किसी ऐप को फिर से इंस्टॉल किया है तो मैंने अभी iOS9 और APN पुश टोकन में बदलाव किया है ।
हाँ , डिवाइस टोकन बदल सकते हैं।
जब भी आपका ऐप टोकन प्राप्त करता है, उसे इसे स्टोर करना चाहिए। फिर, जब भी नया टोकन प्राप्त होता है (जो होगा हो, अंत में), नए टोकन संग्रहीत टोकन की तुलना और, यदि वे अलग हैं:
nil
)एक व्यावहारिक मामले के रूप में, अंतिम चरण गैर-तुच्छ होने की सबसे अधिक संभावना है। उदाहरण के लिए, यदि आपके पास एक सेवा है जो डिवाइस को मौसम के अलर्ट भेज रही है, तो उस ज़िप कोड के आधार पर जो डिवाइस ने सदस्यता ली है, तो आपको old_token
और new_token
उक्त सेवा को पास करने की आवश्यकता है ताकि यह डिलीवरी को अपडेट कर सके।
आम तौर पर, "डिवाइस टोकन" को स्वीकार करने वाले एपीआई के 100% बोलने पर UPDATE
उस टोकन के लिए किसी प्रकार की सुविधा भी होनी चाहिए । इसके लिए नहीं बनाने के लिए गलत और गैर-वितरित सूचनाओं के लिए निर्माण करना है।
डिवाइस टोकन iOS 8 और बाद के संस्करण से बदलता है
कृपया Apple वेबसाइट से नीचे पाठ देखें। उपयोगकर्ता अधिसूचनाओं को पंजीकृत करना, समयबद्धन और संभालना
डिवाइस टोकन एक विशिष्ट डिवाइस पर आपके ऐप पर पुश सूचनाएं भेजने के लिए आपकी कुंजी है। डिवाइस टोकन बदल सकते हैं, इसलिए आपके ऐप को लॉन्च होने पर हर बार रीरजिस्ट करने की जरूरत है और प्राप्त टोकन को अपने सर्वर पर वापस भेज दें। यदि आप डिवाइस टोकन को अपडेट करने में विफल रहते हैं, तो दूरस्थ सूचनाएं उपयोगकर्ता के डिवाइस पर अपना रास्ता नहीं बना सकती हैं। जब उपयोगकर्ता किसी नए डिवाइस या कंप्यूटर पर बैकअप डेटा पुनर्स्थापित करता है या ऑपरेटिंग सिस्टम को पुनर्स्थापित करता है, तो डिवाइस टोकन हमेशा बदलते रहते हैं। किसी नए डिवाइस या कंप्यूटर पर डेटा माइग्रेट करते समय, उपयोगकर्ता को आपके ऐप को एक बार लॉन्च करने से पहले एक बार रिमोट नोटिफिकेशन को उस डिवाइस तक पहुंचाया जा सकता है।
मुझे लगता है कि यह ध्यान देने योग्य है क्योंकि किसी ने भी यह नहीं कहा कि आपके द्वारा कॉल किए जाने के बाद टोकन बदल जाए unregisterForRemoteNotifications
। जब आप registerForRemoteNotifications
अगली बार कॉल करते हैं तो टोकन अलग होता है। मैं Apple डॉक्स में इसकी कोई पुष्टि पाने में विफल रहा, लेकिन मैंने खुद इस तरह का व्यवहार देखा। कृपया इसे ध्यान में रखें
इसे तब तक नहीं बदलना चाहिए, जब तक कि आपका ऐप एक नए डिवाइस पर बहाल न हो जाए (जिस बिंदु पर इसे फिर से पुश नोटिफिकेशन स्वीकार करने के लिए नहीं कहा जाएगा, और बस आपको पंजीकृत कॉल भेजना होगा, जिस बिंदु पर आपको नया टोकन स्वीकार करना चाहिए)।
लेकिन Apple इसकी गारंटी नहीं देता है कि यह कभी नहीं बदलता (इसलिए प्रलेखन में इसका उल्लेख नहीं है)। आप सबसे बुरे के लिए बेहतर कार्यक्रम करते हैं और यह मानते हैं कि यह एक दिन बदल सकता है। इसके अलावा, आपके सर्वर पर एक टोकन भेजना नियमित रूप से आपको टोकन को हटाने में सक्षम बनाता है जो कुछ समय के लिए पंजीकृत नहीं है, और संभवत: कुछ समय पहले आपके ऐप को खो दिया है या ब्याज खो दिया है (और प्रलेखन इसे वांछित व्यवहार के रूप में निर्दिष्ट करता है!)।
से - Apple डॉक्स
APN कई कारणों से एक नया उपकरण टोकन जारी कर सकता है:
उपयोगकर्ता आपके ऐप को एक नए डिवाइस पर इंस्टॉल करता है
उपयोगकर्ता बैकअप से डिवाइस को पुनर्स्थापित करता है
उपयोगकर्ता ऑपरेटिंग सिस्टम को पुनर्स्थापित करता है
अन्य प्रणाली-परिभाषित घटनाएं
नतीजतन, ऐप्स को लॉन्च के समय डिवाइस के टोकन का अनुरोध करना चाहिए।
इसके अतिरिक्त:
जरूरी
APNs डिवाइस टोकन वैरिएबल लंबाई के होते हैं। उनके आकार को हार्ड-कोड न करें।
लिंक जल्दी सेब के साथ अप्रचलित हो जाते हैं! इसलिए मुझे लगता है कि अब काफी स्पष्ट प्रतीत होता है:
अपने ऐप में कभी भी कैश डिवाइस टोकन न रखें; इसके बजाय, उन्हें सिस्टम से प्राप्त करें जब आपको उनकी आवश्यकता हो। APN आपके एप्लिकेशन के लिए एक नया डिवाइस टोकन जारी करता है जब कुछ घटनाएं होती हैं। डिवाइस टोकन को अलग होने की गारंटी है, उदाहरण के लिए, जब उपयोगकर्ता किसी डिवाइस को बैकअप से पुनर्स्थापित करता है, जब उपयोगकर्ता आपके ऐप को एक नए डिवाइस पर स्थापित करता है, और जब उपयोगकर्ता ऑपरेटिंग सिस्टम को पुनर्स्थापित करता है। टोकन प्राप्त करना, कैश पर निर्भर होने के बजाय, यह सुनिश्चित करता है कि आपके पास अपने प्रदाता के लिए वर्तमान डिवाइस टोकन की आवश्यकता है जो कि एपीसी के साथ संवाद करने के लिए है। जब आप किसी डिवाइस टोकन को लाने का प्रयास करते हैं, लेकिन यह नहीं बदला है, तो भ्रूण विधि जल्दी से वापस आती है।
Apple पुश नोटिफिकेशन सामान के संदर्भ में
डिवाइस टोकन एक विशिष्ट डिवाइस पर आपके ऐप पर पुश सूचनाएं भेजने के लिए आपकी कुंजी है। डिवाइस टोकन बदल सकते हैं, इसलिए आपके ऐप को लॉन्च होने पर हर बार रीरजिस्ट करने की जरूरत है और प्राप्त टोकन को अपने सर्वर पर वापस भेज दें। यदि आप डिवाइस टोकन को अपडेट करने में विफल रहते हैं, तो दूरस्थ सूचनाएं उपयोगकर्ता के डिवाइस पर अपना रास्ता नहीं बना सकती हैं। जब उपयोगकर्ता किसी नए डिवाइस या कंप्यूटर पर बैकअप डेटा पुनर्स्थापित करता है या ऑपरेटिंग सिस्टम को पुनर्स्थापित करता है, तो डिवाइस टोकन हमेशा बदलते रहते हैं। किसी नए डिवाइस या कंप्यूटर पर डेटा माइग्रेट करते समय, उपयोगकर्ता को आपके ऐप को एक बार लॉन्च करने से पहले एक बार रिमोट नोटिफिकेशन को उस डिवाइस तक पहुंचाया जा सकता है।
कभी भी एक उपकरण टोकन को कैश न करें; जब भी आपको आवश्यकता हो, हमेशा सिस्टम से टोकन प्राप्त करें। यदि आपका ऐप पहले दूरस्थ सूचनाओं के लिए पंजीकृत है, तो registerForRemoteNotifications विधि को फिर से कॉल करने से कोई अतिरिक्त ओवरहेड नहीं होता है, और iOS आपके ऐप प्रतिनिधि को मौजूदा डिवाइस टोकन तुरंत लौटाता है। इसके अलावा, iOS आपके प्रतिनिधि विधि को किसी भी समय डिवाइस टोकन में बदलाव करता है, न कि आपके ऐप के पंजीकरण या फिर से पंजीकरण के जवाब में।
इस लिंक के अनुसार डिवाइस टोकन
प्रत्येक अनुरोध में शामिल डिवाइस टोकन सूचना प्राप्त करने वाले डिवाइस की पहचान को दर्शाता है। APN प्रत्येक अद्वितीय ऐप और डिवाइस संयोजन की पहचान करने के लिए डिवाइस टोकन का उपयोग करता है। यह उनका उपयोग किसी डिवाइस पर भेजे गए दूरस्थ सूचनाओं के रूटिंग को प्रमाणित करने के लिए भी करता है। जब भी आपका ऐप किसी डिवाइस पर चलता है, तो वह इस टोकन को APN से प्राप्त करता है और इसे आपके प्रदाता को भेज देता है। आपका प्रदाता टोकन को स्टोर करता है और उस विशेष ऐप और डिवाइस को सूचनाएं भेजते समय इसका उपयोग करता है। टोकन स्वयं अपारदर्शी और लगातार है, केवल तब बदलते हैं जब किसी उपकरण का डेटा और सेटिंग्स मिट जाती हैं। केवल APN ही डिवाइस टोकन को डिकोड और पढ़ सकते हैं।
हाँ यह बदल सकता है। आदर्श रूप से जब कभी हमें कॉलबैक विधि के माध्यम से टोकन प्राप्त होता है
- (शून्य) आवेदन: (UIApplication *) आवेदन didRegisterForRemoteNotificationsWithDeviceToken: (NSData *) डिवाइसटोकन
ऐप को रिमोट सर्वर पर टोकन को पंजीकृत / ताज़ा करना चाहिए। यह सुनिश्चित करेगा कि APNS और आपके सर्वर पर टोकन सिंक में रखा गया है।
Apple प्रलेखन के अनुसार ,
एप्लिकेशन-विशिष्ट उपकरण टोकन प्राप्त करना और संभालना निम्नानुसार काम करता है:
आपका ऐप दूरस्थ सूचनाओं के लिए एपीएन के साथ रजिस्टर करता है जब एक नए डिवाइस टोकन की आवश्यकता होती है, तो एपीएन डिवाइस के प्रमाण पत्र में निहित जानकारी का उपयोग करके एक उत्पन्न करता है। यह टोकन कुंजी का उपयोग करके टोकन को एन्क्रिप्ट करता है और इसे डिवाइस पर लौटाता है, जैसा कि बीच में दिखाया गया है, राइट-पॉइंटिंग तीर। सिस्टम आपके एप्लिकेशन को कॉल करके डिवाइस टोकन को आपके ऐप पर वापस भेजता है: didRegisterForRemoteNotificationsWithDeviceToken: प्रतिनिधि विधि। टोकन प्राप्त करने पर, आपके एप्लिकेशन (प्रतिनिधि विधि के भीतर) को अपने प्रदाता को बाइनरी या हेक्साडेसिमल प्रारूप में अग्रेषित करना होगा। आपका प्रदाता इस टोकन के बिना डिवाइस को सूचनाएं नहीं भेज सकता है। विवरण के लिए, दूरस्थ सूचना समर्थन को कॉन्फ़िगर करने में दूरस्थ सूचनाएँ प्राप्त करने के लिए पंजीकरण देखना।
डिवाइस टोकन ऐप की स्थापना पर रिले।
इसका मतलब है कि यदि आप एप्लिकेशन को पुनर्स्थापित करते हैं, तो यह बदल जाता है ; यदि आप इसे बैकअप से करते हैं, तो आईओएस अपग्रेड नहीं करता है।
इसका उपयोग करने का सही तरीका, किसी भी समस्या से बचने के लिए NSPAppDelegate
, प्रत्येक एप्लिकेशन लॉन्च पर दिए गए एक को विधि में प्राप्त करना हैdidRegisterForRemoteNotificationsWithDeviceToken