2010-02-17 16 views
12

आप सैंडबॉक्स में एपीएनएस प्रतिक्रिया सेवा का परीक्षण कैसे करेंगे? या दूसरे शब्दों में, आप किसी डिवाइस को फीडबैक में कैसे मजबूर करते हैं?पुश अधिसूचना प्रतिक्रिया सेवा का परीक्षण कैसे करते हैं?

उत्तर

6

आप एक डिवाइस से अपने एप्लिकेशन को हटाते हैं, तुम सब करने की है प्रयास है कि डिवाइस और अगली बार जब आप प्रतिक्रिया सर्वर से कनेक्ट यह है कि डिवाइस वापस आ जाएगी करने के लिए किसी एक सूचना भेजते हैं। तब तक डिवाइस को तब तक वापस नहीं लौटाएगा जब तक कि आप उस डिवाइस पर एक और अधिसूचना भेजने की कोशिश न करें।

इसके अलावा, अगर आप प्रतिक्रिया सर्वर से कनेक्शन के बीच एक डिवाइस के लिए कई सूचनाएं भेजने, उपकरण हर सूचना है कि dennied गया था के लिए लौटा दी जाएगी।

+3

सैंडबॉक्स मोड में काम नहीं करता है। मुझे कभी प्रतिक्रिया नहीं मिली ... – jjxtra

+0

डौगसी –

4

मुझे एहसास है कि इसके लिए एक उत्तर स्वीकार कर लिया गया है लेकिन लगातार & इंस्टॉल किए बिना परीक्षण के पहले दौर को करने के लिए मेरे फोन/आईपॉड से अपना एप्लिकेशन हटा दें मैंने फीडबैक सर्वर के रूप में कार्य करने के लिए एक बहुत ही सरल रूबी स्क्रिप्ट बनाई है। मैंने इसके सर्वर से कनेक्ट करने के लिए मेरी रूबी एपीएनएस कक्षा को कॉन्फ़िगर किया (लोकलहोस्ट: 21 9 6) और इससे पढ़ा। मैंने एसएसएल कनेक्शन में प्रवेश नहीं किया है, इसलिए मैंने इसके बजाय बेस सॉकेट का उपयोग किया है। नीचे वह स्क्रिप्ट है जिसका उपयोग मैं सर्वर को 'होस्ट' करने के लिए करता था।

#!/usr/bin/env ruby 

require 'socket' 

puts 'Opening server' 
server = TCPServer.open(2196) 

loop { 
    puts 'Waiting for connection' 
    client = server.accept 

    puts 'Connected preparing data' 
    data = [1, 2, 3, 4, 0, 32, ['d41c3767074f541814c2207b78f72e538569cb39eae60a8c4a8677549819e174']] 
    puts 'Data for delivery: ' + data.inspect 

    begin 
     data[6] = data[6].pack('H*') 
     data = data.pack('c6a*') 

     loop { 
      puts 'Writing Data' 
      client.write data 

      puts 'Sleeping for 5 seconds' 
      sleep 5 
     } 
    rescue 
    end 
    puts 'Done writing, closing' 
    client.close 
} 

यह स्क्रिप्ट सुनेगा और जब यह एक कनेक्शन प्राप्त करता है हर 5 सेकंड सॉकेट से एक पैकेट लिखें। यदि कनेक्टिंग सॉकेट बंद हो जाता है (उदाहरण के लिए आप अपनी प्रतिक्रिया प्रक्रिया को मार देते हैं) तो यह स्क्रिप्ट रीसेट हो जाती है और एक नए कनेक्शन की प्रतीक्षा करती है।

याद रखें, SSL कनेक्शन सामान सिर्फ एक मानक माणिक सॉकेट का उपयोग नहीं करते। सौभाग्य!

+0

सी द्वारा टिप्पणी देखें: \ telnet localhost 2196 -> काम करता है। सी: \ टेलनेट 127.0.0.1 2196 -> विषम काम नहीं करता है। यह क्यों होगा? इसके अलावा, इंडी टीसीपी क्लाइंट मुझे एक कनेक्शन अस्वीकार कर देता है। –

+1

@ टीएस त्रुटि का मतलब है कि सर्वर 127.0.0.1 को नहीं सुन रहा है। 'localhost' को केवल 127.0.0.1 का संदर्भ नहीं है, 'gethostbyname()' या 'getaddrinfo()' के माध्यम से लुकअप क्वेरी वास्तविक स्थानीय आईपी को हल कर सकती है, जो 'टेलनेट' एक सफल होने तक कनेक्ट करने का प्रयास करेगा। लेकिन इंडी गतिशील रूप से इसे हल करने की कोशिश किए बिना, केवल लोकलहोस्ट को 127.0.0.1 के रूप में मानता है। जब इंडी होस्टनाम को हल करता है, तो यह सभी रिपोर्ट किए गए आईपी से कनेक्ट करने का प्रयास नहीं करता है। यह एक कठिन वस्तु है। –

+0

इस लाइन को प्रतिस्थापित करके फिक्स्ड: "" सर्वर = टीसीपीएसरवर.ऑपेन ("127.0.0.1", 21 9 6) " –

11

मुझे लगता है कि प्रश्न के प्रारंभिक दौर से "हां bu आप वहां कुछ दिखाने के लिए कैसे मिलता है?" वास्तव में इस तथ्य से आया कि, उसके परीक्षण किसी भी डिवाइस को वापस नहीं कर रहे थे, यानी, भले ही वह हो सूचनाएं सफलतापूर्वक iPhone/iPad के, जब भी वह अमेरिकन प्लान सर्वर प्रश्नों के लिए भेजा है, कुछ भी ठीक है क्योंकि एप्लिकेशन को उपकरण से हटा दिया कभी नहीं किया गया था, वापस आ गया है, इसलिए सर्वर (उदाहरण के लिए) बस के रूप में जवाब दे "पाया 0 उपकरणों" रखने के लिए खुश है क्योंकि अधिसूचनाएं प्राप्त करने में कोई डिवाइस विफल नहीं हुआ।

तो, जब एप्लिकेशन को उपकरण से निकाल दिया जाता है, तो ही, अधिसूचना सर्वर एक प्रतिक्रिया है, यानी प्रदान करेगा, यह अंत में उपकरणों कि ऐप को निकाल की सूची के साथ जवाब देंगे।

स्थानीय सर्वर के विचार भी काफी अच्छा है।

-Alex

==============

यहाँ एप्पल के कम से कम एक धक्का सक्षम एप्लिकेशन रखने के लिए सुझाव पर एक बुरा पक्ष प्रभाव है। थ्रेड पर पोस्ट किए गए दस्तावेज़ के लिए मेरा सुझाव यहां दिया गया है:

"प्रतिक्रिया सर्वर के साथ समस्याएं" पर, दो परिदृश्यों को नोट करना दिलचस्प है: 1) ऐप को एक वास्तविक डिवाइस पर उत्पादन मोड पर तैनात किया गया है; 2) ऐप को डेवलपमेंट डिवाइस पर सैंडबॉक्स में तैनात किया गया है;

1) संकेत एक आखिरी एप्लिकेशन को छोड़ने के लिए (मैं इसे सही होने के लिए) की उम्मीद है और वर्णित के रूप में काम करना चाहिए में; यहां कोई समस्या नहीं है।

2 पर), एक यकीन है कि पिछले एप्लिकेशन भी एक विकास अनुप्रयोग है बनाने के लिए है। या दूसरे शब्दों में, चीजों को सरल बनाने के लिए, एक दूसरे "सैंडबॉक्स एप्लिकेशन" है कि केवल है "आखिरी आदमी स्विच" प्रेस करना है।

मेरा मुद्दा यह है कि एक बार जब मैं अपना विकास ऐप हटा देता हूं, तो सैंडबॉक्स फीडबैक सर्वर पर कुछ भी नहीं होता है, भले ही डिवाइस पर अन्य पुश-सक्षम ऐप्स हों, हालांकि वे सभी उत्पादन ऐप्स हैं, इसलिए, वे उत्पादन प्रतिक्रिया सर्वर पर "रिपोर्ट" (यदि आप ऐसा कह सकते हैं) करेंगे।

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

उम्मीद है कि यह सही है ... tonite का परीक्षण करेगा।

+8

मैं पुष्टि कर सकता हूं कि आपको उस डिवाइस पर दूसरे ऐप की आवश्यकता है जो सैंडबॉक्स सर्वर का उपयोग कर रहा है ताकि प्राप्त करने के लिए आप जिस ऐप का परीक्षण कर रहे हैं उस पर फीडबैक। यह लाइन के साथ एक नंगे-हड्डियों का ऐप हो सकता है: [[यूआईएप्लिकेशंस साझा अनुप्रयोग] रजिस्टरफॉररोटोटोटेशन टाइप: यूआईआरमोटेनोटेशन टाइप टाइपअर्ट]; ऐप प्रतिनिधि के didinishLaunchingWithOptions विधि में किया गया। – DougC

+0

@DougC दूसरा ऐप कैसे बनाएं। यदि निर्माण के लिए एक ही कॉर्ट का उपयोग करें और ऐप के नाम को बदलें, तो दूसरा पहले स्थानांतरित करेगा। क्या आप मुझे इसके बारे में कुछ सलाह दे सकते हैं। आपका बहुत बहुत धन्यवाद! – Judy

+0

जहां ऐप्पल इन दो परिदृश्यों को नोट करता है? यह एक अद्भुत जवाब है, लेकिन आपको यह स्रोत कहां मिला? –

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