web-dev-qa-db-de.com

iOS Safari erkennt keine URL-Schemata, nachdem der Benutzer abgebrochen hat

Ich habe in letzter Zeit merkwürdiges Verhalten in Safari bemerkt.

Ich registriere ein URL-Schema für meine App und gebe myapp:// in Safari ein. Dadurch wird meine App sofort gestartet.

Dann gehe ich zurück zu Safari und gebe myapp:// erneut in Safari ein. Diesmal fordert es mich auf "Diese Seite in" myapp "öffnen?" Abbrechen oder Öffnen.

Meine App wird gestartet, wenn ich auf Öffnen tippe, und nachfolgende Versuche zeigen dieselbe Warnung an. Wenn ich versuche, auf Abbrechen zu tippen, wird meine App nicht gestartet. was erwartet wird.

Wenn ich jedoch myapp:// erneut in die URL-Leiste eingebe, werde ich aufgefordert "Seite kann nicht geöffnet werden" "Safari kann die Seite nicht öffnen, da die Adresse ungültig ist."

Dies schlägt bei allen nachfolgenden Versuchen auf die gleiche Weise fehl, bis ich Safari beende und neu starte oder eine andere Registerkarte öffne.

Dies ist das gleiche Verhalten bei Youtube und Evernote. Ich vermute, dass Safari die URL als ungültige URL zwischengespeichert hat, wenn der Benutzer auf Abbrechen tippt. Gibt es offizielle Unterlagen zu diesem Verhalten?

Bbserved in iOS 8.1.2 und iOS 6.1.3

24
tzl

In 9.1 besteht das Problem weiterhin. Die Lösung für mich ist, Safari neu zu starten (wischen Sie nach oben, um den Hintergrund zu löschen).

10
Jinghan Wang

Ich hatte das gleiche problem Einmal storniert, würde es diesen Fehler geben.

Ich habe einen zusätzlichen Parameter mit einem Zeitstempel gesendet, damit Safari ihn nicht zwischenspeichert. Also habe ich nach dem letzten Parameter einen foo-Parameter mit der Anzahl der Millisekunden seit dem 1. Januar 1970 um Mitternacht hinzugefügt. Ich verwende as3, aber dies sollte für alle Entwickler lesbar sein:

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

ein Neustart der Safari-App oder das Öffnen eines neuen Tabs löste dieses Problem

1
tzl

Wenn Sie Ihre URL aufrufen, fügen Sie Ihrem URL-Aufruf einen eindeutigen Wert wie timeStamp hinzu

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];

Wird immer dann das Popup sehen, bis Sie auf "Okay" klicken

Das Hinzufügen des folgenden Codes in AppDelegate hat mein Problem gelöst, ich hoffe, es funktioniert auch für Sie.

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.