Hi,We are a fairly large company providing smartphone and desktop applications for VoIP/UC together with PBX systems, on-premise as well as clourd offerings. All our app are talking to the telephony servers over SIP.Up unitl now, our flow on iOS was:Receive PushKit VoIP notificationREGISTER towards telephony serverReceive INVITEreportIncomingCallWith the changes enforced and outlined in https://developer.apple.com/videos/play/wwdc2019/707/, the whole SIP concept will break.We are now forced to report an incoming call so early that the user might accept the call before the REGISTER has completed and an INVITE has been received which will lead to a pretty bad user experience.Even worse, we will report an incoming call even if there is no actual call. This might happen as the call has already been canceled on the remote end and we won't get an INVITE. Or if the registration fails due to network issues that prevents us from reaching the telephony server.How does Apple expect us to deal with these situations?It's not possible to perform the whole REGISTER/INVITE stuff "in the same run loop as pushRegistry:didReceiveIncomingPushWithPayload:forType:[withCompletionHandler:] without delay."I'm not sure what our support and sales guys will do when they receive negative customer feedback with the changed implementation. Maybe tell existing and new customers to use Android smartphones instead of iPhones... There has to be at least some way of delaying the reportIncomingCall so that an application can check against the telephony server if there is a call and report if there is none to avoid punishment for not reporting the call.
Post
Replies
Boosts
Views
Activity
Hello,I got a very strange problem: UIUserNotifcationActions for my app do not show up on devices but show/work on Simulator.Setup: UIMutableUserNotificationAction* replyToChat = [UIMutableUserNotificationAction new];
replyToChat.activationMode = UIUserNotificationActivationModeForeground;
replyToChat.title = @"Reply";
replyToChat.identifier = @"replyToChat";
replyToChat.destructive = NO;
replyToChat.authenticationRequired = YES;
UIMutableUserNotificationAction* ignoreChat = [UIMutableUserNotificationAction new];
replyToChat.activationMode = UIUserNotificationActivationModeBackground;
ignoreChat.title = @"Ignore";
ignoreChat.identifier = @"ignoreChat";
ignoreChat.destructive = YES;
ignoreChat.authenticationRequired = NO;
UIMutableUserNotificationCategory* catChat = [[UIMutableUserNotificationCategory alloc] init];
catChat.identifier = @"myChat";
[catChat setActions:@[replyToChat, ignoreChat] forContext:UIUserNotificationActionContextDefault];
NSMutableSet *categories = [NSMutableSet setWithObject:catChat];
UIUserNotificationSettings* notifySettings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound|UIUserNotificationTypeBadge categories:categories];
[[UIApplication sharedApplication] registerUserNotificationSettings:notifySettings];Sending the local notification:UILocalNotification *localNotification = [[UILocalNotification alloc] init];
localNotification.alertBody = @"Test";
localNotification.timeZone = [NSTimeZone defaultTimeZone];
localNotification.category = @"myChat";
[[UIApplication sharedApplication] scheduleLocalNotification:localNotification];I can see, that the settings are properly registered and I've implemented all the the -handleAction callbacks in my App delegate.I can't finda reason why the buttons won't show up when sliding on device but show up in the Simulator. I've even done the complete notification settings reset according to https://developer.apple.com/library/ios/technotes/tn2265/_index.html#//apple_ref/doc/uid/DTS40010376-CH1-TNTAG42 without success.Anybody got some ideas?// Edit:I'm testing with Watch in parallel, there it is the same behavior. On the Simulator, the buttons for the actions show up and work as expected, on the actual Watch, only the default 'Close' button is there. Log from didReceiveLocalNotification on the Watch NotificationController confirms, that the notification.category is properly set and equal to the value I pass in applicationDidFinishLaunching.