मुझे आईओएस एप्लिकेशन में पृष्ठभूमि में चलाने के लिए वीओआईपी सॉकेट मिल रहा है।आईओएस वीओआईपी सॉकेट पृष्ठभूमि में नहीं चलाएगा
मेरा कनेक्शन ठीक काम करता है, लेकिन जब मेरा ऐप पृष्ठभूमि में जाता है तो यह जाग नहीं जाएगा। यदि मैं ऐप बैक अप खोलता हूं, हालांकि, यह सोते समय प्राप्त होने वाले किसी भी संदेश का जवाब देता है।
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault,
(CFStringRef) @"test.iusealocaltestserver.com",
5060,
&myReadStream,
&myWriteStream);
CFReadStreamSetProperty ( myReadStream,
kCFStreamNetworkServiceType,
kCFStreamNetworkServiceTypeVoIP
);
CFSocketNativeHandle native;
CFDataRef nativeProp = CFReadStreamCopyProperty(myReadStream, kCFStreamPropertySocketNativeHandle);
CFDataGetBytes(nativeProp, CFRangeMake(0, CFDataGetLength(nativeProp)), (UInt8 *)&native);
CFRelease(nativeProp);
CFSocketRef theSocket = CFSocketCreateWithNative(kCFAllocatorDefault, native, 0, NULL, NULL);
CFSocketGetContext(theSocket,&theContext);
CFOptionFlags readStreamEvents = kCFStreamEventHasBytesAvailable |
kCFStreamEventErrorOccurred |
kCFStreamEventEndEncountered |
kCFStreamEventOpenCompleted;
CFReadStreamSetClient(myReadStream,
readStreamEvents,
(CFReadStreamClientCallBack)&MyCFReadStreamCallback,
(CFStreamClientContext *)(&theContext));
CFReadStreamScheduleWithRunLoop(myReadStream, CFRunLoopGetCurrent(),
kCFRunLoopCommonModes);
तब मेरे कॉलबैक इस तरह की स्थापना की है:
static void MyCFReadStreamCallback(CFReadStreamRef stream, CFStreamEventType type, void *pInfo);
static void MyCFReadStreamCallback (CFReadStreamRef stream, CFStreamEventType type, void *pInfo)
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"Callback Happened");
[pool release];
}
"कॉलबैक हुआ" और जब मैं डेटा प्राप्त बुलाया जा रहा है अनुप्रयोग है
मैं इस तरह मेरी धारा की स्थापना खुला है, लेकिन ऐसा नहीं होता है कि ऐप कम हो गया है। जब ऐप बैक अप आता है, हालांकि, यह कम से कम प्राप्त होने वाले किसी भी डेटा को संसाधित करता है।
मैंने info.plist पर वीओआईपी टैग जोड़ा। मेरा CFReadStreamSetProperty सच हो जाता है। मैं एक डिवाइस पर चल रहा हूं सिम्युलेटर नहीं। हालांकि यह अभी भी काम नहीं करता है, इसलिए मुझे नहीं पता कि मेरी समस्या क्या हो सकती है। मैंने शायद कुछ मूर्खतापूर्ण किया है, लेकिन मेरे कोड को जांचने के लिए ऑनलाइन कुछ भी नहीं है।
संपादित करें: मैं किसी भी उत्तर का परीक्षण नहीं कर सकता क्योंकि अब मैं इस परियोजना पर काम नहीं कर रहा हूं और मैक/आईओएस एसडीके तक पहुंच नहीं है। अगर किसी ऐसी समस्या वाले किसी व्यक्ति को नीचे दिए गए उत्तरों में से एक उपयोगी पाया गया है, तो मुझे बताएं और मैं इसे सबसे अच्छा जवाब दूंगा।
+1: क्या आपने प्लेस्ट में "ऑडियो" टैग भी जोड़ा था? मैं बस मल्टीटास्किंग के बारे में एप्लिकेशन प्रोग्रामिंग गाइड से पढ़ रहा हूं लेकिन ऐसा लगता है कि यह अनियमित है। आशा है कि आपको जवाब मिलेगा। अच्छा प्रश्न। –
मैं कोई ऑडियो नहीं चला रहा हूं (अभी तक) ताकि इससे कोई फर्क नहीं पड़ता। लेकिन मैंने वैसे भी कोशिश की और यह काम नहीं किया। कम से कम मुझे कोशिश करने के लिए कुछ देने के लिए धन्यवाद, मैं बस अपने सिर को घंटों तक तोड़ रहा हूं। – Joel
क्या आप लाइव टाइमआउट हैंडलर को रखने के लिए कोड पोस्ट कर सकते हैं? –