web-dev-qa-db-fra.com

iOS Safari avec les schémas d'URL après l'annulation de l'utilisateur

Je remarque un comportement étrange dans Safari récemment.

J'enregistre un schéma d'URL pour mon application et saisis myapp:// dans Safari. Ceci lance immédiatement mon application.

Ensuite, je retourne à Safari et saisis myapp:// dans Safari à nouveau, Cette fois-ci, cela me demande "Ouvrir cette page dans" myapp "?" Annuler ou ouvrir.

Mon application se lancera si je touche ouvert, et que les tentatives suivantes affichent les mêmes alertes. Si j'essaie d'appuyer sur annuler, mon application ne se lancera pas. ce qui est attendu.

Cependant, si je saisis à nouveau myapp:// dans la barre d'URL, on me demande "Impossible d'ouvrir la page" "Safari ne peut pas ouvrir la page car l'adresse n'est pas valide."

Cela échouera de la même manière pour toutes les tentatives suivantes, jusqu'à ce que je tue Safari et le redémarre ou que j'ouvre un autre onglet.

C'est le même comportement avec Youtube et Evernote. J'imagine que Safari a mis l'URL en cache en tant qu'URL non valide lorsque l'utilisateur appuie sur annuler. Existe-t-il une documentation officielle sur ce comportement?

Bbserve dans iOS 8.1.2 et iOS 6.1.3

24
tzl

En 9.1, le problème existe toujours. La solution pour moi est juste de redémarrer Safari (balayez vers le haut pour le supprimer de l'arrière-plan).

10
Jinghan Wang

J'ai eu le même problème. Une fois annulé, cela donnerait cette erreur.

Ce que j'ai fait, c'est envoyer un paramètre supplémentaire avec un horodatage, afin que Safari ne le cache pas. Donc, après le dernier paramètre, j'ai ajouté un paramètre foo avec le nombre de millisecondes écoulées depuis le 1er janvier 1970 à minuit. J'utilise as3, mais cela devrait être lisible par tous les développeurs:

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

relancer l'application safari ou ouvrir un nouvel onglet a résolu ce problème

1
tzl

Lorsque vous appelez votre URL, ajoutez une valeur unique, telle que timeStamp, à votre appel d’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];

Est-ce que vous verrez toujours le popup jusqu'à ce que vous cliquiez sur "d'accord"

0

Ajouter le code suivant dans AppDelegate a résolu mon problème, j'espère que cela fonctionnera pour vous aussi.

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.