如何在前台收到通知时弹出消息框?

时间:2017-07-05 03:28:39

标签: ios swift notifications

将swift3与xcode 8.3一起使用,这是一个webview应用程序。

以下是我在ViewController.swift中的函数来处理从推送通知

收到的url
func 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上运行并收到通知时,它会要求用户重定向或取消?

1 个答案:

答案 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)
}