У меня есть приложение webview ios, которое получает уведомления, и я передаю URL-адрес, чтобы при щелчке пользователя на уведомлении он открывал веб-просмотр по этому URL-адресу.
Когда приложение находится на переднем плане и в фоне, оно работает нормально. Если пользователь получает уведомление, когда приложение закрыто и в данный момент не запущено, приложение открывается, но не переходит на этот URL
В моем didReceiveRemoteNotification
я обнаруживаю различные состояния приложения, но я думал, что .background будет работать так же, как не работает, но я думаю, что нет. Как я могу получить уведомление об открытии URL-адреса, когда приложение закрывается?
AppDelegate.swift
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
let data = userInfo as! [String: AnyObject]
let state = UIApplication.shared.applicationState
if state == .background {
// background
//print("==== Active Running ====")
if let aps = data["aps"] {
let url = aps["url"]
viewController?.loadRequestnotification(for: url as! String)
}
}
else if state == .inactive {
// inactive
//print("==== Inactive Running ====")
if let aps = data["aps"] {
let url = aps["url"]
viewController?.loadRequestnotification(for: url as! String)
}
}
}
UPDATE
Так что с некоторой помощью я смог использовать didFinishLaunchingWithOptions
для вызова моего веб-просмотра, но уведомление при нажатии все еще не открывается для URL.
Я использую viewController?.loadRequestnotification(for: url as! String)
в некоторых других областях моего делегата, который работает нормально. Я подозреваю, что return true
может конфликтовать с вызовом.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
UNUserNotificationCenter.current().delegate = self
ConnectionManager.sharedInstance.observeReachability()
// Override point for customization after application launch.
FirebaseApp.configure()
registerForPushNotifications()
if launchOptions != nil {
// opened from a push notification when the app is closed
let userInfo = launchOptions?[.remoteNotification] as? [AnyHashable : Any]
if userInfo != nil {
if let object = userInfo?["aps"] as? [String : AnyObject] {
let url = object["url"]
viewController?.loadRequestnotification(for: url as! String)
}
}
}
return true
}