Отмена уведомления о баннере в iOS8 не работает

Возможно, мой заголовок не совсем точно отражает мой вопрос, поэтому я прошу прощения. Я искал решение для создания этого уровня функциональности, но я не могу его найти.

Я создаю приложение VoIP для iOS 8. Когда пользователь получает звонок, я отображаю уведомление с 12-секундной мелодией звонка. Пока это уведомление выполняется, если вызов отключается, я хочу, чтобы уведомление о входящем вызове исчезло и немедленно отобразило уведомление о пропущенном вызове. Этот уровень функциональности возможен, потому что Viber делает это.

В настоящее время я отправляю тихое push-уведомление, когда доступен входящий вызов. Это моя полезная нагрузка ...

aps = {
        "content-available" = 1;
      };
      category = INCOMING;
      from = "+15555554220";

Получив тихий толчок, я создаю локальное уведомление, как это ...

if ([userInfo[@"category"] isEqualToString:@"INCOMING"]) {
                NSLog(@"application: didReceiveRemoteNotification:  fetchCompletionHandler: Incoming Call Notification Received");

                NSLog(@"application: didReceiveRemoteNotification:  fetchCompletionHandler: Sending Local Notification For Incoming Call");

                // Get Caller Contact Info
                NSDictionary *contact = [self findContactInfoForNumber:userInfo[@"from"]];

                NSString *message = [NSString stringWithFormat:@"Incoming Call: %@",userInfo[@"from"]];

                if (contact != nil) {
                    message = [NSString stringWithFormat:@"Incoming Call: %@ %@",contact[@"firstName"],contact[@"lastName"]];
                }

                UILocalNotification *notification = [[UILocalNotification alloc] init];
                NSMutableDictionary *infoDict = [NSMutableDictionary dictionaryWithObject:@"Incoming Call" forKey:@"type"];
                notification.userInfo = infoDict;
                notification.category = @"INCOMING_CALL_CATEGORY";
                notification.fireDate = [NSDate dateWithTimeIntervalSinceNow:1];
                notification.alertBody = message;
                notification.timeZone = [NSTimeZone defaultTimeZone];
                notification.soundName = @"ring.m4a";

                [[UIApplication sharedApplication] scheduleLocalNotification:notification];

            }

Затем, как только вызов отключен, я отправляю еще одно тихое push-уведомление о пропущенном вызове ...

aps = {
        "content-available" = 1;
      };
      category = MISSED;

После получения я отменяю все локальные уведомления, как это ...

if ([userInfo[@"category"] isEqualToString:@"MISSED"]) {
     NSLog(@"application: didReceiveRemoteNotification:  fetchCompletionHandler: Missed Call Notification Received");
     [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
     [[UIApplication sharedApplication] cancelAllLocalNotifications];
}

Проблема, с которой я сталкиваюсь, заключается в том, что на экране блокировки она ведет себя именно так, как я хочу. Я получаю уведомление о входящем звонке, и когда звонящий кладет трубку, уведомление немедленно исчезает из центра уведомлений, и вместо него появляется уведомление о пропущенном звонке. Однако, когда телефон находится на главном экране. Показывается баннер, затем воспроизводится весь рингтон, затем отображается пропущенный вызов. Кто-нибудь знает причину, почему это происходит? У кого-нибудь есть какие-либо решения для достижения такого уровня функциональности? Как я уже говорил, приложение Vider - яркий пример того, что я хочу, чтобы мое приложение делало.

Заранее спасибо.

Ответы на вопрос(0)

Ваш ответ на вопрос