Для начала нужно определиться вы о локальном уведомлении или о пуш? Пуши "не прилетают в шторку не зависимо от того запущено ли приложение или нет". По умолчанию работает именно так, как я написал выше. Однако, начиная с iOS 10 был добавлен дополнительный метод делегата, который позволяет управлять обработкой локального уведомления. https://developer.apple.com/documentation/usernotifications/handling-notifications-and-notification-related-actions?language=objc#Handle-notifications-while-your-app-runs-in-the-foreground Мы этот метод используем: procedure TfgiOSNotificationCenterDelegate.userNotificationCenter(center: UNUserNotificationCenter;
notification: UNNotification; completionHandler: Pointer);
function HasContentAvailable(const AUserInfo: NSDictionary): Boolean;
var
APS: Pointer;
ContentAvailable: Pointer;
begin
Result := False;
APS := AUserInfo.valueForKey(StrToNSStr('aps'));
if APS <> nil then
begin
ContentAvailable := TNSDictionary.Wrap(APS).valueForKey(StrToNSStr('content-available'));
if ContentAvailable <> nil then
Result := TNSNumber.Wrap(ContentAvailable).intValue = 1;
end;
end;
function ContentToPresentationOptions(const AContent: UNNotificationContent): UNNotificationPresentationOptions;
begin
Result := UNNotificationPresentationOptionAlert;
if AContent.sound <> nil then
Result := Result or UNNotificationPresentationOptionSound;
if AContent.badge <> nil then
Result := Result or UNNotificationPresentationOptionBadge;
end;
var
CompletionHandlerImpl: procedure(options: UNNotificationPresentationOptions); cdecl;
Content: UNNotificationContent;
Options: UNNotificationPresentationOptions;
IsPushNotification: Boolean;
LNotification: UNNotification;
LCompletionHandler: Pointer;
begin
LNotification := notification;
LCompletionHandler := completionHandler;
Content := LNotification.request.content;
// We catch notification with "content-available" flag in applicationDidReceiveRemoteNotificationWithFetchCompletionHandler
IsPushNotification := (Content.userInfo <> nil) and not HasContentAvailable(Content.userInfo);
if IsPushNotification then
PushNotificationReceived(LNotification);
@CompletionHandlerImpl := imp_implementationWithBlock(LCompletionHandler);
try
Options := ContentToPresentationOptions(Content);
if IsPushNotification then
Options := Options - UNNotificationPresentationOptionAlert;
CompletionHandlerImpl(Options);
finally
imp_removeBlock(@CompletionHandlerImpl);
end;
end;Для Пуш уведомлений мы не показываем его в шторке, так как пуш прилетает прямо в компонент сервиса по работе с уведомлениями. А вот локальные должны попадать в шторку. В принципе, можем сделать широковещательную рассылку сообщения (только под iOS), чтобы можно было переопределять состав флагов. Центр уведомлений TNotificationCenter - это разработка Embarcadero. В те времена, когда она была добавлена (~iOS 5), центр уведомлений был ограничен по функционалу. Вы задали вопрос, я вам ответил. После вы начинаете со мной дискутировать на тему, что это не логично. Я думаю вы должны понимать, что я не правильный адресат для спора, почему в Apple делают "не логично". Я думаю, вы можете обратиться с этим вопросом в службу поддержки разработчиков Apple, где они, возможно, могут поделиться с вами своими доводами. На то вы и разработчик, чтобы принимать решения. Разные приложения используют разные подходы: начиная от тостов с возможностью перехода по их нажатию и, продолжая локальным центром уведомлений внутри приложения. Теперь представьте ситуацию, когда каждое приложение в системе шлет вам бестолковые нотификации о бесполезных (в большинстве случаях) акциях. И вы как пользователь обматерите приложение и просто запретите ему слать любые нотификации в центр уведомлений. И если вы проследите историю разработки локальных уведомлений, в том же Андроиде или iOS, где с уведомлениями совсем была беда в старых версиях. Шторка уведомлений выглядела, как война и мир. Дальше в Гугл решили ввести понятие каналов, чтобы пользователь хоть как-то мог фильтровать бесполезные сообщения и оставлять только те, что ему реально нужны. Но не смотря на это, лично у меня даже не телефоне, который я использую ТОЛЬКО для разработки, вся шторка - это набор бесполезных уведомлений. Вот вам другая точка зрения. То есть пользователь работает в вашем приложении, потом его закрывает - завершает с ним работу (а не открывает шторку, чтобы посмотреть уведомление от приложения в котором Удобно :-) Но вы явно переоцениваете важность акции, как и любой рекламы в центре уведомления. P.S. Сразу вспоминается старое приложение Яндекс.Маркет, где грамотные маркетологи в погоне за продажами решили в центр уведомлений слать вместе со статусами заказов свои акции. В итоге либо ты получаешь и Акции и Статусы заказов (выбрать нельзя), либо просто отключаешь уведомления, что я и сделал. Сейчас правда они добавили возможность отключать уведомления для категорий. Приблизительно такая же ситуация и в озон и вайлдбери приложениях была.