iOS Safari 在用户取消后无法识别 url 方案
iOS Safari does not recognize url schemes after user cancels
我最近注意到 Safari 中的异常行为。
我为我的应用程序注册了一个url方案,并在Safari中输入myapp://
。
这会立即启动我的应用程序。
然后我回到Safari,再次输入myapp://
进入Safari,
这次提示我 "Open this page in "myapp"?" Cancel or Open.
如果我点击打开,我的应用程序将启动,并且后续尝试显示相同的警报。如果我尝试点击取消,我的应用程序将不会启动。这是预期的。
但是,如果我再次在 URL 栏中输入 myapp://
,系统会提示我 "Cannot Open Page" "Safari cannot open the page because the address is invalid."
对于所有后续尝试,这将以相同的方式失败,直到我终止 Safari 并重新启动它,或打开另一个选项卡。
这与 Youtube 和 Evernote 的行为相同。我的猜测是,当用户点击取消时,Safari 将 URL 缓存为无效的 URL。是否有关于此行为的官方文档?
在 iOS 8.1.2 和 iOS 6.1.3
中提供
在 9.1 中问题仍然存在。我的解决方案是重新启动 safari(向上滑动以从后台清除它)。
重新启动 Safari 应用程序或打开新标签页解决了这个问题
我遇到了同样的问题。一旦取消,就会报错。
我所做的是发送一个带有时间戳的额外参数,因此 Safari 不会缓存它。所以在最后一个参数之后,我添加了一个 foo 参数,其中包含自 1970 年 1 月 1 日午夜以来的毫秒数。我使用 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];
将始终看到弹出窗口,直到您单击 "Okay"
在 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
}
我最近注意到 Safari 中的异常行为。
我为我的应用程序注册了一个url方案,并在Safari中输入myapp://
。
这会立即启动我的应用程序。
然后我回到Safari,再次输入myapp://
进入Safari,
这次提示我 "Open this page in "myapp"?" Cancel or Open.
如果我点击打开,我的应用程序将启动,并且后续尝试显示相同的警报。如果我尝试点击取消,我的应用程序将不会启动。这是预期的。
但是,如果我再次在 URL 栏中输入 myapp://
,系统会提示我 "Cannot Open Page" "Safari cannot open the page because the address is invalid."
对于所有后续尝试,这将以相同的方式失败,直到我终止 Safari 并重新启动它,或打开另一个选项卡。
这与 Youtube 和 Evernote 的行为相同。我的猜测是,当用户点击取消时,Safari 将 URL 缓存为无效的 URL。是否有关于此行为的官方文档?
在 iOS 8.1.2 和 iOS 6.1.3
中提供在 9.1 中问题仍然存在。我的解决方案是重新启动 safari(向上滑动以从后台清除它)。
重新启动 Safari 应用程序或打开新标签页解决了这个问题
我遇到了同样的问题。一旦取消,就会报错。
我所做的是发送一个带有时间戳的额外参数,因此 Safari 不会缓存它。所以在最后一个参数之后,我添加了一个 foo 参数,其中包含自 1970 年 1 月 1 日午夜以来的毫秒数。我使用 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];
将始终看到弹出窗口,直到您单击 "Okay"
在 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
}