将swift3与xcode 8.3一起使用,这是一个webview应用程序。
以下是我在ViewController.swift中的函数来处理从推送通知
收到的urlfunc redirectTo(url: String) {
let request = URLRequest(url: URL(string: url)!)
MyApp.loadRequest(request)
}
以下是我在AppDelegate.swift中处理didReceiveRemoteNotification的函数
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
if let pushUrl = userInfo[AnyHashable("url")] as? String {
viewController?.redirectTo(url: pushUrl)
}
}
当我的应用在后台运行时,它会将我的应用重定向到点击它时收到通知的网址。
然而,当我的应用程序在前台运行时,它会直接将我的webview重定向到url而不做任何事情。
我知道这是因为每次收到通知时,都会调用redirectTo函数然后调用loadRequest。
我的问题是,如何添加一个带有两个按钮的消息框,当我的应用程序在forefround上运行并收到通知时,它会要求用户重定向或取消?
答案 0 :(得分:0)
您可以创建警报以获取用户的确认。像这样的东西
let alert = UIAlertController(title: "YOUR_TITLE", message: "YOUR_MESSAGE", preferredStyle: .alert)
let okAction = UIAlertAction(title: "Ok", style: .default) { _ in
// Handle your ok action
}
alert.addAction(okAction)
let cancelAction = UIAlertAction(title: "Cancel", style: .cancel) { _ in
// Handle your cancel action
}
alert.addAction(cancelAction)
DispatchQueue.main.async {
self.present(alert, animated: true, completion: nil)
}
由于URLRequest可能很昂贵,您可能希望在后台实现它。
DispatchQueue.global().async {
let request = URLRequest(url: URL(string: url)!)
MyApp.loadRequest(request)
}