I’m trying to implement this(Configuring Sockets for VoIP Usage) using this(CocoaAsyncSocket). To the best of my knowledge step 1 I have done, adding VOIP to background services in the plist, and below should be step 2 (Configure one of the app’s sockets for VoIP usage)
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)connectedPort
{
[CCV setLocalMode:FALSE];
[socket performBlock:^{
[socket enableBackgroundingOnSocket];
}];
But the rest of the steps I cannot figure out.
If I do
- (void)applicationDidEnterBackground:(UIApplication *)application
{
expirationHandler = ^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];
};
bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
while (1) {
sleep(1);
//NSLog(@"BGTime left: %f", [UIApplication sharedApplication].backgroundTimeRemaining);
if ([rootViewController isIncomingCall] && showedCall != TRUE) {
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif) {
localNotif.alertBody = [NSString stringWithFormat:@"Incoming Call."];
localNotif.alertAction = NSLocalizedString(@"Accept Call", nil);
localNotif.soundName = @"alarmsound.caf";
// localNotif.applicationIconBadgeNumber = 1;
[application presentLocalNotificationNow:localNotif];
[localNotif release];
}
showedCall = TRUE;
}
}
});
}
My client will listen for 10mins then stop. I need to do 2 things: watch for a specific (incoming call) data packet, and send a keepalive every 5seconds. But I dont see where these things are to be configured at. Furthermore the definition on the apple link above states “To prevent the loss of its connection, a VoIP app typically needs to wake up periodically and check in with its server. To facilitate this behavior, iOS lets you install a special handler using the setKeepAliveTimeout:handler: method of UIApplication“ From my understanding of that this timeout thing should only be doing the keepalive, however that doesnt make sense because the minimal time is 600seconds? And like I said above I cannot find where I tell it what packet to look for as well as what to do when its found.
so i believe i have resolved the issue but need further testing to be 100% sure. Currently i ran a test with this code for the length of 21mins of suspended time and it worked
step 2:
step 3:
this seems to keep my client running so from here i add an observer to wait for my incoming call packet and launch a notification when that packet is seen
NOTE: the “step”s indicated are in reference to the steps indicated on the apple documentation
also dont forget to set the require wireless in the plist file