it-swarm.com.ru

iOS Safari не распознает схемы URL после отмены пользователем

Я недавно заметил странное поведение в Safari.

Я зарегистрировал схему URL для своего приложения и ввел myapp:// в Safari . Это немедленно запустит мое приложение.

Затем я возвращаюсь в Safari и снова ввожу myapp:// в Safari, На этот раз он мне подсказывает "Открыть эту страницу в" myapp "?" Отмена или Открыть.

Мое приложение запустится, если я нажму на кнопку Открыть, и при последующих попытках отобразится то же предупреждение. Если я попытаюсь нажать Отмена, мое приложение не запустится. что ожидается.

Однако, если я снова введу myapp:// в строку URL, мне будет предложено «Не удается открыть страницу» «Safari не может открыть страницу, потому что адрес недействителен».

Это не удастся таким же образом для всех последующих попыток, пока я не убью Safari и не перезапущу его, или не открою другую вкладку.

Это то же самое поведение с Youtube и Evernote. я предполагаю, что Safari кэшировал URL-адрес как недопустимый, когда пользователь нажимает кнопку отмены. Есть ли официальная документация по этому поведению?

Bbserved в iOS 8.1.2 и iOS 6.1.3

24
tzl

В 9.1 проблема все еще существует. Решение для меня просто перезапустить сафари (проведите пальцем вверх, чтобы очистить его от фона).

10
Jinghan Wang

У меня такая же проблема. После отмены выдаст эту ошибку.

Я отправил дополнительный параметр с отметкой времени, чтобы Safari не кешировал его. Итак, после последнего параметра я добавил параметр foo с числом миллисекунд с полуночи 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);
4
APvG

перезапуск приложения safari или открытие новой вкладки решили эту проблему

1
tzl

Когда вы вызываете ваш URL, добавьте уникальное значение, например timeStamp, к вашему 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&timestamp=%f", differ];

Всегда будет видеть всплывающее окно, пока вы не нажмете «Хорошо»

0
Hannah Louisa Carney

Добавление следующего кода в 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
}
0
Himani C.