Я пытаюсь реализовать this (Настройка сокетов для использования VoIP), используя this (CocoaAsyncSocket). Насколько я знаю, шаг 1, который я сделал, добавил VOIP к фоновым службам в plist, и ниже должен быть шаг 2 (настройка одного из сокетов приложения для использования VoIP)
- (void)socket:(GCDAsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)connectedPort
{
[CCV setLocalMode:FALSE];
[socket performBlock:^{
[socket enableBackgroundingOnSocket];
}];
Но остальные шаги я не могу понять.
Если я сделаю
- (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;
}
}
});
}
Мой клиент послушает 10 минут, затем остановится. Мне нужно сделать 2 вещи: наблюдать за конкретным пакетом данных (входящий вызов) и отправлять подтверждение активности каждые 5 секунд. Но я не вижу, где эти вещи должны быть настроены. Кроме того, в приведенном выше определении ссылки на яблоко указано "Чтобы предотвратить потерю соединения, приложению VoIP обычно необходимо периодически просыпаться и регистрироваться на своем сервере. Чтобы упростить это поведение, iOS позволяет установить специальный обработчик, используя setKeepAliveTimeout:handler:
метод UIApplication
" Насколько я понимаю, этот тайм-аут должен выполнять только keepalive, однако это не имеет смысла, поскольку минимальное время составляет 600 секунд? И, как я сказал выше, я не могу найти, где я говорю, какой пакет искать, а также что делать, когда он найден.