क्या यह निर्धारित करने का कोई तरीका है कि डिवाइस टोकन सैंडबॉक्स या वितरण है या नहीं? हम परीक्षण कर रहे हैं और एप्लिकेशन को कभी-कभी विकास प्रमाणपत्र के साथ हस्ताक्षर किया जाता है और अन्य को विज्ञापन प्रमाण पत्र (वितरण प्रमाण पत्र) के साथ हस्ताक्षरित किया जाता है। ऐसा इसलिए है क्योंकि हम 100 प्रदान किए गए विज्ञापन परीक्षण उपकरणों में से कुछ के लिए आवेदन पास कर रहे हैं, और हमारे उपकरणों पर विकास हस्ताक्षरित ऐप्स भी बना रहे हैं। क्योंकि पुश अधिसूचना भेजने के लिए आवश्यक है कि हम उपयुक्त पुश सर्वर और पेम फ़ाइल का चयन करें, यह निर्धारित करने में सक्षम होना बहुत अच्छा होगा कि टोकन सैंडबॉक्स या वितरण को उपयुक्त तरीके से भेजने के लिए वितरण करता है ताकि पुश अधिसूचना सफल हो। हमें कभी-कभी हमारे अनुप्रयोगों पर हस्ताक्षर करने के लिए वितरण प्रोफ़ाइल का उपयोग करना चाहिए, इसलिए पुश अधिसूचना प्रणाली का परीक्षण करने के लिए हमें इन अधिसूचनाओं को सही तरीके से वितरित करने की आवश्यकता होती है।निर्धारित करें कि डिवाइस टोकन सैंडबॉक्स या वितरण
उत्तर
- ओपन परियोजना का निर्माण preprocessing सेटिंग्स
- के तहत "precompiled हेडर में इस्तेमाल नहीं प्रीप्रोसेसर मैक्रो" के लिए सेटिंग
- जाओ (यह मानते हुए कि आप एक .pch फ़ाइल में कोड शाखाओं में नहीं कर रहे हैं), TOKEN_ENV_SANDBOX रिलीज़ के अंतर्गत = 0 जोड़ने और डीबग और विज्ञापन के तहत TOKEN_ENV_SANDBOX = 1। !
- अपने कोड में बस संकलक निर्देश
#if TOKEN_ENV_SANDBOX
NSLog (@ "TOKEN_ENV == उत्पादन") का उपयोग जहाँ भी;
#endif#if TOKEN_ENV_SANDBOX
NSLog (@ "TOKEN_ENV == सैंडबॉक्स");
#endif
संपादित करें: ऊपर एक मुद्दा सही किया।
यहाँ क्या एप्पल कहना
आप Xcode में निर्धारित कर सकते हैं जो पर्यावरण आपको एक कोड हस्ताक्षर पहचान के चयन से कर रहे हैं है। यदि आपको "आईफोन डेवलपर: फर्स्टनाम लास्टनाम" प्रमाणपत्र/प्रोविजनिंग प्रोफाइल जोड़ी दिखाई देती है, तो आप सैंडबॉक्स वातावरण में हैं। यदि आपको "आईफ़ोन वितरण: कंपनी नाम" प्रमाण पत्र/प्रावधान प्रोफ़ाइल जोड़ी दिखाई देती है, तो आप उत्पादन वातावरण में हैं।
ऐप्पल एलएलवीएम 7.0 - प्रीप्रोकैसिंग के तहत अपने लक्ष्य की बिल्ड सेटिंग्स में प्रीप्रोसेसर मैक्रो जोड़ें। तब डीबग के तहत की तरह कुछ जोड़ें:
isRunningInDevModeWithDevProfile=1
, तो आप कुछ इस तरह कर सकते हैं:
// AZ - 01282016 - Determine which environment we are running in for APNS
# ifdef isRunningInDevModeWithDevProfile
# define isAPNSSandbox YES
#else
# define isAPNSSandbox NO
#endif
और फिर आप इसे अपने कोड में जांच करने की जरूरत है, जहां आप कर सकते हैं ऐसा करते हैं:
NSString *ifAppIsRunningFromXcodeUsingNonReleaseProfile;
if (isAPNSSandbox) {
ifAppIsRunningFromXcodeUsingNonReleaseProfile = @"dev";
} else {
ifAppIsRunningFromXcodeUsingNonReleaseProfile = @"prod";
}
हम इतना है कि यह जानता है जो रास्ता लेने के लिए जब एप्पल के APNS बुला यह मान वापस हमारे APNS सर्वर से गुजरती हैं।
कारण यह है कि मैं यह सुझाव देता हूं कि यदि आप गैर-डीबग लक्ष्यों में पूर्वप्रवाहक मैक्रो को अनिर्धारित छोड़ देते हैं, तो इससे कोई त्रुटि नहीं होगी जब आप इसे बनाने का प्रयास करेंगे।
निश्चित रूप से, एक बेहतर रूप के साथ समाधान हैं, लेकिन यह कार्यक्षमता को चलाने और चलाने के लिए एक सुरक्षित और त्वरित तरीका है।
मैंने उपरोक्त सभी उत्तरों को पढ़ा है और वे सभी सही हैं लेकिन मूल प्रश्न का उत्तर नहीं देते: "डिवाइस टोकन सैंडबॉक्स या वितरण है?"।
ऐसा इसलिए है क्योंकि वे बिल्ड कॉन्फ़िगरेशन का पता लगाते हैं, टोकन गुणवत्ता नहीं।
इस मुद्दे को हल करने में कई दिन बिताने के बाद, मैं straigt आगे समाधान के लिए मिल गया:
टेस्ट टोकन आप वास्तविक एप्पल पुश अधिसूचना सर्वर साथ मिला है। आप सरल ऐप का उपयोग कर सकते हैं जो सर्वर से बात करेगा और आपको बस इसे कॉन्फ़िगर करने की आवश्यकता है।
मै मैकोज़ या किसी और के लिए इस सरल ऐप "आसान एपीएन प्रदाता" का उपयोग किया था। MacOS अनुप्रयोग में
https://itunes.apple.com/us/app/easy-apns-provider-push-notification/id989622350?mt=12
मेरे मुख्य मुद्दा यह है कि मैं दोनों डीबग में उत्पादन टोकन प्राप्त करते रहने और विन्यास रिलीज किया गया था।
जब आप किसी समस्या का पता लगाते हैं, तो आप प्रमाण पत्र अमान्य कर सकते हैं 100% सुनिश्चित करने के लिए यह समझौता नहीं किया जाएगा।
मेरे "प्रीप्रोसेसर मैक्रोज़ को प्रीकंपील्ड हेडर में उपयोग नहीं किया गया" Adhoc कैसे जोड़ें – siva
क्या मुझे पता है कि यह अभी भी मान्य है या नहीं? मुझे पता है कि कुछ उपयोगकर्ताओं को ऐप स्टोर से एक ही रिलीज के साथ सैंडबॉक्स टोकन के रूप में पहचाना जाता है। – neobie
क्यों विज्ञापन के लिए, TOKEN_ENV_SANDBOX 0 है? और डीबग के लिए, TOKEN_ENV_SANDBOX = 1? क्या कोई गलती है? – neobie