Мое приложение использует на разных экранах:
[[UIApplication sharedApplication] openURL:url];
для открытия URL-адресов, полученных от моего веб-сервиса. Иногда эти URL-адреса не имеют отношения к моему проекту, поэтому открывать их в Safari можно. Другие, эти URL-адреса принадлежат мне, например, сведения о продукте. Их может открыть мое приложение, используя универсальные ссылки и перейдя на соответствующий экран, но этого не происходит.
Читая документы Apple, я увидел это:
Важно понимать, что если ваше приложение использует openURL: чтобы открыть универсальную ссылку на ваш сайт, ссылка не открывается в вашем приложении. В этом сценарии iOS распознает, что вызов исходит из вашего приложения и поэтому не должен обрабатываться вашим приложением как универсальная ссылка.
Такое поведение смущает меня. Как я могу использовать openURL, чтобы попытаться сначала обработать этот URL-адрес внутри моего приложения, вместо того, чтобы переходить непосредственно в Safari?
Я нашел быстрый/грязный обходной путь. Удалите openURL и используйте его каждый раз, когда мое приложение использует openURL:
NSUserActivity* userActivity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb];
userActivity.webpageURL = url;
[[UIApplication sharedApplication].delegate application:[UIApplication sharedApplication] continueUserActivity:userActivity restorationHandler:nil];
Обратите внимание, что мой appdelegate application:continueUserActivity:restorationHandler: будет перенаправлять на openURL любой URL-адрес, который не имеет определенного экрана в моем приложении, поэтому он работает отлично, но я считаю, что это ужасное решение.