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 servic
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:
[socket performBlock:^{
[socket enableBackgroundingOnSocket];
}];
step 3:
- (void)applicationDidEnterBackground:(UIApplication *)application {
inProgram = FALSE;
showedCall = FALSE;
BOOL backgroundAccepted = [[UIApplication sharedApplication] setKeepAliveTimeout:600 handler:^{ [self backgroundHandler]; }];
if (backgroundAccepted)
{
NSLog(@"VOIP backgrounding accepted");
}
}
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
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
if ([keyPath isEqualToString:@"currentDigitalJoin"])
{
switch ([[cClient currentDigitalJoin]intValue])
{
case 1000:
{
if (showedCall != TRUE && inProgram != TRUE) {
NSLog(@"incoming audio call");
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif) {
localNotif.alertBody = [NSString stringWithFormat:@"Incoming Call."];
localNotif.alertAction = NSLocalizedString(@"Accept Call", nil);
localNotif.soundName = @"alarmsound.caf";
[app presentLocalNotificationNow:localNotif];
[localNotif release];
showedCall = TRUE;
}
}
break;
}
case 602:
{
if (showedCall != TRUE && inProgram != TRUE) {
NSLog(@"incoming audio call");
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif) {
localNotif.alertBody = [NSString stringWithFormat:@"Incoming Call."];
localNotif.alertAction = NSLocalizedString(@"Accept Call", nil);
localNotif.soundName = @"alarmsound.caf";
[app presentLocalNotificationNow:localNotif];
[localNotif release];
showedCall = TRUE;
}
}
break;
}
case 513:
{
showedCall = FALSE;
break;
}
}
}else if([keyPath isEqualToString:@"currentDigitalJoin"])
{
switch ([[cClient currentDigitalJoin]intValue])
{
case 602:
{
showedCall = FALSE;
break;
}
}
}
}
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