我在处理推送通知
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
AppDelegate.swift
模块中的方法
当应用程序处于事件状态时,我会在应用程序窗口中显示我自己的横幅:
if application.applicationState == .active {
// create banner
banner.show()
}
当应用程序在后台 iOS 显示系统横幅时,当 application.applicationState
具有 .background
值时,我的应用程序接收信息。如果用户点击横幅应用程序再次接收数据,但 application.applicationState
为 .inactive
- 在这种情况下,我打开通知中收到信息的实体项。
但是当设备被密码锁定时(即需要代码或指纹):
- 应用程序仅在用户点击横幅时才会收到通知数据,而不是像仅在后台模式下那样立即收到通知数据(当设备未使用密码锁定时)
- 解锁后应用状态仍然是
.background
如何区分密码解锁后的后台状态和未锁定的后台状态?
我确实尝试通过处理设置标志
applicationDidBecomeActive(_ application: UIApplication)
和
applicationWillEnterForeground(_ application: UIApplication)
事件但是
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
提前打电话
最佳答案
您可以使用 isProtectedDataAvailable
确定设备当前是否被锁定UIApplication
let isUnlocked = UIApplication.shared.isProtectedDataAvailable
然后您可以结合使用 isUnlocked
和 applicationState
来确定您处于后台但设备已锁定并进行相应处理。
请注意,如果设备上未启用数据保护(例如,未设置密码),isProtectedDataAvailable
将始终返回 true
。
关于ios - 如何处理在密码锁定的 iOS 设备上点击推送通知横幅?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48002584/