iOS Safari не распознает схемы url после отмены пользователем
недавно я заметил странное поведение в Safari.
я регистрирую схему url для моего приложения и введите myapp://
в Safari.
Это немедленно запускает мое приложение.
затем я возвращаюсь в Safari и вхожу myapp://
снова в Safari,
на этот раз он подсказывает мне "открыть эту страницу в "myapp"?" отменить или открыть.
мое приложение запустится, если я нажму на open, и последующие попытки показывают то же самое предупреждение. Если я попытаюсь нажать "отмена" , мое приложение не будет запуск. чего ожидал.
однако, если я войду myapp://
в строке URL снова, мне предлагается "не удается открыть страницу" "Safari не может открыть страницу, потому что адрес недействителен."
это не удастся так же для всех последующих попыток, пока я не убью Safari и не перезапущу его или не открою другую вкладку.
это то же самое поведение с Youtube и Evernote. я предполагаю, что Safari кэшировал URL-адрес как недопустимый URL-адрес, когда пользователь нажимает на отмена. Есть ли официальная документация об этом поведении?
Bbserved в iOS 8.1.2 и iOS 6.1.3
5 ответов
в 9.1 проблема все еще существует. Решение для меня - просто перезапустить safari (проведите пальцем вверх, чтобы очистить его от фона).
У меня была та же проблема. После отмены, это даст эту ошибку.
Я отправил дополнительный параметр с меткой времени, поэтому Safari не будет кэшировать его. Поэтому после последнего парама я добавил Foo param с количеством миллисекунд с полуночи 1 января 1970 года. Я использую as3, но это должно быть читаемо для всех разработчиков:
var foo:Number = new Date().time; //The number of milliseconds since midnight January 1, 1970
var urlRequest:URLRequest = new URLRequest(url+"&foo="+foo);
при вызове url-адреса добавьте уникальное значение, такое как отметка времени для вызова url
double currentt = [[NSDate new] timeIntervalSince1970];
NSTimeInterval differ= [[NSDate dateWithTimeIntervalSince1970:currentt] timeIntervalSinceDate:[NSDate dateWithTimeIntervalSince1970:1296748524]];
NSLog(@"differ: %f", differ);
NSString *url =[NSString stringWithFormat: @"https://thisisawebsite×tamp=%f", differ];
всегда будет видеть всплывающее окно, пока вы не нажмете "хорошо"
добавление следующего кода в AppDelegate решило мою проблему, надеюсь, это сработает и для вас.
func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool {
let notification = Notification(name: Notification.Name(rawValue: "AppNotificationLaunchString"), object: nil, userInfo: [UIApplicationLaunchOptionsKey.url:url])
NotificationCenter.default.post(notification)
return true
}