iOS 10: как показать уведомление о входящем вызове VOIP, когда приложение находится в фоновом режиме?

Я работаю над audio/video call и пытаюсь получить цикл входящего вызова notification в течение 1 минуты, как WhatsApp показывает в iOS, когда приложение находится в фоновом режиме, Notification banner скрыть и показать с мелодией звонка в течение 1 минуты.

Я пробовал этот код, он срабатывает только один раз:

 UNMutableNotificationContent *content = [[UNMutableNotificationContent alloc] init];
    content.title = [NSString stringWithFormat:@"Video Call from %@",userId];
    content.body = @"";
    content.userInfo = [userInfo mutableCopy];
    content.sound = [UNNotificationSound soundNamed:@""];

    NSDate *now = [NSDate date];
    now = [now dateByAddingTimeInterval:3];
    NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian];
    [calendar setTimeZone:[NSTimeZone localTimeZone]];

    NSDateComponents *components = [calendar components:NSCalendarUnitYear|NSCalendarUnitMonth|NSCalendarUnitDay|NSCalendarUnitHour|NSCalendarUnitMinute|NSCalendarUnitSecond|NSCalendarUnitTimeZone fromDate:now];

    UNCalendarNotificationTrigger *trigger = [UNCalendarNotificationTrigger triggerWithDateMatchingComponents:components repeats:NO];
    UNNotificationRequest * request = [UNNotificationRequest requestWithIdentifier:@"INCOMING_VOIP_APN" content:content trigger:trigger];

    UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
    center.delegate = self;
    [center addNotificationRequest:request withCompletionHandler:^(NSError * _Nullable error) {
        if (!error) {
            NSLog(@"PUSHKIT : INCOMING_VOIP_APN");
        }
    }];

Как я могу этого добиться? Я использую UserNotifications.framework (iOS 10) и PushKit.


person Abhishek Thapliyal    schedule 25.01.2017    source источник
comment
@Jayprakash Dubey: Вы можете помочь в этом вопросе?   -  person Abhishek Thapliyal    schedule 31.01.2017
comment
Вы хотите получать уведомления здесь непрерывно в течение 1 минуты или с интервалом в 1 минуту?   -  person gurmandeep    schedule 31.01.2017
comment
я хочу, чтобы уведомление отображалось в течение 3 секунд и скрывалось, и этот процесс должен выполняться только в течение 1 минуты, как и входящий вызов WhatsApp, когда приложение находится в фоновом режиме в ios   -  person Abhishek Thapliyal    schedule 31.01.2017
comment
@AbhishekThapliyal Я столкнулся с той же проблемой, не могли бы вы помочь мне, как вы этого достигли.   -  person siva krishna    schedule 02.05.2017
comment
@siva krishna: использовать фоновую задачу с обработчиком истечения срока действия raywenderlich.com/29948/backgrounding-for- ios Показать локальное уведомление с таймером на 1 минуту, воспроизвести аудио в той же ветке. Проголосуйте и за мой вопрос :)   -  person Abhishek Thapliyal    schedule 02.05.2017
comment
@AbhishekThapliyal Я не нашел кода для воспроизведения звука. У меня настроено уведомление. Но иногда звучит звук по умолчанию, иногда его тоже нет, я использую twillio(twilio.com/docs/guides/video/) для voip-звонков.   -  person siva krishna    schedule 02.05.2017
comment
stackoverflow.com/questions/10329291/play- a-short-sound-in-ios   -  person Abhishek Thapliyal    schedule 02.05.2017
comment
@AbhishekThapliyal 1. Можно ли получить текущую мелодию звонка для iphone и воспроизвести этот звук. 2. Что меня беспокоит, если я получаю видеозвонок, который не нужно принимать с моей стороны, он должен быть принят автоматически. Когда приложение находится на переднем плане. Когда приложение находится в фоновом режиме, оно также принимается, но звонивший видит экран баланса, поскольку приложение является фоновым. поэтому, если я воспроизвожу звук (например, мелодию звонка). тогда шансы выйти на передний план высоки. Поэтому, когда я хочу воспроизвести звук, поскольку мой видеовызов уже был инициирован, мой звук не воспроизводится.   -  person siva krishna    schedule 04.05.2017
comment
1 : github.com/TUNER88/iOSSystemSoundsLibrary 2 : это невозможно, требуется вмешательство человека для этого и, во-вторых, Apple не позволяет отображать какое-либо представление, когда приложение находится в фоновом режиме, поэтому это единственный возможный способ показать/анимировать локальное уведомление   -  person Abhishek Thapliyal    schedule 04.05.2017
comment
@AbhishekThapliyal вы нашли ответ, пожалуйста, помогите мне.   -  person Siva Sankar    schedule 31.10.2019


Ответы (2)


Я бы предположил, что локальное уведомление видно только в это конкретное время. Что вам нужно сделать, так это установить локальное уведомление или уведомление во время звонка. Когда уведомление срабатывает, в методе делегата уведомления вам нужно будет создать пользовательскую логику с помощью NSTimer.

Создайте представление, похожее на push-уведомление/или представление, которое вы хотите отобразить для вызова. Добавьте его в окно приложения, чтобы оно отображалось поверх всех представлений. Через 3 секунды удалите этот вид, и в логике вы можете показать тот же вид в течение 1 минуты.

person gurmandeep    schedule 01.02.2017
comment
С помощью backgroundExecution With Expiration Handler я сделал 95% того, что мне нужно, поскольку я могу сделать только 30 секунд :) - person Abhishek Thapliyal; 02.02.2017
comment
Рад помочь вам :) Счастливых друзей-программистов - person gurmandeep; 03.02.2017

iOS 10 CallKit намного лучше, больше нет уведомлений, но есть пользовательский интерфейс системного вызова, как и нативный вызов. На Github есть несколько примеров кода, которые легче читать, чем пример Apple Speakerbox.

person Qiulang    schedule 20.02.2017
comment
пожалуйста, помогите мне в этом вопросе: «ios 9 beginbackgroundtaskwithexpirationhandler вызывается до тайм-аута»> stackoverflow.com/questions/42266258/ - person Abhishek Thapliyal; 20.02.2017
comment
Я имел в виду свой ответ на другой вопрос. Не этот :) - person Qiulang; 20.02.2017