Skip to content
View in the app

A better way to browse. Learn more.

FGX Native

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Yaroslav Brovin

Administrators
  • Joined

  • Last visited

Everything posted by Yaroslav Brovin

  1. Hello @Stefan Diestelmann , Do you think event should be invoked even if there are no selection changes? Thank you
  2. Changed Status to Open
  3. The new gradient designer was added in 1.18.14.0.
  4. The new property TfgCanvas.FillPathRule was added. Also this property was added to TfgSvgPath.
  5. Changed Status to Fixed Changed Resolution to Fixed Changed Fix version to 1.18.14.0
  6. Hello @yanchun , No we haven't implemente this support. But there are alternative solution: You can create new style for showing context menu for selected item with buttons. When user makes long tap on item, you reload style for selected item and switch style on context menu.
  7. Hello, We haven't had designer for gradient brush, but you can specify it via code. Thank you
  8. Выдержка из документации, ссылку на которую я выслал выше: По умолчанию локальное уведомление НЕ попадает в шторку, если приложение активно. НО система позволяет переопределить это поведение по умолчанию при помощи метода userNotificationCenter:willPresentNotification:withCompletionHandler: делегата. Мы этот метод используем, код его я выслал выше. И в нем мы для пушей не показываем Alert тип, а для не пуш уведомлений показываем. Если что Alert - это не шторка - а отображение уведомления в виде всплывающего диалога (но опять же отображение алерта зависит от глобальных настроек уведомлений на телефоне пользователя, так и от локальных на уровне приложения. Если алерт выключен, то уведомление не появится). Но в теории, можно поменять это поведение на то, чтобы уведомление падало в шторку.
  9. И последнее, текущая реализация TNotificationCenter в делфи на мой взгляд устаревшая. И этот компонент требует переработки. Поскольку это часть RTL, мы не можем вносить в него изменения. Поэтому остается только разработка нового. Но это пока не стоит в планах.
  10. На всякий случай рекомендую ознакомиться с первоисточниками и рекомендациям по использованию локальных уведомлений, что в iOS, что в Android. https://developer.apple.com/design/human-interface-guidelines/managing-notifications https://developer.android.com/design/ui/mobile/guides/home-screen/notifications
  11. Для начала нужно определиться вы о локальном уведомлении или о пуш? Пуши "не прилетают в шторку не зависимо от того запущено ли приложение или нет". По умолчанию работает именно так, как я написал выше. Однако, начиная с 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. Сразу вспоминается старое приложение Яндекс.Маркет, где грамотные маркетологи в погоне за продажами решили в центр уведомлений слать вместе со статусами заказов свои акции. В итоге либо ты получаешь и Акции и Статусы заказов (выбрать нельзя), либо просто отключаешь уведомления, что я и сделал. Сейчас правда они добавили возможность отключать уведомления для категорий. Приблизительно такая же ситуация и в озон и вайлдбери приложениях была.
  12. На iOS уведомление не показывается пока вы в приложении. У Apple следующая логика: Уведомления разработаны для уведомления пользователя, когда он не в приложении. В других случаях разработчик должен использовать другие средства для информирования пользователя пока он в приложении, чтобы не делать из центра уведомлений помойку. Нужно добавить в манифест уведомление POST_NOTIFICATION и запросить нужные разрешения в рантайме: NotificationC.RequestPermission;. Только что проверил на Android 11. При нажатии на уведомление в центре уведомлений оно появляется в мемо (не зависимо от текущего состояния приложения)
  13. Изменено Статус на Fixed Изменено Резолюция на Fixed Изменено Версия с исправлением на 1.18.14.0
  14. Изменено Статус на Open
  15. Изменено Статус на Open Изменено Резолюция на Unresolved
  16. Изменено Статус на Fixed Изменено Резолюция на Fixed Изменено Версия с исправлением на 1.18.14.0
  17. Изменено Статус на Open Изменено Резолюция на Unresolved
  18. Could you attach exported version of your IDE registry entities? PC\HKEY_USERS\<id>\Software\Embarcadero\BDS\24.0
  19. Скачать: Релиз доступен по запросу. Дата релиза: 31 мая 2025 Улучшения 🙌 Добавлен заголовочный файл Android.Api.OS для использования android.os.PowerManager. Исправление ошибок 🐛 Для некоторых компонентов-диалогов (например пикеры, диалог "Поделиться") iPad опция IsCancellable работала по противоположной логике (iOS). FGX-416 В окне FGX Options в разделе Основные не сохраняются изменения. FGX-438 BluetoothLE - не проходит событие "OnCharacteristicRead" (Android). FGX-439 MoveCameraToVisibleRegion всё еще не работает (Android). FGX-444 Difference to iOS Version with Backgroundcolorname (Android). FGX-445 Пример Biometric Authentication виснет (Android). FGX-447 TfgEdit.SelectionStart под IOS ведёт себя странно (iOS).

Account

Navigation

Search

Search

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.