Разработка кроссплатформенных приложений в Delphi с использованием Firemonkey позволяет создавать решения для iOS, Android и других платформ. Однако при работе с iPhone 14 Pro (и другими устройствами на iOS) разработчики могут столкнуться с проблемой, когда URL не открываются в браузере по умолчанию. В этой статье мы разберём причины этой ошибки и предложим несколько способов её решения.
Причины проблемы
Изменения в политике безопасности iOS
Начиная с iOS 14, Apple ужесточила требования к обработке URL, особенно в приложениях, использующих WebView или внешние ссылки.
Некорректные настройки Info.plist
Для открытия URL в Safari или другом браузере необходимо добавить соответствующие разрешения в файл конфигурации приложения.
Ошибки в коде вызова URL
В Firemonkey для открытия ссылок используется TUri, но иногда метод Open не срабатывает из-за особенностей iOS.
Решение 1: Использование SharedApplication через IFMXApplicationService
Один из способов открыть URL — использовать нативный вызов через OpenURL в iOS. Для этого можно воспользоваться сервисом IFMXApplicationService.
uses
FMX.Platform, FMX.Helpers.iOS, Macapi.Helpers, iOSapi.Foundation;
procedure OpenURL(const AURL: string);
var
URL: NSURL;
AppService: IFMXApplicationService;
begin
if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationService, AppService) then
begin
URL := StrToNSURL(AURL);
if Assigned(URL) then
SharedApplication.openURL(URL);
end;
end;
Плюсы:
- Работает на всех версиях iOS.
- Использует нативные механизмы открытия ссылок.
Минусы:
- Требует дополнительного кода для проверки платформы.
Решение 2: Добавление разрешений в Info.plist
Для корректной работы открытия URL в iOS 14+ необходимо добавить в Info.plist следующие ключи:
Если приложение использует кастомные схемы (например, myapp://), их также нужно указать.
Решение 3: Использование TUri с проверкой доступности
В Firemonkey можно использовать TUri, но перед открытием стоит проверить, поддерживается ли схема URL.
uses
System.UITypes, FMX.Dialogs;
procedure OpenLink(const AURL: string);
var
Uri: TUri;
begin
Uri := TUri.Create(AURL);
try
if not Uri.Open then
ShowMessage('Не удалось открыть ссылку: ' + AURL);
finally
Uri.Free;
end;
end;
Минусы:
- Может не работать на некоторых версиях iOS без дополнительных настроек.
Альтернативное решение: Использование WebView для открытия ссылок внутри приложения
Если внешний браузер не открывает URL, можно встроить WebView:
uses
FMX.WebBrowser;
procedure OpenInWebView(const AURL: string);
var
WebBrowser: TWebBrowser;
begin
WebBrowser := TWebBrowser.Create(nil);
try
WebBrowser.Align := TAlignLayout.Client;
WebBrowser.URL := AURL;
// Добавляем WebBrowser на форму или popup
except
WebBrowser.Free;
raise;
end;
end;
Плюсы:
- Полный контроль над отображением контента.
- Не требует переключения в Safari.
Минусы:
- Увеличивает размер приложения.
- Менее удобен для пользователя, чем внешний браузер.
Заключение
Проблема с открытием URL в Delphi Firemonkey на iPhone 14 Pro чаще всего связана с изменениями в iOS или отсутствием нужных разрешений. Лучшим решением является комбинация методов:
1. Добавление необходимых схем в Info.plist.
2. Использование IFMXApplicationService для гарантированного открытия ссылок.
3. Альтернативный вариант с TWebBrowser, если требуется встроенный просмотр.
Приведённые примеры кода помогут решить проблему и обеспечить корректную работу приложения на всех устройствах iOS.
Проблема с открытием URL в Delphi Firemonkey на iPhone 14 Pro, связанная с изменениями в iOS и настройками Info.plist, и способы её решения.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.