2015-01-19 9 views
13

मैं आईओएस के लिए एक वीओआईपी आवेदन लिखने की प्रक्रिया में हूं, लेकिन जब ऐप पृष्ठभूमि में है तो यह कॉल स्वीकार करने से रोकता है। जब ऐप फिर से सक्रिय होता है तो सभी कतारबद्ध संदेश संसाधित हो जाते हैं।आईओएस पृष्ठभूमि काम नहीं कर रहा

निम्नलिखित मैंने किया है।

ऐप बनाने के दौरान मैं वॉयस ओवर आईपी के साथ ही ऑडियो और एयरप्ले को प्लेस्ट फ़ाइल में जोड़ता हूं। फिर मैं NetworkServiceTypeVoIP के साथ वेबस्केट कनेक्शन को चिह्नित करता हूं क्योंकि आप here देख सकते हैं।

मैंने जिंदा टाइमआउट हैंडलर रखने के लिए सेट नहीं किया है क्योंकि पंजीकरण कोई फर्क नहीं पड़ता कि ऐप कॉल का जवाब देने के लिए जागृत नहीं होगा। किसी भी तरह की सहायता का स्वागत किया जाएगा।

यह ध्यान दिया जाना चाहिए कि यह मेरी पहली स्विफ्ट परियोजना है और मैं आईओएस मंच से बहुत परिचित नहीं हूं।

+0

क्या आप अपने वीओआईपी सॉकेट के रूप में एक टीसीपी सॉकेट का उपयोग कर रहे हैं? http://stackoverflow.com/a/7393083/624920 –

+0

मैं एक वेबसाइकिल का उपयोग कर रहा हूं इसलिए यह निश्चित रूप से टीसीपी है। आप यहां प्रोजेक्ट के लिए कोड पा सकते हैं https://github.com/BetterVoice/phonertc/blob/master/src/ios/WebSocket.swift#L27 –

उत्तर

0

आप अपने जवाब या कुछ सुराग मिल सकता है ->here < -

ठीक से निम्नलिखित अनुसंधान करने के लिए है:

applicationDidEnterBackground 
beginBackgroundTaskWithExpirationHandler 
1

एप्पल documentation पर एक नजर डालें, तो आप शायद में रुचि रखते हैं UIBackgroundModes=voip

युपीडी:

प्रलेखन से:

  1. पृष्ठभूमि मोड अनुभाग से आईपी पर आवाज के लिए समर्थन सक्षम:

    एक वीओआईपी एप्लिकेशन कॉन्फ़िगर करने के लिए आप निम्न कार्य करना होगा आपके एक्सकोड प्रोजेक्ट में क्षमताओं टैब। (आप भी को अपने ऐप्लिकेशन के Info.plist फ़ाइल में वीओआईपी मूल्य के साथ UIBackgroundModes कुंजी को शामिल करके इस समर्थन को सक्षम कर सकते हैं।)

  2. कॉन्फ़िगर वीओआईपी उपयोग के लिए एप्लिकेशन की सॉकेट में से एक।
  3. पृष्ठभूमि में जाने से पहले, setKeepAliveTimeout:handler: पर कॉल करें ताकि एक हैंडलर को समय-समय पर निष्पादित किया जा सके। आपका ऐप इस हैंडलर का उपयोग सेवा कनेक्शन को बनाए रखने के लिए कर सकता है।
  4. सक्रिय उपयोग से और संक्रमण को संभालने के लिए अपने ऑडियो सत्र को कॉन्फ़िगर करें।
+2

यदि लिंक मृत हो जाता है या परिवर्तन होता है, तो आपका उत्तर "आप" शायद 'UIBackgroundModes = voip'' में दिलचस्पी है। "। क्या आप इसे थोड़ा सा मांस दे सकते हैं ताकि लिंक के बाद अनावश्यक हो? –

+1

क्या निम्न अद्यतन आपके लिए कोई समझ में आया है? – ilidar

+0

आह, यह ** बहुत ** बेहतर है। धन्यवाद। –

2

पृष्ठभूमि मोड में अपने एप्लिकेशन काम करने की अनुमति के लिए, आप पर आईपी झंडा वॉइस ओवर सक्षम करने की आवश्यकता (पथ: लक्षित करने के लिए जाओ -> क्षमताओं -> पृष्ठभूमि मोड)। नीचे की तरह।

enter image description here

और अपनी परियोजना पृष्ठभूमि में समर्थन करने के लिए कोड निम्नलिखित जोड़ें:

चरण 1: वैश्विक चर के रूप में घोषित __block UIBackgroundTaskIdentifier bgTask।

चरण 2: एप्लिकेशन में निम्नलिखित कोड जोड़ने के लिए DidEnterBackground।

- (void)applicationDidEnterBackground:(UIApplication *)application { 

     bgTask = [application beginBackgroundTaskWithExpirationHandler:^{ 
     bgTask = UIBackgroundTaskInvalid; 
      }]; 

} 

चरण 3: रोक पृष्ठभूमि कार्य हैंडलर एक बार अग्रभूमि मोड में ऐप्स आते हैं।

- (void)applicationWillEnterForeground:(UIApplication *)application { 
    // Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background. 

    [[UIApplication sharedApplication] endBackgroundTask:bgTask]; 

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