iOS 应用从远程通知启动时加载错误
iOS app loads buggy when launching from a remote notification
我的 iOS 应用程序在从远程通知(当用户点击推送从终止状态打开应用程序的通知)。我根本不希望推送通知具有任何特殊功能,我希望它尽可能简单。
这就是我在 App Delegate 中配置通知的方式:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
setupUserNotifications()
return true
}
private func setupUserNotifications() {
let notifications = UNUserNotificationCenter.current()
let connectionMessages = UNNotificationCategory(identifier: "connectionMessageNotification",
actions: [],
intentIdentifiers: [],
options: UNNotificationCategoryOptions.init())
let interactionMessages = UNNotificationCategory(identifier: "interactionMessageNotification",
actions: [],
intentIdentifiers: [],
options: UNNotificationCategoryOptions.init())
notifications.delegate = self
notifications.setNotificationCategories([connectionMessages, interactionMessages])
notifications.requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
if granted {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
} else {
print(if: error)
}
}
}
这就是我处理委托的方式(什么都不做,只是调用完成):
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
print("did tap remote notification")
completionHandler()
}
有没有我遗漏的步骤?我应该实施 application(_:willFinishLaunchingWithOptions:)
吗?我不明白的是,如果用户通过点击推送通知启动应用程序,应用程序不应该直接启动而无需采取任何额外步骤吗?
问题是我的应用被配置为接收后台推送通知,它会在后台启动应用(在用户点击通知之前),所以当用户点击通知启动应用时我猜它有时会在某个中间状态捕获它,并且 UI 看起来很时髦。我假设需要采取额外的步骤来处理通过后台通知启动应用程序。无论如何,通过禁用后台通知,应用程序现在会在用户正常点击推送通知时启动。呼。
我的 iOS 应用程序在从远程通知(当用户点击推送从终止状态打开应用程序的通知)。我根本不希望推送通知具有任何特殊功能,我希望它尽可能简单。
这就是我在 App Delegate 中配置通知的方式:
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
setupUserNotifications()
return true
}
private func setupUserNotifications() {
let notifications = UNUserNotificationCenter.current()
let connectionMessages = UNNotificationCategory(identifier: "connectionMessageNotification",
actions: [],
intentIdentifiers: [],
options: UNNotificationCategoryOptions.init())
let interactionMessages = UNNotificationCategory(identifier: "interactionMessageNotification",
actions: [],
intentIdentifiers: [],
options: UNNotificationCategoryOptions.init())
notifications.delegate = self
notifications.setNotificationCategories([connectionMessages, interactionMessages])
notifications.requestAuthorization(options: [.alert, .sound, .badge]) { (granted, error) in
if granted {
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
} else {
print(if: error)
}
}
}
这就是我处理委托的方式(什么都不做,只是调用完成):
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
print("did tap remote notification")
completionHandler()
}
有没有我遗漏的步骤?我应该实施 application(_:willFinishLaunchingWithOptions:)
吗?我不明白的是,如果用户通过点击推送通知启动应用程序,应用程序不应该直接启动而无需采取任何额外步骤吗?
问题是我的应用被配置为接收后台推送通知,它会在后台启动应用(在用户点击通知之前),所以当用户点击通知启动应用时我猜它有时会在某个中间状态捕获它,并且 UI 看起来很时髦。我假设需要采取额外的步骤来处理通过后台通知启动应用程序。无论如何,通过禁用后台通知,应用程序现在会在用户正常点击推送通知时启动。呼。