当我的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)
        }
    }
}

这就是我处理委托的方式(什么都不做,只是调用completion):

func userNotificationCenter(_ center: UNUserNotificationCenter,
                            didReceive response: UNNotificationResponse,
                            withCompletionHandler completionHandler: @escaping () -> Void) {
    print("did tap remote notification")
    completionHandler()
}

有没有我错过的一步?我应该执行application(_:willFinishLaunchingWithOptions:)吗?我不明白的是,如果用户通过点击推送通知来启动应用程序,应用程序难道不应该正常启动而不需要采取任何额外的步骤吗?

推荐答案

问题是,我的应用程序被配置为接收后台推送通知,它会在后台启动应用程序(在用户点击通知之前),因此,当用户点击通知启动应用程序时,我猜,有时会在某种中间状态下捕捉到它,UI会看起来很奇怪.我假设需要采取额外的步骤来处理通过后台通知启动应用程序的问题.不管怎样,通过禁用后台通知,现在当用户正常点击推送通知时,应用程序将启动.呼.

Ios相关问答推荐

以编程方式更改VC&39;S导航栏按钮的属性,以响应另一个VC中的按钮按下

为什么AVSpeechSynthesizer复制的信息比我的文本多?

如何在后台显示 Swift UI 中的通讯通知?

Flutter应用内购买无法恢复购买

使用 AVCaptureDeviceTypeBuiltInTripleCamera 时 Select 合适的相机进行条码扫描

通过 Rosetta 打开模拟器 xcode 14 以修复滚动

小部件链接有效,但不执行任何操作

如何在Collection 后更改并保留按钮 colored颜色 ,然后在 SwiftUI 中切换回来?

向左或向右移动时如何水平翻转sprite?

使用 Vim 代替(或与)Xcode 进行 iOS 开发

无法将NSTaggedPointerString类型的值转换为NSNumber

在 Grand Central Dispatch 中使用 dispatch_sync

以编程方式 Select UITextField 中的所有文本

Xcode / iOS模拟器:手动触发重大位置更改

如何在 Objective-C 中组合两个数组?

如何在 UILabel 中找到文本子字符串的 CGRect?

Xcode 4.2 如何将一个项目包含到另一个项目中?

如何在 Android 和 iPhone 的移动应用程序中实施推荐计划

更新字段时,UITextField值已更改未触发

未找到符号:kUTTypeImage