2013-02-25 8 views
5

Pracujemy nad aplikacją VoIP, kiedy moja aplikacja działa w tle, próbowałem użyć setKeepAliveTimeout: handler: aby utrzymać połączenie przy życiu. Zgodnie z dokumentacją Apple, prosi o podanie co najmniej 600 sekund jako czasu oczekiwania. W rzeczywistości utrzymujemy mniejszą wartość limitu czasu, czy można obsłużyć mniej czasu?Jak korzystać z setKeepAliveTimeout: handler - IOS?

A jeśli przekroczony zostanie limit czasu, jak korzystać z funkcji obsługi, aby zresetować licznik czasu lub zażądać więcej czasu, aby utrzymać połączenie przy życiu (aby odbierać połączenia przychodzące)?

Oto co robię ...

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

    BOOL backgroundAccepted = [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{ [self backgroundHandler]; }]; 
    if (backgroundAccepted) 
    { 
     NSLog(@"VOIP backgrounding accepted"); 
    } 
} 




- (void)backgroundHandler { 

    NSLog(@"### -->VOIP backgrounding callback"); // What to do here to extend timeout? 
} 

Odpowiedz

2

Z dokumentacji Apple „s:

The minimum acceptable timeout value is 600 seconds. 

EDIT odnośnie Twojego komentarza

połączenie

VoIP jest (prawie) normalne połączenie. To znaczy, jeśli masz przychodzące dane, Twoja aplikacja wznawia wykonywanie w tle. Procedura obsługi limitu czasu jest dla przypadku, w którym chcesz chcieć pingować drugą stronę, aby uniknąć przekroczenia limitu czasu. Trochę więcej informacji daje TN 2277.

+0

Czy masz pojęcie, jak obsługiwać handler z limitem czasu dla aplikacji VoIP. Chcę pozostać w kontakcie z serwerem i otrzymywać powiadomienia o przychodzących połączeniach? – Newbee

+0

Czy możemy używać normalnego gniazda C++ (nieobiektywnego C-socket-NSstream) jako połączeń VoIP. Jeśli tak, czy możesz wskazać mi właściwy kierunek, jak to zrobić? – Newbee

+1

Dokumentacja [Apple's] (http://developer.apple.com/library/ios/#documentation/NetworkingInternetWeb/Conceptual/NetworkingOverview/SocketsAndStreams/SocketsAndStreams.html): "W iOS odradza się tworzenie sieci POSIX". Jednakże, jeśli chcesz pójść twardo, możesz spróbować. Jeśli chcesz tylko uniknąć ObjC i jesteś zadowolony z powiązań C, użyj [CFNetwork] (https://developer.apple.com/library/mac/#documentation/Networking/Conceptual/CFNetwork/Introduction/Introduction.html). – Matthias

Powiązane problemy