Отмена уведомления о баннере в 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 - яркий пример того, что я хочу, чтобы мое приложение делало.
Заранее спасибо.