Banner-Benachrichtigung unter iOS8 abbrechen funktioniert nicht
Mein Titel zeigt meine Frage möglicherweise nicht genau an, daher bitte ich um Entschuldigung. Ich habe nach einer Lösung gesucht, um diese Funktionsebene zu erstellen, kann sie jedoch nicht finden.
Ich erstelle eine VoIP-Anwendung für iOS 8. Wenn ein Benutzer einen Anruf erhält, wird eine Benachrichtigung mit einem 12-Sekunden-Klingelton angezeigt. Während diese Benachrichtigung ausgeführt wird, wenn der Anruf getrennt wird, soll die Benachrichtigung über eingehende Anrufe ausgeblendet werden und eine Benachrichtigung über verpasste Anrufe sofort angezeigt werden. Diese Funktionalität ist möglich, weil Viber dies tut.
Zurzeit sende ich eine stille Push-Benachrichtigung, wenn ein eingehender Anruf verfügbar ist. Das ist meine Nutzlast ...
aps = {
"content-available" = 1;
};
category = INCOMING;
from = "+15555554220";
Nach Erhalt des stillen Push erstelle ich eine lokale Benachrichtigung wie diese ...
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];
}
Dann sende ich nach dem Trennen des Anrufs eine weitere Stummschaltungsbenachrichtigung für einen unbeantworteten Anruf ...
aps = {
"content-available" = 1;
};
category = MISSED;
Nach Erhalt storniere ich alle lokalen Benachrichtigungen wie diese ...
if ([userInfo[@"category"] isEqualToString:@"MISSED"]) {
NSLog(@"application: didReceiveRemoteNotification: fetchCompletionHandler: Missed Call Notification Received");
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
[[UIApplication sharedApplication] cancelAllLocalNotifications];
}
Das Problem, auf das ich stoße, ist, dass es sich auf dem Sperrbildschirm genau so verhält, wie ich es möchte. Ich erhalte die Benachrichtigung über eingehende Anrufe, und wenn der Anrufer auflegt, verschwindet diese Benachrichtigung sofort aus dem Benachrichtigungscenter, und eine Benachrichtigung über verpasste Anrufe wird angezeigt. Allerdings, wenn das Telefon auf dem Startbildschirm ist. Es wird ein Banner angezeigt, das den gesamten Klingelton wiedergibt und dann den entgangenen Anruf anzeigt. Kennt jemand den Grund, warum dies geschieht? Hat jemand eine Lösung, um dieses Funktionsniveau zu erreichen? Wie ich bereits sagte, ist die App Vider ein hervorragendes Beispiel dafür, was meine App tun soll.
Vielen Dank im Voraus.