GCDAsyncSocket background VOIP

前端 未结 2 576
一向
一向 2021-02-04 21:59

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

2条回答
  •  梦谈多话
    2021-02-04 22:43

    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

提交回复
热议问题